Adição: Criado um TabViewUtil, criada a pagina de pets e adicionado o Tab e o Appbar

This commit is contained in:
Lucas 2024-09-03 17:01:31 -03:00
parent ae0fe2f75f
commit 90ae49df06
7 changed files with 263 additions and 12 deletions

View File

@ -0,0 +1,74 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
class TabViewUtil extends StatelessWidget {
final BuildContext context;
final dynamic model;
String labelTab1;
String labelTab2;
final TabController controller;
Widget widget1;
Widget widget2;
TabViewUtil({
super.key,
required this.context,
required this.model,
required this.labelTab1,
required this.labelTab2,
required this.controller,
required this.widget1,
required this.widget2,
});
@override
Widget build(BuildContext context) {
return SafeArea(
top: true,
child: Column(
children: [
Align(
alignment: const Alignment(0.0, 0),
child: TabBar(
labelColor: FlutterFlowTheme.of(context).primaryText,
unselectedLabelColor: FlutterFlowTheme.of(context).primaryText,
labelStyle: FlutterFlowTheme.of(context).titleMedium.override(
fontFamily: FlutterFlowTheme.of(context).titleMediumFamily,
fontSize: 13.0,
letterSpacing: 0.0,
useGoogleFonts: GoogleFonts.asMap().containsKey(
FlutterFlowTheme.of(context).titleMediumFamily),
),
unselectedLabelStyle: const TextStyle(),
indicatorColor: FlutterFlowTheme.of(context).primary,
padding: const EdgeInsets.all(4.0),
tabs: [
Tab(
text: labelTab1,
),
Tab(
text: labelTab2,
),
],
controller: controller,
onTap: (i) async {
[() async {}, () async {}][i]();
},
),
),
Expanded(
child: TabBarView(
controller: controller,
children: [
widget1,
widget2,
],
),
),
// Adicione o conteúdo do TabBarView aqui
],
),
);
}
}

View File

@ -356,4 +356,17 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
}, },
); );
} }
Future petsAction(BuildContext context) async {
context.push(
'/petsPage',
extra: <String, dynamic>{
kTransitionInfoKey: const TransitionInfo(
hasTransition: true,
transitionType: PageTransitionType.scale,
alignment: Alignment.bottomCenter,
),
},
);
}
} }

View File

@ -89,6 +89,17 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
ptText: 'QRCode\nde Acesso', ptText: 'QRCode\nde Acesso',
), ),
), ),
MenuButtonWidget(
icon: Icons.pets,
action: () async {
await _model.petsAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Pets\nRegister',
ptText: 'Cadastro\nde Pet',
),
),
MenuButtonWidget( MenuButtonWidget(
icon: Icons.people, icon: Icons.people,
action: () async { action: () async {
@ -213,6 +224,17 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
ptText: 'QRCode\nde Acesso', ptText: 'QRCode\nde Acesso',
), ),
), ),
MenuButtonWidget(
icon: Icons.pets,
action: () async {
await _model.petsAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Pets\nRegister',
ptText: 'Cadastro\nde Pet',
),
),
MenuButtonWidget( MenuButtonWidget(
icon: Icons.transfer_within_a_station_outlined, icon: Icons.transfer_within_a_station_outlined,
action: () async { action: () async {
@ -338,6 +360,17 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
ptText: 'Encomendas', ptText: 'Encomendas',
), ),
), ),
MenuButtonWidget(
icon: Icons.pets,
action: () async {
await _model.petsAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Pets\nRegister',
ptText: 'Cadastro\nde Pet',
),
),
MenuCardItem( MenuCardItem(
icon: Icons.event_available, icon: Icons.event_available,
action: () async { action: () async {
@ -452,6 +485,17 @@ class _MenuComponentWidgetState extends State<MenuComponentWidget> {
ptText: 'QRCode de Acesso', ptText: 'QRCode de Acesso',
), ),
), ),
MenuCardItem(
icon: Icons.pets,
action: () async {
await _model.petsAction(context);
setState(() {});
},
title: FFLocalizations.of(context).getVariableText(
enText: 'Pets Register',
ptText: 'Cadastro de Pet',
),
),
MenuCardItem( MenuCardItem(
icon: Icons.transfer_within_a_station_outlined, icon: Icons.transfer_within_a_station_outlined,
action: () async { action: () async {

View File

@ -6,6 +6,7 @@ import 'package:hub/pages/delivery_schedule_page/delivery_schedule_widget.dart';
import 'package:hub/pages/fast_pass_page/fast_pass_page_widget.dart'; import 'package:hub/pages/fast_pass_page/fast_pass_page_widget.dart';
import 'package:hub/pages/message_history_page/message_history_page_widget.dart'; import 'package:hub/pages/message_history_page/message_history_page_widget.dart';
import 'package:hub/pages/package_order_page/package_order_page.dart'; import 'package:hub/pages/package_order_page/package_order_page.dart';
import 'package:hub/pages/pets_page/pets_page_widget.dart';
import 'package:hub/pages/provisional_schedule_page/provisional_schedule_widget.dart'; import 'package:hub/pages/provisional_schedule_page/provisional_schedule_widget.dart';
import 'package:hub/pages/reception_page/reception_page_widget.dart'; import 'package:hub/pages/reception_page/reception_page_widget.dart';
import 'package:hub/pages/reservation_page/reservation_page_widget.dart'; import 'package:hub/pages/reservation_page/reservation_page_widget.dart';
@ -197,6 +198,11 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter(
path: '/reservation', path: '/reservation',
builder: (context, params) => ReservationPageWidget(), builder: (context, params) => ReservationPageWidget(),
), ),
FFRoute(
name: 'petsPage',
path: '/petsPage',
builder: (context, params) => PetsPageWidget(),
),
// FFRoute( // FFRoute(
// name: 'settingsPage', // name: 'settingsPage',
// path: '/settingsPage', // path: '/settingsPage',

View File

@ -0,0 +1,22 @@
import 'package:flutter/material.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/pages/pets_page/pets_page_widget.dart';
class PetsPageModel extends FlutterFlowModel<PetsPageWidget> {
late final TabController tabBarController;
int get tabBarCurrentIndex =>
tabBarController != null ? tabBarController!.index : 0;
@override
void dispose() {
tabBarController?.dispose();
}
@override
void initState(BuildContext context) {
tabBarController = TabController(
vsync: Navigator.of(context),
length: 2,
);
}
}

View File

@ -0,0 +1,92 @@
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hub/components/atomic_components/shared_components_atoms/tabview.dart';
import 'package:hub/flutter_flow/flutter_flow_icon_button.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/flutter_flow_util.dart';
import 'package:hub/flutter_flow/internationalization.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/pages/pets_page/pets_page_model.dart';
class PetsPageWidget extends StatefulWidget {
PetsPageWidget({super.key});
@override
State<PetsPageWidget> createState() => _PetsPageWidgetState();
}
class _PetsPageWidgetState extends State<PetsPageWidget>
with SingleTickerProviderStateMixin {
late PetsPageModel _model;
@override
void initState() {
super.initState();
_model = PetsPageModel();
_model.tabBarController = TabController(length: 2, vsync: this);
}
@override
void dispose() {
_model.tabBarController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: appBarPetsPage(context),
body: petsPageBody(context, _model, _model.tabBarController));
}
}
PreferredSizeWidget appBarPetsPage(BuildContext context) {
return AppBar(
backgroundColor: FlutterFlowTheme.of(context).primaryBackground,
automaticallyImplyLeading: false,
forceMaterialTransparency: true,
elevation: 0.0,
leading: FlutterFlowIconButton(
borderColor: Colors.transparent,
borderRadius: 30.0,
borderWidth: 1.0,
buttonSize: 60.0,
icon: Icon(
Icons.keyboard_arrow_left,
color: FlutterFlowTheme.of(context).primaryText,
size: 30.0,
),
onPressed: () async {
context.pop();
},
),
title: Text(
FFLocalizations.of(context)
.getVariableText(ptText: 'Pets', enText: 'Pets'),
style: FlutterFlowTheme.of(context).headlineMedium.override(
fontFamily: 'Nunito',
color: FlutterFlowTheme.of(context).primaryText,
fontSize: 15.0,
letterSpacing: 0.0,
fontWeight: FontWeight.bold,
useGoogleFonts: GoogleFonts.asMap().containsKey('Nunito'),
),
),
actions: const [],
centerTitle: true,
);
}
Widget petsPageBody(BuildContext context, PetsPageModel _model, controller) {
return TabViewUtil(
context: context,
model: _model,
labelTab1: 'Cadastrar',
labelTab2: 'Consultar',
controller: controller,
widget1: Center(child: Text('Cadastrar')),
widget2: Center(child: Text('Consultar')),
);
}

View File

@ -825,18 +825,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker name: leak_tracker
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.5" version: "10.0.4"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.5" version: "3.0.3"
leak_tracker_testing: leak_tracker_testing:
dependency: transitive dependency: transitive
description: description:
@ -913,10 +913,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.11.1" version: "0.8.0"
material_symbols_icons: material_symbols_icons:
dependency: "direct main" dependency: "direct main"
description: description:
@ -937,10 +937,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.15.0" version: "1.12.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@ -1358,10 +1358,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.2" version: "0.7.0"
timeago: timeago:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1526,10 +1526,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.2.5" version: "14.2.1"
web: web:
dependency: transitive dependency: transitive
description: description: