Adição: Criado um TabViewUtil, criada a pagina de pets e adicionado o Tab e o Appbar
This commit is contained in:
parent
ae0fe2f75f
commit
90ae49df06
|
@ -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
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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,
|
||||||
|
),
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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',
|
||||||
|
|
|
@ -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,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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')),
|
||||||
|
);
|
||||||
|
}
|
24
pubspec.lock
24
pubspec.lock
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue