diff --git a/lib/components/atomic_components/shared_components_atoms/tabview.dart b/lib/components/atomic_components/shared_components_atoms/tabview.dart new file mode 100644 index 00000000..75ece61a --- /dev/null +++ b/lib/components/atomic_components/shared_components_atoms/tabview.dart @@ -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 + ], + ), + ); + } +} diff --git a/lib/components/organism_components/menu_component/menu_component_model.dart b/lib/components/organism_components/menu_component/menu_component_model.dart index 4d6abf72..2d50a70f 100644 --- a/lib/components/organism_components/menu_component/menu_component_model.dart +++ b/lib/components/organism_components/menu_component/menu_component_model.dart @@ -356,4 +356,17 @@ class MenuComponentModel extends FlutterFlowModel { }, ); } + + Future petsAction(BuildContext context) async { + context.push( + '/petsPage', + extra: { + kTransitionInfoKey: const TransitionInfo( + hasTransition: true, + transitionType: PageTransitionType.scale, + alignment: Alignment.bottomCenter, + ), + }, + ); + } } diff --git a/lib/components/organism_components/menu_component/menu_component_widget.dart b/lib/components/organism_components/menu_component/menu_component_widget.dart index 35a6e9d7..faaf0bfd 100644 --- a/lib/components/organism_components/menu_component/menu_component_widget.dart +++ b/lib/components/organism_components/menu_component/menu_component_widget.dart @@ -89,6 +89,17 @@ class _MenuComponentWidgetState extends State { 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( icon: Icons.people, action: () async { @@ -213,6 +224,17 @@ class _MenuComponentWidgetState extends State { 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( icon: Icons.transfer_within_a_station_outlined, action: () async { @@ -338,6 +360,17 @@ class _MenuComponentWidgetState extends State { 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( icon: Icons.event_available, action: () async { @@ -452,6 +485,17 @@ class _MenuComponentWidgetState extends State { 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( icon: Icons.transfer_within_a_station_outlined, action: () async { diff --git a/lib/flutter_flow/nav/nav.dart b/lib/flutter_flow/nav/nav.dart index 967e1c4c..e5c7cc70 100644 --- a/lib/flutter_flow/nav/nav.dart +++ b/lib/flutter_flow/nav/nav.dart @@ -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/message_history_page/message_history_page_widget.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/reception_page/reception_page_widget.dart'; import 'package:hub/pages/reservation_page/reservation_page_widget.dart'; @@ -197,6 +198,11 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter( path: '/reservation', builder: (context, params) => ReservationPageWidget(), ), + FFRoute( + name: 'petsPage', + path: '/petsPage', + builder: (context, params) => PetsPageWidget(), + ), // FFRoute( // name: 'settingsPage', // path: '/settingsPage', diff --git a/lib/pages/pets_page/pets_page_model.dart b/lib/pages/pets_page/pets_page_model.dart new file mode 100644 index 00000000..499724fa --- /dev/null +++ b/lib/pages/pets_page/pets_page_model.dart @@ -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 { + 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, + ); + } +} diff --git a/lib/pages/pets_page/pets_page_widget.dart b/lib/pages/pets_page/pets_page_widget.dart new file mode 100644 index 00000000..43c6d9c2 --- /dev/null +++ b/lib/pages/pets_page/pets_page_widget.dart @@ -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 createState() => _PetsPageWidgetState(); +} + +class _PetsPageWidgetState extends State + 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')), + ); +} diff --git a/pubspec.lock b/pubspec.lock index 7ed3b0b7..0f63eadd 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -825,18 +825,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" url: "https://pub.dev" source: hosted - version: "10.0.5" + version: "10.0.4" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.3" leak_tracker_testing: dependency: transitive description: @@ -913,10 +913,10 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.11.1" + version: "0.8.0" material_symbols_icons: dependency: "direct main" description: @@ -937,10 +937,10 @@ packages: dependency: transitive description: name: meta - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.12.0" mime: dependency: transitive description: @@ -1358,10 +1358,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.7.0" timeago: dependency: "direct main" description: @@ -1526,10 +1526,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "14.2.5" + version: "14.2.1" web: dependency: transitive description: