From 54fcab5c16d70d04e0ce04ad2d5f06bcb41ceddc Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Fri, 29 Nov 2024 11:23:55 -0300 Subject: [PATCH] WIP --- analysis_options.yaml | 1 + lib/backend/schema/enums/enums.dart | 12 - .../menu_item/menu_item.dart | 36 - .../menu_component/menu_component_widget.dart | 81 -- .../menu_list_view_component_model.dart | 11 - .../menu_staggered_view_component_model.dart | 13 - .../menu_staggered_view_component_widget.dart | 193 ----- .../sign_in_template_component_widget.dart | 90 +-- .../sign_up_template_component_widget.dart | 46 +- lib/core/meta/anotations.dart | 7 + .../home/data/data_sources}/index.dart | 0 lib/features/home/data/index.dart | 3 + lib/features/home/data/models/index.dart | 0 .../home/data/repositories/index.dart | 0 lib/features/home/domain/entities/index.dart | 0 lib/features/home/domain/index.dart | 3 + .../home/domain/respositories/index.dart | 0 lib/features/home/domain/usecases/index.dart | 0 lib/features/home/index.dart | 3 + .../home/presentation/blocs}/home_bloc.dart | 0 .../home/presentation/blocs}/home_events.dart | 0 .../home/presentation/blocs}/home_state.dart | 0 .../home/presentation/blocs}/index.dart | 0 lib/features/home/presentation/index.dart | 3 + .../home/presentation/pages}/home_page.dart | 21 +- .../home/presentation/pages/index.dart | 1 + .../home/presentation/widgets/index.dart | 0 .../property/data/data_sources/index.dart | 0 lib/features/property/data/index.dart | 3 + lib/features/property/data/models/index.dart | 0 .../property/data/repositories/index.dart | 0 .../property/domain/entities/index.dart | 0 lib/features/property/domain/index.dart | 3 + .../property/domain/respositories/index.dart | 0 .../property/domain/usecases/index.dart | 0 lib/features/property/index.dart | 3 + .../property/presentation/blocs/index.dart | 0 lib/features/property/presentation/index.dart | 3 + .../pages}/about_property_screen.dart | 51 +- .../property/presentation/pages/index.dart | 1 + .../property/presentation/widgets/index.dart | 0 lib/flutter_flow/nav/nav.dart | 9 +- lib/index.dart | 12 +- lib/initialization.dart | 1 - lib/main.dart | 4 +- .../about_property_model.dart | 23 - .../preferences_settings_model.dart | 4 +- .../reception_page/reception_page_widget.dart | 26 +- .../atoms/image_cropper}/image_cropper.dart | 0 .../{ => term_of_use}/atom_terms_of_use.dart | 5 +- .../molecules/drawer}/drawer_widget.dart | 24 +- .../components/molecules/drawer/index.dart | 1 + .../locals/data/data_sources/index.dart | 2 + .../locals_local_data_source.dart | 3 + .../locals_remote_data_source.dart} | 61 +- .../molecules/locals/data/index.dart | 3 + .../molecules/locals/data/models/index.dart | 0 .../locals/data/repositories/index.dart | 1 + .../repositories/locals_repository_impl.dart | 32 + .../locals/domain/entities/index.dart | 0 .../molecules/locals/domain/index.dart | 3 + .../locals/domain/respositories/index.dart | 1 + .../respositories/locals_repository.dart | 10 + .../locals/domain/usecases/index.dart | 0 .../components/molecules/locals/index.dart | 3 + .../locals/presentation/blocs/index.dart | 1 + .../blocs}/local_profile_bloc.dart | 2 +- .../molecules/locals/presentation/index.dart | 2 + .../locals/presentation/widgets/index.dart | 1 + .../widgets/local_profile_widget.dart} | 15 +- .../menu/data/data_sources/index.dart | 0 .../components/molecules/menu/data/index.dart | 3 + .../menu/data/models/base_entry.dart | 5 + .../molecules/menu/data/models/index.dart | 1 + .../menu/data/repositories/index.dart | 0 .../molecules/menu/domain/entities/index.dart | 0 .../menu/domain/entities/menu_entry.dart | 18 + .../molecules/menu/domain/index.dart | 3 + .../menu/domain/respositories/index.dart | 0 .../molecules/menu/domain/usecases/index.dart | 0 .../components/molecules/menu/index.dart | 3 + .../menu/presentation/blocs/index.dart | 1 + .../menu/presentation/blocs/menu_bloc.dart | 9 + .../presentation/blocs/menu_item_bloc.dart | 9 + .../presentation/blocs/menu_view_bloc.dart} | 41 +- .../molecules/menu/presentation/index.dart | 2 + .../menu/presentation/widgets/index.dart | 4 + .../widgets/menu_entry/drawer_menu_entry.dart | 223 ++++++ .../widgets/menu_entry/home_menu_entry.dart | 213 ++++++ .../widgets/menu_entry/index.dart | 4 + .../menu_entry/menu_entry_factory.dart | 38 + .../menu_entry/property_menu_entry.dart | 67 ++ .../widgets/menu_factory/index.dart | 1 + .../widgets/menu_factory/menu_factory.dart | 25 + .../presentation/widgets/menu_item/index.dart | 4 + .../widgets/menu_item/menu_item.dart | 42 ++ .../widgets/menu_item/menu_item_button.dart} | 14 +- .../widgets/menu_item/menu_item_card.dart} | 11 +- .../widgets/menu_item/menu_item_factory.dart | 24 + .../presentation/widgets/menu_view/index.dart | 3 + .../widgets/menu_view/menu_list_view.dart} | 113 +-- .../menu_view/menu_staggered_view.dart | 206 ++++++ .../widgets/menu_view/menu_view_factory.dart | 87 +++ .../license_local_data_source.dart | 1 + .../license_remote_data_source.dart | 35 +- .../repositories/license_repository_impl.dart | 6 +- .../entities}/active_modules.dart | 9 - .../modules/domain/entities/base_module.dart | 10 + .../entities}/disabled_modules.dart | 0 .../entities}/inactive_modules.dart | 11 +- .../modules/domain/entities/index.dart | 5 + .../modules/domain/entities/modules.dart | 271 +++++++ .../molecules/modules/enums/enum_modules.dart | 549 -------------- .../molecules/modules/enums/index.dart | 4 - .../components/molecules/modules/index.dart | 1 - .../molecules/modules/presentation/index.dart | 1 - lib/shared/enums/enum_menu.dart | 699 ++++++++++++++++++ .../helpers/database/database_helper.dart | 35 +- .../helpers/license/license_helper.dart | 443 ----------- .../helpers/storage/keychain_storage.dart | 3 +- .../services/deeplink/deep_link_service.dart | 4 +- .../services/keychain/keychain_service.dart | 5 - .../services/license/license_service.dart | 103 --- lib/shared/widgets/menu.dart | 56 -- pubspec.lock | 279 ++++++- pubspec.yaml | 5 + 126 files changed, 2668 insertions(+), 1878 deletions(-) delete mode 100644 lib/components/molecular_components/menu_item/menu_item.dart delete mode 100644 lib/components/organism_components/menu_component/menu_component_widget.dart delete mode 100644 lib/components/organism_components/menu_list_view_component/menu_list_view_component_model.dart delete mode 100644 lib/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_model.dart delete mode 100644 lib/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart create mode 100644 lib/core/meta/anotations.dart rename lib/{shared/components/molecules/modules/presentation/pages => features/home/data/data_sources}/index.dart (100%) create mode 100644 lib/features/home/data/index.dart create mode 100644 lib/features/home/data/models/index.dart create mode 100644 lib/features/home/data/repositories/index.dart create mode 100644 lib/features/home/domain/entities/index.dart create mode 100644 lib/features/home/domain/index.dart create mode 100644 lib/features/home/domain/respositories/index.dart create mode 100644 lib/features/home/domain/usecases/index.dart create mode 100644 lib/features/home/index.dart rename lib/{pages/home_page => features/home/presentation/blocs}/home_bloc.dart (100%) rename lib/{pages/home_page => features/home/presentation/blocs}/home_events.dart (100%) rename lib/{pages/home_page => features/home/presentation/blocs}/home_state.dart (100%) rename lib/{pages/home_page => features/home/presentation/blocs}/index.dart (100%) create mode 100644 lib/features/home/presentation/index.dart rename lib/{pages/home_page => features/home/presentation/pages}/home_page.dart (85%) create mode 100644 lib/features/home/presentation/pages/index.dart create mode 100644 lib/features/home/presentation/widgets/index.dart create mode 100644 lib/features/property/data/data_sources/index.dart create mode 100644 lib/features/property/data/index.dart create mode 100644 lib/features/property/data/models/index.dart create mode 100644 lib/features/property/data/repositories/index.dart create mode 100644 lib/features/property/domain/entities/index.dart create mode 100644 lib/features/property/domain/index.dart create mode 100644 lib/features/property/domain/respositories/index.dart create mode 100644 lib/features/property/domain/usecases/index.dart create mode 100644 lib/features/property/index.dart create mode 100644 lib/features/property/presentation/blocs/index.dart create mode 100644 lib/features/property/presentation/index.dart rename lib/{pages/about_property_page => features/property/presentation/pages}/about_property_screen.dart (63%) create mode 100644 lib/features/property/presentation/pages/index.dart create mode 100644 lib/features/property/presentation/widgets/index.dart delete mode 100644 lib/pages/about_property_page/about_property_model.dart rename lib/shared/{widgets/image_cropper_widget => components/atoms/image_cropper}/image_cropper.dart (100%) rename lib/shared/components/atoms/{ => term_of_use}/atom_terms_of_use.dart (88%) rename lib/shared/{widgets/drawer_widget => components/molecules/drawer}/drawer_widget.dart (89%) create mode 100644 lib/shared/components/molecules/drawer/index.dart create mode 100644 lib/shared/components/molecules/locals/data/data_sources/index.dart create mode 100644 lib/shared/components/molecules/locals/data/data_sources/locals_local_data_source.dart rename lib/shared/{services/localization/localization_service.dart => components/molecules/locals/data/data_sources/locals_remote_data_source.dart} (88%) create mode 100644 lib/shared/components/molecules/locals/data/index.dart create mode 100644 lib/shared/components/molecules/locals/data/models/index.dart create mode 100644 lib/shared/components/molecules/locals/data/repositories/index.dart create mode 100644 lib/shared/components/molecules/locals/data/repositories/locals_repository_impl.dart create mode 100644 lib/shared/components/molecules/locals/domain/entities/index.dart create mode 100644 lib/shared/components/molecules/locals/domain/index.dart create mode 100644 lib/shared/components/molecules/locals/domain/respositories/index.dart create mode 100644 lib/shared/components/molecules/locals/domain/respositories/locals_repository.dart create mode 100644 lib/shared/components/molecules/locals/domain/usecases/index.dart create mode 100644 lib/shared/components/molecules/locals/index.dart create mode 100644 lib/shared/components/molecules/locals/presentation/blocs/index.dart rename lib/{components/organism_components/local_profile_component => shared/components/molecules/locals/presentation/blocs}/local_profile_bloc.dart (93%) create mode 100644 lib/shared/components/molecules/locals/presentation/index.dart create mode 100644 lib/shared/components/molecules/locals/presentation/widgets/index.dart rename lib/{components/organism_components/local_profile_component/local_profile_component_widget.dart => shared/components/molecules/locals/presentation/widgets/local_profile_widget.dart} (87%) create mode 100644 lib/shared/components/molecules/menu/data/data_sources/index.dart create mode 100644 lib/shared/components/molecules/menu/data/index.dart create mode 100644 lib/shared/components/molecules/menu/data/models/base_entry.dart create mode 100644 lib/shared/components/molecules/menu/data/models/index.dart create mode 100644 lib/shared/components/molecules/menu/data/repositories/index.dart create mode 100644 lib/shared/components/molecules/menu/domain/entities/index.dart create mode 100644 lib/shared/components/molecules/menu/domain/entities/menu_entry.dart create mode 100644 lib/shared/components/molecules/menu/domain/index.dart create mode 100644 lib/shared/components/molecules/menu/domain/respositories/index.dart create mode 100644 lib/shared/components/molecules/menu/domain/usecases/index.dart create mode 100644 lib/shared/components/molecules/menu/index.dart create mode 100644 lib/shared/components/molecules/menu/presentation/blocs/index.dart create mode 100644 lib/shared/components/molecules/menu/presentation/blocs/menu_bloc.dart create mode 100644 lib/shared/components/molecules/menu/presentation/blocs/menu_item_bloc.dart rename lib/{components/organism_components/menu_component/menu_component_bloc.dart => shared/components/molecules/menu/presentation/blocs/menu_view_bloc.dart} (73%) create mode 100644 lib/shared/components/molecules/menu/presentation/index.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/index.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_entry/drawer_menu_entry.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_entry/home_menu_entry.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_entry/index.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_entry/menu_entry_factory.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_entry/property_menu_entry.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_factory/index.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_factory/menu_factory.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_item/index.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item.dart rename lib/{components/atomic_components/menu_button_item/menu_button_item_widget.dart => shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_button.dart} (91%) rename lib/{components/atomic_components/menu_card_item/menu_card_item.dart => shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_card.dart} (89%) create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_factory.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_view/index.dart rename lib/{components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart => shared/components/molecules/menu/presentation/widgets/menu_view/menu_list_view.dart} (56%) create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_view/menu_staggered_view.dart create mode 100644 lib/shared/components/molecules/menu/presentation/widgets/menu_view/menu_view_factory.dart rename lib/shared/components/molecules/modules/{enums => domain/entities}/active_modules.dart (84%) create mode 100644 lib/shared/components/molecules/modules/domain/entities/base_module.dart rename lib/shared/components/molecules/modules/{enums => domain/entities}/disabled_modules.dart (100%) rename lib/shared/components/molecules/modules/{enums => domain/entities}/inactive_modules.dart (77%) create mode 100644 lib/shared/components/molecules/modules/domain/entities/modules.dart delete mode 100644 lib/shared/components/molecules/modules/enums/enum_modules.dart delete mode 100644 lib/shared/components/molecules/modules/enums/index.dart create mode 100644 lib/shared/enums/enum_menu.dart delete mode 100644 lib/shared/helpers/license/license_helper.dart delete mode 100644 lib/shared/services/keychain/keychain_service.dart delete mode 100644 lib/shared/services/license/license_service.dart delete mode 100644 lib/shared/widgets/menu.dart diff --git a/analysis_options.yaml b/analysis_options.yaml index 4934b3e6..53fc4048 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -32,6 +32,7 @@ analyzer: errors: curly_braces_in_flow_control_structures: ignore use_build_context_synchronously: ignore + invalid_annotation_target: ignore exclude: - lib/custom_code/** - lib/flutter_flow/custom_functions.dart diff --git a/lib/backend/schema/enums/enums.dart b/lib/backend/schema/enums/enums.dart index 3013905b..8f7ed174 100644 --- a/lib/backend/schema/enums/enums.dart +++ b/lib/backend/schema/enums/enums.dart @@ -5,18 +5,6 @@ enum AppHeaderComponent { home, } -enum MenuView { - list_grid, - list, - grid, -} - -enum MenuItem { - button, - card, - tile, -} - extension FFEnumExtensions on T { String serialize() => name; } diff --git a/lib/components/molecular_components/menu_item/menu_item.dart b/lib/components/molecular_components/menu_item/menu_item.dart deleted file mode 100644 index 77734bc1..00000000 --- a/lib/components/molecular_components/menu_item/menu_item.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - -enum MenuOption { - CompleteSchedule, - DeliverySchedule, - WorkersOnTheProperty, - FastPassSchedule, - QRCodeAccessInProperty, - AccessOnTheProperty, - LiberationsOnTheProperty, - MessagesOnTheProperty, - ReservationsOnTheLocal, - PackagesOnTheProperty, - VehiclesOnTheProperty, - PetsOnTheProperty, - PetsRegister, - VisitorsRegister, - VisitsOnTheProperty, - ResidentsOnTheProperty, - SettingsOnTheApp, - AboutProperty, - LogoutOnTheApp, -} - -abstract class MenuEntry extends StatefulWidget { - const MenuEntry({ - super.key, - required this.action, - required this.title, - required this.icon, - }); - - final Function() action; - final String title; - final IconData icon; -} diff --git a/lib/components/organism_components/menu_component/menu_component_widget.dart b/lib/components/organism_components/menu_component/menu_component_widget.dart deleted file mode 100644 index 6277c62a..00000000 --- a/lib/components/organism_components/menu_component/menu_component_widget.dart +++ /dev/null @@ -1,81 +0,0 @@ -import 'package:hub/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart'; -import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:hub/backend/schema/enums/enums.dart'; -import 'package:hub/components/organism_components/menu_component/menu_component_bloc.dart'; -import 'package:hub/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart'; -import 'package:hub/flutter_flow/flutter_flow_theme.dart'; -import 'package:hub/shared/helpers/license/license_helper.dart'; -import 'package:hub/shared/services/license/license_service.dart'; - -class MenuComponentWidget extends StatelessWidget { - final MenuView style; - final MenuItem item; - final bool expandable; - final List menuOptions; - - const MenuComponentWidget({ - super.key, - required this.style, - required this.item, - required this.expandable, - required this.menuOptions, - }); - - @override - Widget build(BuildContext context) { - return StreamBuilder>( - stream: LicenseService().licenseStream, - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.waiting) { - return const Center( - child: CircularProgressIndicator(), - ); - } else if (snapshot.hasError) { - return Center( - child: Text('Error: ${snapshot.error}'), - ); - } else if (!snapshot.hasData || snapshot.data!.isEmpty) { - return Center( - child: Padding( - padding: EdgeInsets.only(top: MediaQuery.of(context).size.height / 10), - child: CircularProgressIndicator( - backgroundColor: FlutterFlowTheme.of(key.currentContext!).primaryBackground, - color: FlutterFlowTheme.of(key.currentContext!).primary), - ), - ); - } - return BlocProvider( - create: (context) => MenuBloc( - style: style, - item: item, - expandable: expandable, - menuOptions: menuOptions, - )..add(MenuEvent()), - child: BlocBuilder( - builder: (context, state) { - if (style == MenuView.list_grid) { - return MenuStaggeredViewComponentWidget( - options: state.menuEntries, - expandable: expandable, - item: item, - changeMenuStyle: () async {}, - isGrid: state.isGrid, - ); - } else if (style == MenuView.list) { - return MenuListViewComponentWidget( - options: state.menuEntries, - expandable: expandable, - item: item, - changeMenuStyle: () async {}, - ); - } - return const SizedBox(); - }, - ), - ); - }, - ); - } -} diff --git a/lib/components/organism_components/menu_list_view_component/menu_list_view_component_model.dart b/lib/components/organism_components/menu_list_view_component/menu_list_view_component_model.dart deleted file mode 100644 index d15273ee..00000000 --- a/lib/components/organism_components/menu_list_view_component/menu_list_view_component_model.dart +++ /dev/null @@ -1,11 +0,0 @@ -import '/flutter_flow/flutter_flow_util.dart'; -import 'menu_list_view_component_widget.dart' show MenuListViewComponentWidget; -import 'package:flutter/material.dart'; - -class MenuListViewComponentModel extends FlutterFlowModel { - @override - void initState(BuildContext context) {} - - @override - void dispose() {} -} diff --git a/lib/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_model.dart b/lib/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_model.dart deleted file mode 100644 index cb0efe51..00000000 --- a/lib/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_model.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:hub/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart'; - -import '/flutter_flow/flutter_flow_util.dart'; - -import 'package:flutter/material.dart'; - -class MenuStaggeredViewComponentModel extends FlutterFlowModel { - @override - void initState(BuildContext context) {} - - @override - void dispose() {} -} diff --git a/lib/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart b/lib/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart deleted file mode 100644 index 64161e26..00000000 --- a/lib/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart +++ /dev/null @@ -1,193 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:hub/backend/schema/enums/enums.dart'; -import 'package:hub/components/molecular_components/menu_item/menu_item.dart'; -import 'package:hub/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_model.dart'; -import 'package:hub/flutter_flow/flutter_flow_icon_button.dart'; -import 'package:hub/flutter_flow/flutter_flow_theme.dart'; -import 'package:hub/flutter_flow/flutter_flow_util.dart'; - -class MenuStaggeredViewComponentWidget extends StatefulWidget { - const MenuStaggeredViewComponentWidget( - {super.key, - required this.changeMenuStyle, - required this.expandable, - required this.item, - required this.options, - required this.isGrid}); - - final bool expandable; - final MenuItem item; - final bool isGrid; - - final List options; - final Future Function()? changeMenuStyle; - - @override - State createState() => _MenuStaggeredViewComponentWidgetState(); -} - -class _MenuStaggeredViewComponentWidgetState extends State { - late MenuStaggeredViewComponentModel _model; - - @override - void setState(VoidCallback callback) { - super.setState(callback); - _model.onUpdate(); - } - - @override - void initState() { - super.initState(); - _model = createModel(context, () => MenuStaggeredViewComponentModel()); - } - - @override - void dispose() { - _model.maybeDispose(); - - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final textScaler = MediaQuery.textScalerOf(context); - final double scaledFontSize = 14 * textScaler.scale(1); - final int crossAxisCount = scaledFontSize >= 26 - ? 1 - : scaledFontSize >= 18 - ? 2 - : 3; - - return Column( - children: [ - GridView.builder( - physics: const NeverScrollableScrollPhysics(), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: crossAxisCount, - crossAxisSpacing: 10.0, - mainAxisSpacing: 10.0, - childAspectRatio: 1, - mainAxisExtent: 100, - ), - itemCount: widget.options.length, - padding: const EdgeInsets.symmetric(horizontal: 14), - shrinkWrap: true, - itemBuilder: (context, index) { - return Container( - height: MediaQuery.of(context).size.height, - width: MediaQuery.of(context).size.width, - alignment: Alignment.center, - padding: const EdgeInsets.all(0), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(0), - color: Colors.transparent, - boxShadow: const [ - BoxShadow( - color: Colors.transparent, - blurRadius: 4, - offset: Offset(0, 2), - ), - ], - ), - child: Center(child: widget.options[index]), - ); - }, - ), - ].addToStart(const SizedBox(height: 30)).addToEnd(const SizedBox(height: 30)), - ); - } - - Widget collapseExpandMethod(BuildContext context) { - if (widget.isGrid == true) { - return Align( - alignment: const AlignmentDirectional(0.0, 0.0), - child: Container( - decoration: const BoxDecoration( - borderRadius: BorderRadius.only( - bottomLeft: Radius.circular(0.0), - bottomRight: Radius.circular(0.0), - topLeft: Radius.circular(0.0), - topRight: Radius.circular(0.0), - ), - ), - alignment: const AlignmentDirectional(0.0, 0.0), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - mainAxisSize: MainAxisSize.max, - children: [ - Text( - FFLocalizations.of(context).getVariableText( - enText: 'Minimize', - ptText: 'Minimizar', - ), - style: FlutterFlowTheme.of(context).title1.override( - fontFamily: 'Nunito', - color: FlutterFlowTheme.of(context).primaryText, - fontSize: 12.0, - fontWeight: FontWeight.w600, - fontStyle: FontStyle.normal, - ), - ), - Align( - alignment: const AlignmentDirectional(0.0, 0.0), - child: FlutterFlowIconButton( - borderColor: Colors.transparent, - borderRadius: 20.0, - borderWidth: 1.0, - buttonSize: 50.0, - fillColor: const Color(0x00FFFFFF), - icon: Icon( - Icons.keyboard_arrow_up_sharp, - color: FlutterFlowTheme.of(context).primary, - ), - onPressed: () async { - await widget.changeMenuStyle?.call(); - }, - ), - ), - ], - ), - ), - ); - } else { - return Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - FFLocalizations.of(context).getVariableText( - enText: 'Expand', - ptText: 'Expandir', - ), - style: FlutterFlowTheme.of(context).title1.override( - fontFamily: 'Nunito', - color: FlutterFlowTheme.of(context).primaryText, - fontSize: 12.0, - fontWeight: FontWeight.w600, - fontStyle: FontStyle.normal, - ), - ), - Align( - alignment: const AlignmentDirectional(0.0, 0.0), - child: FlutterFlowIconButton( - borderColor: Colors.transparent, - borderRadius: 20.0, - borderWidth: 0.0, - buttonSize: 50.0, - fillColor: const Color(0x00FFFFFF), - icon: Icon( - Icons.keyboard_arrow_down_outlined, - color: FlutterFlowTheme.of(context).primary, - ), - onPressed: () async { - await widget.changeMenuStyle?.call(); - }, - ), - ), - ], - ); - } - } -} diff --git a/lib/components/templates_components/sign_in_template_component/sign_in_template_component_widget.dart b/lib/components/templates_components/sign_in_template_component/sign_in_template_component_widget.dart index e476c98a..d339f173 100644 --- a/lib/components/templates_components/sign_in_template_component/sign_in_template_component_widget.dart +++ b/lib/components/templates_components/sign_in_template_component/sign_in_template_component_widget.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_animate/flutter_animate.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/atom_image_svg_theme.dart'; -import 'package:hub/shared/components/atoms/atom_terms_of_use.dart'; +import 'package:hub/shared/components/atoms/term_of_use/atom_terms_of_use.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/limited_text_size.dart'; import 'package:hub/shared/utils/log_util.dart'; @@ -215,8 +215,7 @@ class _SignInTemplateComponentWidgetState extends State EasyDebounce.debounce('_model.passwordTextController', - const Duration(milliseconds: 500), () => setState(() {})), + onChanged: (_) => EasyDebounce.debounce('_model.passwordTextController', const Duration(milliseconds: 500), () => setState(() {})), autofocus: true, autofillHints: const [AutofillHints.password], textInputAction: TextInputAction.send, obscureText: !_model.passwordVisibility, decoration: InputDecoration( isDense: true, - labelText: - FFLocalizations.of(context).getText('2x19ce8k' /* Senha */), + labelText: FFLocalizations.of(context).getText('2x19ce8k' /* Senha */), labelStyle: FlutterFlowTheme.of(context).labelLarge.override( fontFamily: 'Plus Jakarta Sans', color: FlutterFlowTheme.of(context).primaryText, fontSize: limitedInputFontSize, letterSpacing: 0.0, fontWeight: FontWeight.w500, - useGoogleFonts: - GoogleFonts.asMap().containsKey('Plus Jakarta Sans')), + useGoogleFonts: GoogleFonts.asMap().containsKey('Plus Jakarta Sans')), enabledBorder: OutlineInputBorder( - borderSide: BorderSide( - color: FlutterFlowTheme.of(context).customColor1, width: 0.25), + borderSide: BorderSide(color: FlutterFlowTheme.of(context).customColor1, width: 0.25), borderRadius: BorderRadius.circular(12.0), ), errorStyle: TextStyle( @@ -310,9 +303,7 @@ class _SignInTemplateComponentWidgetState extends State setState( - () => _model.passwordVisibility = !_model.passwordVisibility), + onTap: () => setState(() => _model.passwordVisibility = !_model.passwordVisibility), focusNode: FocusNode(skipTraversal: true), - child: Icon( - _model.passwordVisibility - ? Icons.visibility_outlined - : Icons.visibility_off_outlined, - color: FlutterFlowTheme.of(context).accent1, - size: 24.0), + child: Icon(_model.passwordVisibility ? Icons.visibility_outlined : Icons.visibility_off_outlined, + color: FlutterFlowTheme.of(context).accent1, size: 24.0), ), ), style: FlutterFlowTheme.of(context).bodyLarge.override( @@ -341,8 +327,7 @@ class _SignInTemplateComponentWidgetState extends State('toggleSignUpPage'), onPressed: () async => await widget.toggleSignUpPage?.call(), - text: FFLocalizations.of(context) - .getText('jwvd4ai1' /* Cadastrar */), + text: FFLocalizations.of(context).getText('jwvd4ai1' /* Cadastrar */), options: FFButtonOptions( width: double.infinity, height: 44.0, - padding: - const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0), - iconPadding: - const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0), + padding: const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0), + iconPadding: const EdgeInsetsDirectional.fromSTEB(0.0, 0.0, 0.0, 0.0), color: FlutterFlowTheme.of(context).customColor1, textStyle: FlutterFlowTheme.of(context).titleSmall.override( fontFamily: 'Plus Jakarta Sans', @@ -513,8 +483,7 @@ class _SignInTemplateComponentWidgetState extends State('passwordVisibilitySuffixIcon'), onTap: () => setState( - () => _model.passwordRegisterFormVisibility = - !_model.passwordRegisterFormVisibility, + () => _model.passwordRegisterFormVisibility = !_model.passwordRegisterFormVisibility, ), focusNode: FocusNode(skipTraversal: true), child: Icon( - _model.passwordRegisterFormVisibility - ? Icons.visibility_outlined - : Icons.visibility_off_outlined, + _model.passwordRegisterFormVisibility ? Icons.visibility_outlined : Icons.visibility_off_outlined, color: FlutterFlowTheme.of(context).accent1, size: 24.0, ), @@ -477,11 +465,9 @@ class _SignUpTemplateComponentWidgetState extends State { color: FlutterFlowTheme.of(context).primaryBackground, child: Padding( padding: const EdgeInsets.only(bottom: 40), - child: MenuComponentWidget( - expandable: true, - style: MenuView.list_grid, - item: MenuItem.button, - menuOptions: Module.values.where((e) => e != Module.logout).toList(), + child: MenuFactory( + menuEntry: MenuEntries.home, + menuItem: MenuItem.button, + menuView: MenuView.list_grid, ), ), ); diff --git a/lib/features/home/presentation/pages/index.dart b/lib/features/home/presentation/pages/index.dart new file mode 100644 index 00000000..e4ff2696 --- /dev/null +++ b/lib/features/home/presentation/pages/index.dart @@ -0,0 +1 @@ +export 'home_page.dart'; diff --git a/lib/features/home/presentation/widgets/index.dart b/lib/features/home/presentation/widgets/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/features/property/data/data_sources/index.dart b/lib/features/property/data/data_sources/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/features/property/data/index.dart b/lib/features/property/data/index.dart new file mode 100644 index 00000000..186dfac9 --- /dev/null +++ b/lib/features/property/data/index.dart @@ -0,0 +1,3 @@ +export 'data_sources/index.dart'; +export 'repositories/index.dart'; +export 'models/index.dart'; diff --git a/lib/features/property/data/models/index.dart b/lib/features/property/data/models/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/features/property/data/repositories/index.dart b/lib/features/property/data/repositories/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/features/property/domain/entities/index.dart b/lib/features/property/domain/entities/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/features/property/domain/index.dart b/lib/features/property/domain/index.dart new file mode 100644 index 00000000..00b76d59 --- /dev/null +++ b/lib/features/property/domain/index.dart @@ -0,0 +1,3 @@ +export 'entities/index.dart'; +export 'respositories/index.dart'; +export 'usecases/index.dart'; diff --git a/lib/features/property/domain/respositories/index.dart b/lib/features/property/domain/respositories/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/features/property/domain/usecases/index.dart b/lib/features/property/domain/usecases/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/features/property/index.dart b/lib/features/property/index.dart new file mode 100644 index 00000000..aa560630 --- /dev/null +++ b/lib/features/property/index.dart @@ -0,0 +1,3 @@ +export 'data/index.dart'; +export 'domain/index.dart'; +export 'presentation/index.dart'; diff --git a/lib/features/property/presentation/blocs/index.dart b/lib/features/property/presentation/blocs/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/features/property/presentation/index.dart b/lib/features/property/presentation/index.dart new file mode 100644 index 00000000..48b6447a --- /dev/null +++ b/lib/features/property/presentation/index.dart @@ -0,0 +1,3 @@ +export 'blocs/index.dart'; +export 'pages/index.dart'; +export 'widgets/index.dart'; diff --git a/lib/pages/about_property_page/about_property_screen.dart b/lib/features/property/presentation/pages/about_property_screen.dart similarity index 63% rename from lib/pages/about_property_page/about_property_screen.dart rename to lib/features/property/presentation/pages/about_property_screen.dart index a03227e1..5b06f018 100644 --- a/lib/pages/about_property_page/about_property_screen.dart +++ b/lib/features/property/presentation/pages/about_property_screen.dart @@ -2,36 +2,29 @@ import 'package:flutter/material.dart'; import 'package:hub/backend/schema/enums/enums.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/appbar.dart'; -import 'package:hub/components/organism_components/menu_component/menu_component_widget.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/nav/nav.dart'; -import 'package:hub/pages/about_property_page/about_property_model.dart'; -import 'package:hub/shared/helpers/license/license_helper.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; +import 'package:hub/shared/components/molecules/modules/index.dart'; -enum AboutPropertyModules { - residents, - vehicles, - openedVisits, - petsHistory, -} +class AboutPropertyModel extends FlutterFlowModel { + dynamic item; -extension AboutPropertyModulesExtension on AboutPropertyModules { - String get value { - switch (this) { - case AboutPropertyModules.openedVisits: - return 'FRE-HUB-OPENED-VISITS'; - case AboutPropertyModules.vehicles: - return 'FRE-HUB-VEHICLES'; - case AboutPropertyModules.residents: - return 'FRE-HUB-RESIDENTS'; - case AboutPropertyModules.petsHistory: - return 'FRE-HUB-PETS'; - default: - return ''; - } + VoidCallback? safeSetState; + + Future initAsync() async { + safeSetState?.call(); } + + @override + void initState(BuildContext context) { + initAsync(); + } + + @override + void dispose() {} } // ignore: must_be_immutable @@ -84,13 +77,11 @@ class _AboutPropertyPageState extends State with SingleTicker return SingleChildScrollView( child: Container( color: FlutterFlowTheme.of(context).primaryBackground, - child: MenuComponentWidget(expandable: true, style: MenuView.list_grid, item: MenuItem.button, menuOptions: [ - Module.petsHistory, - Module.residents, - Module.openedVisits, - Module.vehicles, - Module.orders, - ]), + child: MenuFactory( + menuEntry: MenuEntries.AboutProperty, + menuItem: MenuItem.button, + menuView: MenuView.list_grid, + ), ), ); } diff --git a/lib/features/property/presentation/pages/index.dart b/lib/features/property/presentation/pages/index.dart new file mode 100644 index 00000000..f997df03 --- /dev/null +++ b/lib/features/property/presentation/pages/index.dart @@ -0,0 +1 @@ +export 'about_property_screen.dart'; diff --git a/lib/features/property/presentation/widgets/index.dart b/lib/features/property/presentation/widgets/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/flutter_flow/nav/nav.dart b/lib/flutter_flow/nav/nav.dart index 112dfc6c..1efd1362 100644 --- a/lib/flutter_flow/nav/nav.dart +++ b/lib/flutter_flow/nav/nav.dart @@ -4,14 +4,14 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:hub/backend/schema/util/schema_util.dart'; +import 'package:hub/features/home/index.dart'; +import 'package:hub/features/property/index.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/pages/about_property_page/about_property_screen.dart'; import 'package:hub/pages/acess_history_page/acess_history_page_widget.dart'; 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/forgot_password_page/forgot_password_screen.dart'; -import 'package:hub/pages/home_page/home_page.dart'; import 'package:hub/pages/liberation_history/liberation_history_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'; @@ -41,7 +41,7 @@ export 'serialization_util.dart'; const kTransitionInfoKey = '__transition_info__'; -final GlobalKey key = GlobalKey(); +final GlobalKey navigatorKey = GlobalKey(); class AppStateNotifier extends ChangeNotifier { AppStateNotifier._(); @@ -59,7 +59,7 @@ class AppStateNotifier extends ChangeNotifier { GoRouter createRouter(AppStateNotifier appStateNotifier) { return GoRouter( - navigatorKey: key, + navigatorKey: navigatorKey, initialLocation: '/', debugLogDiagnostics: true, redirect: (context, state) { @@ -135,6 +135,7 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) { FFRoute(name: 'preferencesSettings', path: '/preferencesSettings', builder: (context, params) => PreferencesPageWidget()), FFRoute(name: 'aboutProperty', path: '/aboutProperty', builder: (context, params) => AboutPropertyPage()), FFRoute(name: 'residentsOnThePropertyPage', path: '/residentsOnThePropertyPage', builder: (context, params) => ResidentsOnTheProperty()), + FFRoute(name: 'visitsOnThePropertyPage', path: '/visitsOnThePropertyPage', builder: (context, params) => VisitsOnTheProperty()), FFRoute(name: 'peopleOnThePropertyPage', path: '/peopleOnThePropertyPage', builder: (context, params) => PeopleOnThePropertyPage()), FFRoute( name: 'acessHistoryPage', diff --git a/lib/index.dart b/lib/index.dart index bfe5bac8..8b137891 100644 --- a/lib/index.dart +++ b/lib/index.dart @@ -1,11 +1 @@ -export 'pages/acess_history_page/acess_history_page_widget.dart' show AccessHistoryScreen; -export 'pages/home_page/home_page.dart' show HomePageWidget; -export 'pages/liberation_history/liberation_history_widget.dart' show LiberationHistoryWidget; -export 'pages/people_on_the_property_page/people_on_the_property_page_widget.dart' show PeopleOnThePropertyPage; -export 'pages/preferences_settings_page/preferences_settings_widget.dart' show PreferencesPageWidget; -export 'pages/qr_code_page/qr_code_page_widget.dart' show QrCodePageWidget; -export 'pages/register_visitor_page/register_visitor_page_widget.dart' show RegisterVisitorPageWidget; -export 'pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart' show ScheduleCompleteVisitPageWidget; -export 'pages/sign_in_page/sign_in_page_widget.dart' show SignInPageWidget; -export 'pages/sign_up_page/sign_up_page_widget.dart' show SignUpPageWidget; -export 'pages/welcome_page/welcome_page_widget.dart' show WelcomePageWidget; + diff --git a/lib/initialization.dart b/lib/initialization.dart index f5f4b023..564b073f 100644 --- a/lib/initialization.dart +++ b/lib/initialization.dart @@ -12,7 +12,6 @@ import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/shared/helpers/storage/storage_helper.dart'; -import 'package:hub/shared/services/localization/localization_service.dart'; Future initializeApp() async { WidgetsFlutterBinding.ensureInitialized(); diff --git a/lib/main.dart b/lib/main.dart index 7b66def1..0b75747b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -16,11 +16,11 @@ 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/shared/components/molecules/locals/index.dart'; import 'package:hub/shared/helpers/database/database_helper.dart'; import 'package:hub/shared/helpers/storage/base_storage.dart'; import 'package:hub/shared/helpers/storage/storage_helper.dart'; import 'package:hub/shared/services/deeplink/deep_link_service.dart'; -import 'package:hub/shared/services/localization/localization_service.dart'; import 'package:responsive_framework/responsive_framework.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -194,7 +194,7 @@ class _AppState extends State with WidgetsBindingObserver { @override void didChangeAppLifecycleState(AppLifecycleState state) async { if (state == AppLifecycleState.detached) { - await LocalizationService.processLocals(context); + await LocalsRepositoryImpl().processLocals(context); await FirebaseMessagingService().updateDeviceToken(); } } diff --git a/lib/pages/about_property_page/about_property_model.dart b/lib/pages/about_property_page/about_property_model.dart deleted file mode 100644 index aefdc762..00000000 --- a/lib/pages/about_property_page/about_property_model.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:hub/flutter_flow/flutter_flow_model.dart'; - -import 'package:hub/pages/about_property_page/about_property_screen.dart'; - -class AboutPropertyModel extends FlutterFlowModel { - dynamic item; - - VoidCallback? safeSetState; - - Future initAsync() async { - safeSetState?.call(); - } - - @override - void initState(BuildContext context) { - initAsync(); - } - - @override - void dispose() {} -} diff --git a/lib/pages/preferences_settings_page/preferences_settings_model.dart b/lib/pages/preferences_settings_page/preferences_settings_model.dart index 2339d95a..d5edb91f 100644 --- a/lib/pages/preferences_settings_page/preferences_settings_model.dart +++ b/lib/pages/preferences_settings_page/preferences_settings_model.dart @@ -5,10 +5,10 @@ import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/components/templates_components/change_passs_qr_code_pass_key_template_component/change_pass_widget.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; +import 'package:hub/shared/components/molecules/locals/index.dart'; import 'package:hub/shared/helpers/storage/base_storage.dart'; import 'package:hub/shared/helpers/storage/storage_helper.dart'; import 'package:hub/shared/services/authentication/authentication_service.dart'; -import 'package:hub/shared/services/localization/localization_service.dart'; import 'package:share_plus/share_plus.dart'; import '../../shared/utils/snackbar_util.dart'; @@ -262,7 +262,7 @@ class PreferencesPageModel with ChangeNotifier { enText: 'Are you sure you want to unlink your device?', ptText: 'Tem certeza que deseja desvincular seu dispositivo?', ); - onConfirm() async => LocalizationService.unlinkLocal(context); + onConfirm() async => LocalsRepositoryImpl().unlinkLocal(context); showAlertDialog(context, title, content, onConfirm); } diff --git a/lib/pages/reception_page/reception_page_widget.dart b/lib/pages/reception_page/reception_page_widget.dart index dde3e076..2da2e1e8 100644 --- a/lib/pages/reception_page/reception_page_widget.dart +++ b/lib/pages/reception_page/reception_page_widget.dart @@ -10,9 +10,9 @@ import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/flutter_flow_widgets.dart'; import 'package:hub/pages/reception_page/reception_page_model.dart'; +import 'package:hub/shared/components/molecules/locals/index.dart'; import 'package:hub/shared/helpers/storage/storage_helper.dart'; import 'package:hub/shared/services/authentication/authentication_service.dart'; -import 'package:hub/shared/services/localization/localization_service.dart'; import 'package:hub/shared/utils/limited_text_size.dart'; import 'package:provider/provider.dart'; @@ -34,7 +34,7 @@ class _ReceptionPageWidgetState extends State with WidgetsB }(); FirebaseMessagingService().updateDeviceToken(); - LocalizationService.checkLocals(context); + LocalsRepositoryImpl().checkLocals(context); } @override @@ -48,7 +48,7 @@ class _ReceptionPageWidgetState extends State with WidgetsB log('() => state: $state'); if (state == AppLifecycleState.resumed) { setState(() { - LocalizationService.checkLocals(context); + LocalsRepositoryImpl().checkLocals(context); }); } } @@ -75,9 +75,8 @@ class _ReceptionPageWidgetState extends State with WidgetsB Padding( padding: const EdgeInsets.fromLTRB(45, 20, 45, 15.0), child: Text( - FFLocalizations.of(context).getVariableText( - ptText: 'Falta pouco para você utilizar o FRE Access Hub...', - enText: 'You are close to using the FRE Access Hub...'), + FFLocalizations.of(context) + .getVariableText(ptText: 'Falta pouco para você utilizar o FRE Access Hub...', enText: 'You are close to using the FRE Access Hub...'), textAlign: TextAlign.center, style: FlutterFlowTheme.of(context).displayLarge.override( fontFamily: 'Plus Jakarta Sans', @@ -94,8 +93,7 @@ class _ReceptionPageWidgetState extends State with WidgetsB padding: const EdgeInsets.fromLTRB(70, 30, 70.0, 40), child: Text( FFLocalizations.of(context).getVariableText( - ptText: - 'Envie seu identificador para seu condomínio para vincularem sua conta aos nossos sistemas.', + ptText: 'Envie seu identificador para seu condomínio para vincularem sua conta aos nossos sistemas.', enText: 'Send your identifier to your condominium to link your account to our systems.'), textAlign: TextAlign.center, style: FlutterFlowTheme.of(context).displaySmall.override( @@ -115,10 +113,8 @@ class _ReceptionPageWidgetState extends State with WidgetsB Padding( padding: const EdgeInsets.fromLTRB(60, 0, 60, 10), child: Tooltip( - message: FFLocalizations.of(context).getVariableText( - ptText: - 'Seu identificador é utilizado para efetuar\no vínculo do seu APP com o condominio.', - enText: 'My Identifier'), + message: FFLocalizations.of(context) + .getVariableText(ptText: 'Seu identificador é utilizado para efetuar\no vínculo do seu APP com o condominio.', enText: 'My Identifier'), textStyle: FlutterFlowTheme.of(context).labelSmall.override( fontFamily: 'Nunito Sans', color: FlutterFlowTheme.of(context).secondaryText, @@ -129,8 +125,7 @@ class _ReceptionPageWidgetState extends State with WidgetsB ), child: FFButtonWidget( onPressed: () => model.getIdenfifier(context), - text: FFLocalizations.of(context) - .getVariableText(ptText: 'Meu Identificador', enText: 'My Identifier'), + text: FFLocalizations.of(context).getVariableText(ptText: 'Meu Identificador', enText: 'My Identifier'), options: FFButtonOptions( width: double.infinity, height: 30, @@ -164,8 +159,7 @@ class _ReceptionPageWidgetState extends State with WidgetsB AuthenticationService.signOut(context); setState(() {}); }, - text: FFLocalizations.of(context) - .getVariableText(ptText: 'Sair da Conta', enText: 'Logout'), + text: FFLocalizations.of(context).getVariableText(ptText: 'Sair da Conta', enText: 'Logout'), options: FFButtonOptions( width: double.infinity, height: 30, diff --git a/lib/shared/widgets/image_cropper_widget/image_cropper.dart b/lib/shared/components/atoms/image_cropper/image_cropper.dart similarity index 100% rename from lib/shared/widgets/image_cropper_widget/image_cropper.dart rename to lib/shared/components/atoms/image_cropper/image_cropper.dart diff --git a/lib/shared/components/atoms/atom_terms_of_use.dart b/lib/shared/components/atoms/term_of_use/atom_terms_of_use.dart similarity index 88% rename from lib/shared/components/atoms/atom_terms_of_use.dart rename to lib/shared/components/atoms/term_of_use/atom_terms_of_use.dart index b9f14a30..470d61f8 100644 --- a/lib/shared/components/atoms/atom_terms_of_use.dart +++ b/lib/shared/components/atoms/term_of_use/atom_terms_of_use.dart @@ -1,10 +1,9 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; +import 'package:hub/flutter_flow/flutter_flow_theme.dart'; +import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/shared/utils/limited_text_size.dart'; -import '../../../flutter_flow/flutter_flow_theme.dart'; -import '../../../flutter_flow/flutter_flow_util.dart'; - class AtomTermsOfUse extends StatelessWidget { const AtomTermsOfUse({super.key}); diff --git a/lib/shared/widgets/drawer_widget/drawer_widget.dart b/lib/shared/components/molecules/drawer/drawer_widget.dart similarity index 89% rename from lib/shared/widgets/drawer_widget/drawer_widget.dart rename to lib/shared/components/molecules/drawer/drawer_widget.dart index ddd81a47..13362990 100644 --- a/lib/shared/widgets/drawer_widget/drawer_widget.dart +++ b/lib/shared/components/molecules/drawer/drawer_widget.dart @@ -1,23 +1,20 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:hub/backend/schema/enums/enums.dart'; -import 'package:hub/components/organism_components/menu_component/menu_component_widget.dart'; +import 'package:hub/features/home/index.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; -import 'package:hub/pages/home_page/home_bloc.dart'; -import 'package:hub/pages/home_page/home_state.dart'; -import 'package:hub/shared/helpers/license/license_helper.dart'; -import 'package:hub/shared/services/license/license_service.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; +import 'package:hub/shared/components/molecules/modules/index.dart'; class CustomDrawer extends StatelessWidget { const CustomDrawer({super.key}); @override Widget build(BuildContext context) { - return StreamBuilder>( - stream: LicenseService().licenseStream, + return StreamBuilder( + stream: LicenseRepositoryImpl.stream, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center( @@ -27,7 +24,7 @@ class CustomDrawer extends StatelessWidget { return Center( child: Text('Error: ${snapshot.error}'), ); - } else if (!snapshot.hasData || snapshot.data!.isEmpty) { + } else if (!snapshot.hasData || snapshot.data! == false) { return Center( child: Padding( padding: EdgeInsets.only(top: MediaQuery.of(context).size.height / 10), @@ -192,11 +189,10 @@ class CustomDrawer extends StatelessWidget { } Widget _buildDrawerBody(BuildContext context) { - return MenuComponentWidget( - style: MenuView.list, - item: MenuItem.tile, - expandable: false, - menuOptions: Module.values.where((e) => e != Module.settings).toList(), + return MenuFactory( + menuEntry: MenuEntries.drawer, + menuItem: MenuItem.tile, + menuView: MenuView.list, ); } } diff --git a/lib/shared/components/molecules/drawer/index.dart b/lib/shared/components/molecules/drawer/index.dart new file mode 100644 index 00000000..bbb9bc10 --- /dev/null +++ b/lib/shared/components/molecules/drawer/index.dart @@ -0,0 +1 @@ +export 'drawer_widget.dart'; diff --git a/lib/shared/components/molecules/locals/data/data_sources/index.dart b/lib/shared/components/molecules/locals/data/data_sources/index.dart new file mode 100644 index 00000000..225b76e9 --- /dev/null +++ b/lib/shared/components/molecules/locals/data/data_sources/index.dart @@ -0,0 +1,2 @@ +export 'locals_local_data_source.dart'; +export 'locals_remote_data_source.dart'; diff --git a/lib/shared/components/molecules/locals/data/data_sources/locals_local_data_source.dart b/lib/shared/components/molecules/locals/data/data_sources/locals_local_data_source.dart new file mode 100644 index 00000000..47f65ad7 --- /dev/null +++ b/lib/shared/components/molecules/locals/data/data_sources/locals_local_data_source.dart @@ -0,0 +1,3 @@ +abstract class LocalsLocalDataSource {} + +class LocalsLocalDataSourceImpl {} diff --git a/lib/shared/services/localization/localization_service.dart b/lib/shared/components/molecules/locals/data/data_sources/locals_remote_data_source.dart similarity index 88% rename from lib/shared/services/localization/localization_service.dart rename to lib/shared/components/molecules/locals/data/data_sources/locals_remote_data_source.dart index bf485699..a07318f0 100644 --- a/lib/shared/services/localization/localization_service.dart +++ b/lib/shared/components/molecules/locals/data/data_sources/locals_remote_data_source.dart @@ -8,19 +8,30 @@ import 'package:hub/components/organism_components/bottom_arrow_linked_locals_co 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/shared/helpers/database/database_helper.dart'; +import 'package:hub/shared/components/molecules/modules/index.dart'; import 'package:hub/shared/helpers/storage/base_storage.dart'; import 'package:hub/shared/helpers/storage/storage_helper.dart'; import 'package:hub/shared/services/authentication/authentication_service.dart'; -import 'package:hub/shared/services/license/license_service.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/log_util.dart'; import 'package:hub/shared/utils/snackbar_util.dart'; -import 'package:hub/shared/extensions/string_extensions.dart'; -class LocalizationService { - static Future checkLocals(BuildContext context) async { +abstract class LocalsRemoteDataSource { + Future checkLocals(BuildContext context) async {} + Future processLocals(BuildContext context) async => false; + Future processData(BuildContext context) async => false; + Future selectLocal(BuildContext context, ApiCallResponse? response) async => false; + Future unlinkLocal(BuildContext context) async {} +} + +class LocalsRemoteDataSourceImpl implements LocalsRemoteDataSource { + static final LocalsRemoteDataSourceImpl _instance = LocalsRemoteDataSourceImpl._internal(); + factory LocalsRemoteDataSourceImpl() => _instance; + LocalsRemoteDataSourceImpl._internal(); + + @override + Future checkLocals(BuildContext context) async { try { final GetLocalsCall callback = PhpGroup.getLocalsCall; var response = await callback.call(); @@ -57,9 +68,10 @@ class LocalizationService { } } - static Future processLocals(BuildContext context) async { + @override + Future processLocals(BuildContext context) async { try { - await LicenseService().cleanLicense(); + await LicenseRepositoryImpl().cleanLicense(); final GetLocalsCall callback = PhpGroup.getLocalsCall; final ApiCallResponse response = await callback.call(); final bool? isError = response.jsonBody['error']; @@ -130,7 +142,8 @@ class LocalizationService { } } - static Future processData(BuildContext context) async { + @override + Future processData(BuildContext context) async { try { final GetDadosCall callback = PhpGroup.getDadosCall; ApiCallResponse? response = await callback.call(); @@ -153,10 +166,10 @@ class LocalizationService { return false; } else { final bool isNewVersion = await _updateStorageUtil(response.jsonBody); - await LicenseService().setupLicense(DatabaseStorage.database, isNewVersion); + await LicenseRepositoryImpl().setupLicense(isNewVersion); if (isNewVersion) { log('(A) => isNewVersion: $isNewVersion'); - return await LicenseService().fetchLicenses(isNewVersion); + return await LicenseRepositoryImpl().fetchLicense(isNewVersion); } return false; } @@ -172,7 +185,8 @@ class LocalizationService { } } - static Future selectLocal(BuildContext context, ApiCallResponse? response) async { + @override + Future selectLocal(BuildContext context, ApiCallResponse? response) async { return await showModalBottomSheet( isScrollControlled: true, backgroundColor: Colors.transparent, @@ -191,7 +205,8 @@ class LocalizationService { ).then((_) async => await processData(context)); } - static Future unlinkLocal(BuildContext context) async { + @override + Future unlinkLocal(BuildContext context) async { String content; try { content = FFLocalizations.of(context).getVariableText( @@ -235,7 +250,7 @@ class LocalizationService { } } - static void _handleError(BuildContext context, String errorMsg) async { + void _handleError(BuildContext context, String errorMsg) async { final String devUUID = await StorageHelper().g(KeychainStorageKey.devUUID.value) ?? ''; final String userUUID = await StorageHelper().g(KeychainStorageKey.userUUID.value) ?? ''; final bool isAuthenticated = userUUID.isNotEmpty && devUUID.isNotEmpty; @@ -262,7 +277,7 @@ class LocalizationService { await DialogUtil.error(context, errorMsg).whenComplete(() async => await selectLocal(context, null)); } - static Future _handleUnavailable(BuildContext context, List locals) async { + Future _handleUnavailable(BuildContext context, List locals) async { log('() => isUnavailable'); try { await StorageHelper().s(KeychainStorageKey.clientUUID.value, locals[0]['CLI_ID']); @@ -284,7 +299,7 @@ class LocalizationService { return false; } - static Future _handleEnabled(BuildContext context, dynamic local) async { + Future _handleEnabled(BuildContext context, dynamic local) async { log('() => isEnabled'); await StorageHelper().s(KeychainStorageKey.clientUUID.value, local['CLI_ID']); await StorageHelper().s(KeychainStorageKey.ownerUUID.value, local['CLU_OWNER_ID']); @@ -293,14 +308,14 @@ class LocalizationService { return await processData(context); } - static void _logLocalsStatus(List locals) { + void _logLocalsStatus(List locals) { for (var local in locals) { final String status = local['CLU_STATUS']; log('() => CLU_STATUS: $status'); } } - static Future _updateStorageUtil(Map jsonBody) async { + Future _updateStorageUtil(Map jsonBody) async { await StorageHelper().s(KeychainStorageKey.whatsapp.value, jsonBody['whatsapp'] != null && jsonBody['whatsapp']); await StorageHelper().s(KeychainStorageKey.provisional.value, jsonBody['provisional'] != null && jsonBody['provisional']); await StorageHelper().s(KeychainStorageKey.pets.value, jsonBody['pet'] != null && jsonBody['pet']); @@ -318,33 +333,33 @@ class LocalizationService { return isNewVersion; } - static bool _isActive(List locals) { + bool _isActive(List locals) { return locals.where((local) => local['CLU_STATUS'] == 'A').isNotEmpty; } - static Future _isInactived(List locals) async { + Future _isInactived(List locals) async { String cliUUID = (await StorageHelper().g(KeychainStorageKey.clientUUID.value)) ?? ''; return locals.where((local) => local['CLI_ID'] != cliUUID && local['CLU_STATUS'] == 'A').isNotEmpty; } - static bool _isPending(List locals) { + bool _isPending(List locals) { return locals.where((local) => local['CLU_STATUS'] != 'B' && local['CLU_STATUS'] != 'A').isNotEmpty; } - static Future _isUnselected() async { + Future _isUnselected() async { String cliUUID = (await StorageHelper().g(KeychainStorageKey.clientUUID.value)) ?? ''; String cliName = (await StorageHelper().g(KeychainStorageKey.clientName.value)) ?? ''; String ownerUUID = (await StorageHelper().g(KeychainStorageKey.ownerUUID.value)) ?? ''; return cliUUID.isEmpty && cliName.isEmpty && ownerUUID.isEmpty; } - static Future _isSelected(bool isInactived) async { + Future _isSelected(bool isInactived) async { String cliUUID = (await StorageHelper().g(KeychainStorageKey.clientUUID.value)) ?? ''; String cliName = (await StorageHelper().g(KeychainStorageKey.clientName.value)) ?? ''; return cliUUID.isNotEmpty && cliName.isNotEmpty && isInactived; } - static Future _isAvailable() async { + Future _isAvailable() async { String cliUUID = (await StorageHelper().g(KeychainStorageKey.clientUUID.value)) ?? ''; String cliName = (await StorageHelper().g(KeychainStorageKey.clientName.value)) ?? ''; return cliUUID.isNotEmpty && cliName.isNotEmpty; diff --git a/lib/shared/components/molecules/locals/data/index.dart b/lib/shared/components/molecules/locals/data/index.dart new file mode 100644 index 00000000..186dfac9 --- /dev/null +++ b/lib/shared/components/molecules/locals/data/index.dart @@ -0,0 +1,3 @@ +export 'data_sources/index.dart'; +export 'repositories/index.dart'; +export 'models/index.dart'; diff --git a/lib/shared/components/molecules/locals/data/models/index.dart b/lib/shared/components/molecules/locals/data/models/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/shared/components/molecules/locals/data/repositories/index.dart b/lib/shared/components/molecules/locals/data/repositories/index.dart new file mode 100644 index 00000000..80856dae --- /dev/null +++ b/lib/shared/components/molecules/locals/data/repositories/index.dart @@ -0,0 +1 @@ +export 'locals_repository_impl.dart'; diff --git a/lib/shared/components/molecules/locals/data/repositories/locals_repository_impl.dart b/lib/shared/components/molecules/locals/data/repositories/locals_repository_impl.dart new file mode 100644 index 00000000..27873228 --- /dev/null +++ b/lib/shared/components/molecules/locals/data/repositories/locals_repository_impl.dart @@ -0,0 +1,32 @@ +import 'package:flutter/src/widgets/framework.dart'; +import 'package:hub/backend/api_requests/api_manager.dart'; +import 'package:hub/shared/components/molecules/locals/index.dart'; + +class LocalsRepositoryImpl implements LocalsRepository { + final LocalsRemoteDataSource remoteDataSource = LocalsRemoteDataSourceImpl(); + + @override + Future checkLocals(BuildContext context) async { + return await remoteDataSource.checkLocals(context); + } + + @override + Future processData(BuildContext context) async { + return await remoteDataSource.processData(context); + } + + @override + Future processLocals(BuildContext context) async { + return await remoteDataSource.processLocals(context); + } + + @override + Future selectLocal(BuildContext context, ApiCallResponse? response) async { + return await remoteDataSource.selectLocal(context, response); + } + + @override + Future unlinkLocal(BuildContext context) { + return remoteDataSource.unlinkLocal(context); + } +} diff --git a/lib/shared/components/molecules/locals/domain/entities/index.dart b/lib/shared/components/molecules/locals/domain/entities/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/shared/components/molecules/locals/domain/index.dart b/lib/shared/components/molecules/locals/domain/index.dart new file mode 100644 index 00000000..00b76d59 --- /dev/null +++ b/lib/shared/components/molecules/locals/domain/index.dart @@ -0,0 +1,3 @@ +export 'entities/index.dart'; +export 'respositories/index.dart'; +export 'usecases/index.dart'; diff --git a/lib/shared/components/molecules/locals/domain/respositories/index.dart b/lib/shared/components/molecules/locals/domain/respositories/index.dart new file mode 100644 index 00000000..55f6b77a --- /dev/null +++ b/lib/shared/components/molecules/locals/domain/respositories/index.dart @@ -0,0 +1 @@ +export 'locals_repository.dart'; diff --git a/lib/shared/components/molecules/locals/domain/respositories/locals_repository.dart b/lib/shared/components/molecules/locals/domain/respositories/locals_repository.dart new file mode 100644 index 00000000..39577166 --- /dev/null +++ b/lib/shared/components/molecules/locals/domain/respositories/locals_repository.dart @@ -0,0 +1,10 @@ +import 'package:flutter/material.dart'; +import 'package:hub/backend/api_requests/api_calls.dart'; + +abstract class LocalsRepository { + Future checkLocals(BuildContext context) async {} + Future processLocals(BuildContext context) async => false; + Future processData(BuildContext context) async => false; + Future selectLocal(BuildContext context, ApiCallResponse? response) async => false; + Future unlinkLocal(BuildContext context) async {} +} diff --git a/lib/shared/components/molecules/locals/domain/usecases/index.dart b/lib/shared/components/molecules/locals/domain/usecases/index.dart new file mode 100644 index 00000000..e69de29b diff --git a/lib/shared/components/molecules/locals/index.dart b/lib/shared/components/molecules/locals/index.dart new file mode 100644 index 00000000..aa560630 --- /dev/null +++ b/lib/shared/components/molecules/locals/index.dart @@ -0,0 +1,3 @@ +export 'data/index.dart'; +export 'domain/index.dart'; +export 'presentation/index.dart'; diff --git a/lib/shared/components/molecules/locals/presentation/blocs/index.dart b/lib/shared/components/molecules/locals/presentation/blocs/index.dart new file mode 100644 index 00000000..488c36aa --- /dev/null +++ b/lib/shared/components/molecules/locals/presentation/blocs/index.dart @@ -0,0 +1 @@ +export 'local_profile_bloc.dart'; diff --git a/lib/components/organism_components/local_profile_component/local_profile_bloc.dart b/lib/shared/components/molecules/locals/presentation/blocs/local_profile_bloc.dart similarity index 93% rename from lib/components/organism_components/local_profile_component/local_profile_bloc.dart rename to lib/shared/components/molecules/locals/presentation/blocs/local_profile_bloc.dart index 5aacf75e..cd838442 100644 --- a/lib/components/organism_components/local_profile_component/local_profile_bloc.dart +++ b/lib/shared/components/molecules/locals/presentation/blocs/local_profile_bloc.dart @@ -1,7 +1,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter/material.dart'; -import 'package:hub/components/organism_components/local_profile_component/local_profile_component_widget.dart'; import 'package:hub/flutter_flow/flutter_flow_model.dart'; +import 'package:hub/shared/components/molecules/locals/index.dart'; import 'package:hub/shared/helpers/storage/base_storage.dart'; import 'package:hub/shared/helpers/storage/storage_helper.dart'; diff --git a/lib/shared/components/molecules/locals/presentation/index.dart b/lib/shared/components/molecules/locals/presentation/index.dart new file mode 100644 index 00000000..688818c6 --- /dev/null +++ b/lib/shared/components/molecules/locals/presentation/index.dart @@ -0,0 +1,2 @@ +export 'blocs/index.dart'; +export 'widgets/index.dart'; diff --git a/lib/shared/components/molecules/locals/presentation/widgets/index.dart b/lib/shared/components/molecules/locals/presentation/widgets/index.dart new file mode 100644 index 00000000..211db207 --- /dev/null +++ b/lib/shared/components/molecules/locals/presentation/widgets/index.dart @@ -0,0 +1 @@ +export 'local_profile_widget.dart'; diff --git a/lib/components/organism_components/local_profile_component/local_profile_component_widget.dart b/lib/shared/components/molecules/locals/presentation/widgets/local_profile_widget.dart similarity index 87% rename from lib/components/organism_components/local_profile_component/local_profile_component_widget.dart rename to lib/shared/components/molecules/locals/presentation/widgets/local_profile_widget.dart index cfbe2109..9cba14c4 100644 --- a/lib/components/organism_components/local_profile_component/local_profile_component_widget.dart +++ b/lib/shared/components/molecules/locals/presentation/widgets/local_profile_widget.dart @@ -2,13 +2,12 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:hub/components/organism_components/local_profile_component/local_profile_bloc.dart'; import 'package:hub/flutter_flow/custom_functions.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; +import 'package:hub/shared/components/molecules/locals/index.dart'; import 'package:hub/shared/helpers/storage/base_storage.dart'; import 'package:hub/shared/helpers/storage/storage_helper.dart'; -import 'package:hub/shared/services/localization/localization_service.dart'; class LocalProfileComponentWidget extends StatefulWidget { const LocalProfileComponentWidget({super.key}); @@ -59,8 +58,7 @@ class _LocalProfileComponentWidgetState extends State context.read().add(LocalProfileEvent())); + await LocalsRepositoryImpl().processLocals(context).whenComplete(() async => context.read().add(LocalProfileEvent())); }, child: ClipRRect( borderRadius: BorderRadius.circular(200.0), @@ -73,9 +71,7 @@ class _LocalProfileComponentWidgetState extends State { + MenuBloc() : super(MenuState()); +} diff --git a/lib/shared/components/molecules/menu/presentation/blocs/menu_item_bloc.dart b/lib/shared/components/molecules/menu/presentation/blocs/menu_item_bloc.dart new file mode 100644 index 00000000..608fa51d --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/blocs/menu_item_bloc.dart @@ -0,0 +1,9 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; + +class MenuItemEvent {} + +class MenuItemState {} + +class MenuItemBloc extends Bloc { + MenuItemBloc() : super(MenuItemState()); +} diff --git a/lib/components/organism_components/menu_component/menu_component_bloc.dart b/lib/shared/components/molecules/menu/presentation/blocs/menu_view_bloc.dart similarity index 73% rename from lib/components/organism_components/menu_component/menu_component_bloc.dart rename to lib/shared/components/molecules/menu/presentation/blocs/menu_view_bloc.dart index d714cf3f..6f60ca26 100644 --- a/lib/components/organism_components/menu_component/menu_component_bloc.dart +++ b/lib/shared/components/molecules/menu/presentation/blocs/menu_view_bloc.dart @@ -3,43 +3,44 @@ import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:hub/backend/schema/enums/enums.dart'; -import 'package:hub/components/atomic_components/menu_button_item/menu_button_item_widget.dart'; -import 'package:hub/components/atomic_components/menu_card_item/menu_card_item.dart'; -import 'package:hub/components/molecular_components/menu_item/menu_item.dart'; + import 'package:hub/flutter_flow/custom_functions.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; +import 'package:hub/shared/components/molecules/modules/index.dart'; import 'package:hub/shared/extensions/dialog_extensions.dart'; -import 'package:hub/shared/helpers/license/license_helper.dart'; -class MenuEvent {} +class MenuViewEvent {} -class MenuState { +class MenuViewState { final List menuEntries; final bool isGrid; - MenuState({this.menuEntries = const [], this.isGrid = false}); + MenuViewState({this.menuEntries = const [], this.isGrid = false}); - MenuState copyWith({List? menuEntries, bool? isGrid}) { - return MenuState( + MenuViewState copyWith({List? menuEntries, bool? isGrid}) { + return MenuViewState( menuEntries: menuEntries ?? this.menuEntries, isGrid: isGrid ?? this.isGrid, ); } } -class MenuBloc extends Bloc { +class MenuViewBloc extends Bloc { final MenuView style; final MenuItem item; final bool expandable; - final List menuOptions; + final List menuOptions; - MenuBloc({required this.style, required this.item, required this.expandable, required this.menuOptions}) : super(MenuState()) { - on((event, emit) async { + MenuViewBloc({required this.style, required this.item, required this.expandable, required this.menuOptions}) : super(MenuViewState()) { + on((event, emit) async { + await LicenseRemoteDataSourceImpl().waitForSaveCompletion(); final entries = await generateMenuEntries(); emit(state.copyWith(menuEntries: entries)); }); } + Future addMenuEntry(List entries, IconData icon, String text, Function() action) async { entries.add( item == MenuItem.button @@ -57,10 +58,10 @@ class MenuBloc extends Bloc { List entries = []; try { for (var opt in menuOptions) { - String? licenseValue = await LicenseHelper().g(opt.value); + String? licenseValue = await LicenseRepositoryImpl().g(opt.value); if (licenseValue != null) { Map licenseMap = await stringToMap(licenseValue); - if (opt == Module.aboutProperty) log('AboutProperty: $licenseMap'); + if (opt.value == Modules.aboutProperty.value) log('AboutProperty: $licenseMap'); log('Module: ${opt.value} - License: ${licenseMap['display']}'); final String display = licenseMap['display'] ?? 'INVISIVEL'; final String startDate = licenseMap['startDate'] ?? ''; @@ -80,7 +81,7 @@ class MenuBloc extends Bloc { return entries; } - Future processDisplay(String display, Module opt, List entries) async { + Future processDisplay(String display, BaseEntry opt, List entries) async { try { switch (display) { case 'VISIVEL': @@ -90,7 +91,7 @@ class MenuBloc extends Bloc { break; case 'DESABILITADO': await addMenuEntry(entries, opt.icon, opt.name, () async { - await DialogUnavailable.unavailableFeature(key.currentContext!); + await DialogUnavailable.unavailableFeature(navigatorKey.currentContext!); }); break; case 'INVISIVEL': @@ -102,7 +103,7 @@ class MenuBloc extends Bloc { } } - Future processStartDate(String startDate, Module opt) async { + Future processStartDate(String startDate, BaseEntry opt) async { try { if (startDate.isEmpty) return true; final DateTime? start = DateTime.tryParse(startDate); @@ -115,7 +116,7 @@ class MenuBloc extends Bloc { return false; } - Future processExpirationDate(String expirationDate, Module opt) async { + Future processExpirationDate(String expirationDate, BaseEntry opt) async { try { if (expirationDate.isEmpty) return false; final DateTime? expiration = DateTime.tryParse(expirationDate); @@ -130,7 +131,7 @@ class MenuBloc extends Bloc { Future nav(String link) async { log('Opening: $link'); - key.currentContext!.push(link, extra: { + navigatorKey.currentContext!.push(link, extra: { kTransitionInfoKey: const TransitionInfo( hasTransition: false, transitionType: PageTransitionType.scale, diff --git a/lib/shared/components/molecules/menu/presentation/index.dart b/lib/shared/components/molecules/menu/presentation/index.dart new file mode 100644 index 00000000..688818c6 --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/index.dart @@ -0,0 +1,2 @@ +export 'blocs/index.dart'; +export 'widgets/index.dart'; diff --git a/lib/shared/components/molecules/menu/presentation/widgets/index.dart b/lib/shared/components/molecules/menu/presentation/widgets/index.dart new file mode 100644 index 00000000..3101060a --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/index.dart @@ -0,0 +1,4 @@ +export 'menu_item/index.dart'; +export 'menu_view/index.dart'; +export 'menu_factory/index.dart'; +export 'menu_entry/index.dart'; diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/drawer_menu_entry.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/drawer_menu_entry.dart new file mode 100644 index 00000000..c40adeff --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/drawer_menu_entry.dart @@ -0,0 +1,223 @@ +import 'package:flutter/material.dart'; +import 'package:hub/flutter_flow/internationalization.dart'; +import 'package:hub/flutter_flow/nav/nav.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; + +enum DrawerMenuEntries implements BaseEntry { + providerSchedule, + deliverySchedule, + fastPass, + completeSchedule, + orders, + reservations, + visitors, + qrCode, + pets, + access, + liberations, + messages, + aboutProperty, + peopleOnTheProperty, + settings, + logout; + + @override + String get value { + switch (this) { + case DrawerMenuEntries.messages: + return 'FRE-HUB-MESSAGES'; + case DrawerMenuEntries.liberations: + return 'FRE-HUB-LIBERATIONS'; + case DrawerMenuEntries.reservations: + return 'FRE-HUB-RESERVATIONS'; + case DrawerMenuEntries.access: + return 'FRE-HUB-ACCESS'; + case DrawerMenuEntries.pets: + return 'FRE-HUB-PETS'; + case DrawerMenuEntries.orders: + return 'FRE-HUB-ORDERS'; + case DrawerMenuEntries.completeSchedule: + return 'FRE-HUB-COMPLETE-SCHEDULE'; + case DrawerMenuEntries.providerSchedule: + return 'FRE-HUB-AGE-PROV-PRESTADOR'; + case DrawerMenuEntries.deliverySchedule: + return 'FRE-HUB-AGE-PROV-DELIVERY'; + case DrawerMenuEntries.aboutProperty: + return 'FRE-HUB-PROPERTY'; + case DrawerMenuEntries.fastPass: + return 'FRE-HUB-FASTPASS'; + case DrawerMenuEntries.visitors: + return 'FRE-HUB-VISITORS'; + case DrawerMenuEntries.qrCode: + return 'FRE-HUB-QRCODE'; + case DrawerMenuEntries.peopleOnTheProperty: + return 'FRE-HUB-PEOPLE'; + default: + return ''; + } + } + + @override + String get name { + switch (this) { + case DrawerMenuEntries.messages: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Mensagens', + enText: 'Messages History', + ); + case DrawerMenuEntries.liberations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Liberações', + enText: 'Liberations History', + ); + case DrawerMenuEntries.reservations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Reservas', + enText: 'Reservations', + ); + case DrawerMenuEntries.access: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Acessos', + enText: 'Access History', + ); + case DrawerMenuEntries.pets: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pets', + enText: 'Pets', + ); + case DrawerMenuEntries.peopleOnTheProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pessoas na Propriedade', + enText: 'People on the Property', + ); + case DrawerMenuEntries.orders: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Minhas Encomendas', + enText: 'My Orders', + ); + case DrawerMenuEntries.completeSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agenda Completa', + enText: 'Complete Schedule', + ); + case DrawerMenuEntries.providerSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Prestadores', + enText: 'Schedule Providers', + ); + case DrawerMenuEntries.deliverySchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Delivery', + enText: 'Schedule Delivery', + ); + case DrawerMenuEntries.fastPass: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Fast Pass', + enText: 'Fast Pass', + ); + case DrawerMenuEntries.qrCode: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'QRCode de Acesso', + enText: 'Access QRCode', + ); + case DrawerMenuEntries.visitors: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Cadastrar Visitantes', + enText: 'Register Visitors', + ); + case DrawerMenuEntries.aboutProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Sobre a Propriedade', + enText: 'About the Property', + ); + case DrawerMenuEntries.settings: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Configurações', + enText: 'Settings', + ); + case DrawerMenuEntries.logout: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Sair', + enText: 'Logout', + ); + } + } + + @override + IconData get icon { + switch (this) { + case DrawerMenuEntries.messages: + return Icons.chat_outlined; + case DrawerMenuEntries.liberations: + return Icons.how_to_reg_outlined; + case DrawerMenuEntries.reservations: + return Icons.event_available; + case DrawerMenuEntries.access: + return Icons.transfer_within_a_station_outlined; + case DrawerMenuEntries.pets: + return Icons.pets; + case DrawerMenuEntries.peopleOnTheProperty: + return Icons.groups; + case DrawerMenuEntries.orders: + return Icons.inventory_2_outlined; + case DrawerMenuEntries.completeSchedule: + return Icons.event; + case DrawerMenuEntries.providerSchedule: + return Icons.engineering_outlined; + case DrawerMenuEntries.deliverySchedule: + return Icons.sports_motorsports_outlined; + case DrawerMenuEntries.fastPass: + return Icons.attach_email_outlined; + case DrawerMenuEntries.qrCode: + return Icons.qr_code; + case DrawerMenuEntries.visitors: + return Icons.person_add_alt_1_outlined; + case DrawerMenuEntries.aboutProperty: + return Icons.home; + case DrawerMenuEntries.settings: + return Icons.settings; + case DrawerMenuEntries.logout: + return Icons.exit_to_app; + } + } + + @override + String get route { + switch (this) { + case DrawerMenuEntries.messages: + return '/messageHistoryPage'; + case DrawerMenuEntries.liberations: + return '/liberationHistory'; + case DrawerMenuEntries.reservations: + return '/reservation'; + case DrawerMenuEntries.access: + return '/acessHistoryPage'; + case DrawerMenuEntries.pets: + return '/petsPage'; + case DrawerMenuEntries.peopleOnTheProperty: + return '/peopleOnThePropertyPage'; + case DrawerMenuEntries.orders: + return '/packageOrder'; + case DrawerMenuEntries.completeSchedule: + return '/scheduleCompleteVisitPage'; + case DrawerMenuEntries.providerSchedule: + return '/provisionalSchedule'; + case DrawerMenuEntries.aboutProperty: + return '/aboutProperty'; + case DrawerMenuEntries.deliverySchedule: + return '/deliverySchedule'; + case DrawerMenuEntries.fastPass: + return '/fastPassPage'; + case DrawerMenuEntries.qrCode: + return '/qrCodePage'; + case DrawerMenuEntries.visitors: + return '/registerVisitorPage'; + case DrawerMenuEntries.settings: + return '/preferencesSettings'; + case DrawerMenuEntries.logout: + return '/WelcomePage'; + default: + return ''; + } + } +} diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/home_menu_entry.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/home_menu_entry.dart new file mode 100644 index 00000000..c72c2cd2 --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/home_menu_entry.dart @@ -0,0 +1,213 @@ +import 'package:flutter/material.dart'; +import 'package:hub/flutter_flow/internationalization.dart'; +import 'package:hub/flutter_flow/nav/nav.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; + +enum HomeMenuEntries implements BaseEntry { + providerSchedule, + deliverySchedule, + fastPass, + completeSchedule, + orders, + reservations, + visitors, + qrCode, + pets, + access, + liberations, + messages, + aboutProperty, + peopleOnTheProperty, + settings; + + @override + String get value { + switch (this) { + case HomeMenuEntries.messages: + return 'FRE-HUB-MESSAGES'; + case HomeMenuEntries.liberations: + return 'FRE-HUB-LIBERATIONS'; + case HomeMenuEntries.reservations: + return 'FRE-HUB-RESERVATIONS'; + case HomeMenuEntries.access: + return 'FRE-HUB-ACCESS'; + case HomeMenuEntries.pets: + return 'FRE-HUB-PETS'; + case HomeMenuEntries.orders: + return 'FRE-HUB-ORDERS'; + case HomeMenuEntries.completeSchedule: + return 'FRE-HUB-COMPLETE-SCHEDULE'; + case HomeMenuEntries.providerSchedule: + return 'FRE-HUB-AGE-PROV-PRESTADOR'; + case HomeMenuEntries.deliverySchedule: + return 'FRE-HUB-AGE-PROV-DELIVERY'; + case HomeMenuEntries.aboutProperty: + return 'FRE-HUB-PROPERTY'; + case HomeMenuEntries.fastPass: + return 'FRE-HUB-FASTPASS'; + case HomeMenuEntries.visitors: + return 'FRE-HUB-VISITORS'; + case HomeMenuEntries.qrCode: + return 'FRE-HUB-QRCODE'; + case HomeMenuEntries.peopleOnTheProperty: + return 'FRE-HUB-PEOPLE'; + default: + return ''; + } + } + + @override + String get name { + switch (this) { + case HomeMenuEntries.messages: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Mensagens', + enText: 'Messages History', + ); + case HomeMenuEntries.liberations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Liberações', + enText: 'Liberations History', + ); + case HomeMenuEntries.reservations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Reservas', + enText: 'Reservations', + ); + case HomeMenuEntries.access: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Acessos', + enText: 'Access History', + ); + case HomeMenuEntries.pets: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pets', + enText: 'Pets', + ); + case HomeMenuEntries.peopleOnTheProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pessoas na Propriedade', + enText: 'People on the Property', + ); + case HomeMenuEntries.orders: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Minhas Encomendas', + enText: 'My Orders', + ); + case HomeMenuEntries.completeSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agenda Completa', + enText: 'Complete Schedule', + ); + case HomeMenuEntries.providerSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Prestadores', + enText: 'Schedule Providers', + ); + case HomeMenuEntries.deliverySchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Delivery', + enText: 'Schedule Delivery', + ); + case HomeMenuEntries.fastPass: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Fast Pass', + enText: 'Fast Pass', + ); + case HomeMenuEntries.qrCode: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'QRCode de Acesso', + enText: 'Access QRCode', + ); + case HomeMenuEntries.visitors: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Cadastrar Visitantes', + enText: 'Register Visitors', + ); + case HomeMenuEntries.aboutProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Sobre a Propriedade', + enText: 'About the Property', + ); + case HomeMenuEntries.settings: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Configurações', + enText: 'Settings', + ); + } + } + + @override + IconData get icon { + switch (this) { + case HomeMenuEntries.messages: + return Icons.chat_outlined; + case HomeMenuEntries.liberations: + return Icons.how_to_reg_outlined; + case HomeMenuEntries.reservations: + return Icons.event_available; + case HomeMenuEntries.access: + return Icons.transfer_within_a_station_outlined; + case HomeMenuEntries.pets: + return Icons.pets; + case HomeMenuEntries.peopleOnTheProperty: + return Icons.groups; + case HomeMenuEntries.orders: + return Icons.inventory_2_outlined; + case HomeMenuEntries.completeSchedule: + return Icons.event; + case HomeMenuEntries.providerSchedule: + return Icons.engineering_outlined; + case HomeMenuEntries.deliverySchedule: + return Icons.sports_motorsports_outlined; + case HomeMenuEntries.fastPass: + return Icons.attach_email_outlined; + case HomeMenuEntries.qrCode: + return Icons.qr_code; + case HomeMenuEntries.visitors: + return Icons.person_add_alt_1_outlined; + case HomeMenuEntries.aboutProperty: + return Icons.home; + case HomeMenuEntries.settings: + return Icons.settings; + } + } + + @override + String get route { + switch (this) { + case HomeMenuEntries.messages: + return '/messageHistoryPage'; + case HomeMenuEntries.liberations: + return '/liberationHistory'; + case HomeMenuEntries.reservations: + return '/reservation'; + case HomeMenuEntries.access: + return '/acessHistoryPage'; + case HomeMenuEntries.pets: + return '/petsPage'; + case HomeMenuEntries.peopleOnTheProperty: + return '/peopleOnThePropertyPage'; + case HomeMenuEntries.orders: + return '/packageOrder'; + case HomeMenuEntries.completeSchedule: + return '/scheduleCompleteVisitPage'; + case HomeMenuEntries.providerSchedule: + return '/provisionalSchedule'; + case HomeMenuEntries.aboutProperty: + return '/aboutProperty'; + case HomeMenuEntries.deliverySchedule: + return '/deliverySchedule'; + case HomeMenuEntries.fastPass: + return '/fastPassPage'; + case HomeMenuEntries.qrCode: + return '/qrCodePage'; + case HomeMenuEntries.visitors: + return '/registerVisitorPage'; + case HomeMenuEntries.settings: + return '/preferencesSettings'; + default: + return ''; + } + } +} diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/index.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/index.dart new file mode 100644 index 00000000..9b5d30cf --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/index.dart @@ -0,0 +1,4 @@ +export 'drawer_menu_entry.dart'; +export 'home_menu_entry.dart'; +export 'property_menu_entry.dart'; +export 'menu_entry_factory.dart'; diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/menu_entry_factory.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/menu_entry_factory.dart new file mode 100644 index 00000000..8c23e8bc --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/menu_entry_factory.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; + +enum MenuEntries { + home, + drawer, + AboutProperty; + + List get getValues { + switch (this) { + case MenuEntries.home: + return HomeMenuEntries.values.toList(); + case MenuEntries.drawer: + return DrawerMenuEntries.values.toList(); + case MenuEntries.AboutProperty: + return AboutPropertyMenuEntries.values.toList(); + } + } +} + +class MenuEntryFactory { + static List createMenuEntry(BaseEntry type) { + switch (type) { + case HomeMenuEntries _: + return HomeMenuEntries.values.toList(); + case DrawerMenuEntries _: + return DrawerMenuEntries.values.toList(); + case AboutPropertyMenuEntries _: + return AboutPropertyMenuEntries.values.toList(); + default: + throw ArgumentError('Invalid menu entry type'); + } + } + + List buildMenuEntry(BaseEntry type) { + return createMenuEntry(type); + } +} diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/property_menu_entry.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/property_menu_entry.dart new file mode 100644 index 00000000..0a1cb85e --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_entry/property_menu_entry.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; + +enum AboutPropertyMenuEntries implements BaseEntry { + residents, + vehicles, + openedVisits, + petsHistory; + + @override + String get value { + switch (this) { + case AboutPropertyMenuEntries.openedVisits: + return 'FRE-HUB-OPENED-VISITS'; + case AboutPropertyMenuEntries.vehicles: + return 'FRE-HUB-VEHICLES'; + case AboutPropertyMenuEntries.residents: + return 'FRE-HUB-RESIDENTS'; + case AboutPropertyMenuEntries.petsHistory: + return 'FRE-HUB-PETS-HISTORY'; + default: + return ''; + } + } + + @override + IconData get icon { + switch (this) { + case AboutPropertyMenuEntries.residents: + return Icons.people; + case AboutPropertyMenuEntries.vehicles: + return Icons.directions_car; + case AboutPropertyMenuEntries.openedVisits: + return Icons.open_in_new; + case AboutPropertyMenuEntries.petsHistory: + return Icons.pets; + } + } + + @override + String get name { + switch (this) { + case AboutPropertyMenuEntries.residents: + return 'Residents'; + case AboutPropertyMenuEntries.vehicles: + return 'Vehicles'; + case AboutPropertyMenuEntries.openedVisits: + return 'Opened Visits'; + case AboutPropertyMenuEntries.petsHistory: + return 'Pets History'; + } + } + + @override + String get route { + switch (this) { + case AboutPropertyMenuEntries.residents: + return '/residentsOnThePropertyPage'; + case AboutPropertyMenuEntries.vehicles: + return '/vehiclesOnThePropertyPage'; + case AboutPropertyMenuEntries.openedVisits: + return '/openedVisitsPage'; + case AboutPropertyMenuEntries.petsHistory: + return '/petsOnThePropertyPage'; + } + } +} diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_factory/index.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_factory/index.dart new file mode 100644 index 00000000..aa113121 --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_factory/index.dart @@ -0,0 +1 @@ +export 'menu_factory.dart'; diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_factory/menu_factory.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_factory/menu_factory.dart new file mode 100644 index 00000000..b775544c --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_factory/menu_factory.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; + +class MenuFactory extends StatelessWidget { + final MenuView menuView; + final MenuEntries menuEntry; + final MenuItem menuItem; + + const MenuFactory({ + super.key, + required this.menuView, + required this.menuEntry, + required this.menuItem, + }); + + @override + Widget build(BuildContext context) { + return MenuViewFactory( + view: menuView, + item: menuItem, + expandable: false, + entry: menuEntry, + ); + } +} diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_item/index.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_item/index.dart new file mode 100644 index 00000000..d6f43bae --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_item/index.dart @@ -0,0 +1,4 @@ +export 'menu_item.dart'; +export 'menu_item_button.dart'; +export 'menu_item_card.dart'; +export 'menu_item_factory.dart'; diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item.dart new file mode 100644 index 00000000..6b2b37ba --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; + +enum MenuItem { + button, + card, + tile; + + MenuEntry getInstance(final Function() action, final String title, final IconData icon) { + switch (this) { + case MenuItem.button: + return MenuButtonWidget(action: action, title: title, icon: icon); + case MenuItem.card: + return MenuCardItem(action: action, title: title, icon: icon); + case MenuItem.tile: + return MenuCardItem(action: action, title: title, icon: icon); + } + } +} + +abstract class MenuEntry extends StatefulWidget { + const MenuEntry({ + super.key, + required this.action, + required this.title, + required this.icon, + }); + + final Function() action; + final String title; + final IconData icon; + + factory MenuEntry.create( + MenuItem type, { + Key? key, + required Function() action, + required String title, + required IconData icon, + }) { + return type.getInstance(action, title, icon); + } +} diff --git a/lib/components/atomic_components/menu_button_item/menu_button_item_widget.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_button.dart similarity index 91% rename from lib/components/atomic_components/menu_button_item/menu_button_item_widget.dart rename to lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_button.dart index d446d4a7..e8a69b01 100644 --- a/lib/components/atomic_components/menu_button_item/menu_button_item_widget.dart +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_button.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; -import 'package:hub/components/molecular_components/menu_item/menu_item.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; +import 'menu_item.dart'; + class MenuButtonWidget extends MenuEntry { const MenuButtonWidget({ super.key, @@ -23,7 +24,6 @@ class MenuButtonWidget extends MenuEntry { } class _MenuButtonWidgetState extends State { - get action => action; bool _isProcessing = false; @override @@ -44,7 +44,7 @@ class _MenuButtonWidgetState extends State { setState(() { _isProcessing = true; }); - await widget.action.call(); + widget.action.call(); setState(() { _isProcessing = false; }); @@ -60,10 +60,7 @@ class _MenuButtonWidgetState extends State { BoxShadow( blurRadius: 4.0, color: FlutterFlowTheme.of(context).customColor5, - offset: const Offset( - 0.0, - 2.0, - ), + offset: const Offset(0.0, 2.0), ) ], borderRadius: BorderRadius.circular(24.0), @@ -94,7 +91,7 @@ class _MenuButtonWidgetState extends State { child: Padding( padding: const EdgeInsets.only(left: 10.0), child: Text( - widget.title ?? '', + widget.title, overflow: TextOverflow.ellipsis, maxLines: 2, textAlign: TextAlign.start, @@ -102,7 +99,6 @@ class _MenuButtonWidgetState extends State { fontFamily: 'Nunito', color: FlutterFlowTheme.of(context).primaryText, fontSize: limitedFontSize, - letterSpacing: 0.0, fontWeight: FontWeight.w500, useGoogleFonts: GoogleFonts.asMap().containsKey('Nunito'), ), diff --git a/lib/components/atomic_components/menu_card_item/menu_card_item.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_card.dart similarity index 89% rename from lib/components/atomic_components/menu_card_item/menu_card_item.dart rename to lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_card.dart index c4c5cbaf..a0e226ec 100644 --- a/lib/components/atomic_components/menu_card_item/menu_card_item.dart +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_card.dart @@ -1,8 +1,9 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; -import 'package:hub/components/molecular_components/menu_item/menu_item.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; +import 'menu_item.dart'; + class MenuCardItem extends MenuEntry { const MenuCardItem({ super.key, @@ -23,7 +24,6 @@ class MenuCardItem extends MenuEntry { } class _MenuCardItemState extends State { - get action => action; bool _isProcessing = false; @override @@ -39,7 +39,7 @@ class _MenuCardItemState extends State { setState(() { _isProcessing = true; }); - await widget.action.call(); + widget.action.call(); setState(() { _isProcessing = false; }); @@ -65,7 +65,6 @@ class _MenuCardItemState extends State { alignment: const AlignmentDirectional(0.0, 0.0), child: Icon( widget.icon, - fill: null, color: FlutterFlowTheme.of(context).accent1, size: 24.0, ), @@ -74,13 +73,11 @@ class _MenuCardItemState extends State { ), Flexible( child: Text( - widget.title ?? '', - // overflow: TextOverflow.ellipsis, + widget.title, style: FlutterFlowTheme.of(context).titleLarge.override( fontFamily: 'Nunito', color: FlutterFlowTheme.of(context).primaryText, fontSize: 14.0, - letterSpacing: 0.0, fontWeight: FontWeight.w500, useGoogleFonts: GoogleFonts.asMap().containsKey('Nunito'), ), diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_factory.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_factory.dart new file mode 100644 index 00000000..aa92814d --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_item/menu_item_factory.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; + +class MenuItemFactory { + static MenuEntry createMenuItem( + MenuItem type, { + Key? key, + required Function() action, + required String title, + required IconData icon, + }) { + return MenuEntry.create(type, key: key, action: action, title: title, icon: icon); + } + + MenuEntry buildMenuItem( + MenuItem type, { + Key? key, + required Function() action, + required String title, + required IconData icon, + }) { + return createMenuItem(type, key: key, action: action, title: title, icon: icon); + } +} diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_view/index.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_view/index.dart new file mode 100644 index 00000000..43bd7226 --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_view/index.dart @@ -0,0 +1,3 @@ +export 'menu_list_view.dart'; +export 'menu_staggered_view.dart'; +export 'menu_view_factory.dart'; diff --git a/lib/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_view/menu_list_view.dart similarity index 56% rename from lib/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart rename to lib/shared/components/molecules/menu/presentation/widgets/menu_view/menu_list_view.dart index 88f6153e..9787f37c 100644 --- a/lib/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_view/menu_list_view.dart @@ -1,18 +1,22 @@ import 'package:flutter/material.dart'; -import 'package:hub/backend/schema/enums/enums.dart'; -import 'package:hub/components/molecular_components/menu_item/menu_item.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; import '/flutter_flow/flutter_flow_icon_button.dart'; import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_util.dart'; -import 'menu_list_view_component_model.dart'; -export 'menu_list_view_component_model.dart'; +enum MenuView { list_grid, list, grid } -/// +class MenuListViewModel extends FlutterFlowModel { + @override + void initState(BuildContext context) {} -class MenuListViewComponentWidget extends StatefulWidget { - const MenuListViewComponentWidget({ + @override + void dispose() {} +} + +class MenuListView extends StatefulWidget { + const MenuListView({ super.key, required this.changeMenuStyle, required this.expandable, @@ -22,16 +26,15 @@ class MenuListViewComponentWidget extends StatefulWidget { final bool expandable; final MenuItem item; - final List options; final Future Function()? changeMenuStyle; @override - State createState() => _MenuListViewComponentWidgetState(); + State createState() => _MenuListViewState(); } -class _MenuListViewComponentWidgetState extends State { - late MenuListViewComponentModel _model; +class _MenuListViewState extends State { + late MenuListViewModel _model; @override void setState(VoidCallback callback) { @@ -42,7 +45,7 @@ class _MenuListViewComponentWidgetState extends State MenuListViewComponentModel()); + _model = createModel(context, () => MenuListViewModel()); } @override @@ -60,52 +63,58 @@ class _MenuListViewComponentWidgetState extends State { + @override + void initState(BuildContext context) {} + + @override + void dispose() {} +} + +class MenuStaggeredView extends StatefulWidget { + const MenuStaggeredView({super.key, required this.changeMenuStyle, required this.expandable, required this.item, required this.options, required this.isGrid}); + + final bool expandable; + final MenuItem item; + final bool isGrid; + final List options; + final Future Function()? changeMenuStyle; + + @override + State createState() => _MenuStaggeredViewState(); +} + +class _MenuStaggeredViewState extends State { + late MenuStaggeredViewModel _model; + + @override + void setState(VoidCallback callback) { + super.setState(callback); + _model.onUpdate(); + } + + @override + void initState() { + super.initState(); + _model = createModel(context, () => MenuStaggeredViewModel()); + } + + @override + void dispose() { + _model.maybeDispose(); + + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final textScaler = MediaQuery.textScalerOf(context); + final double scaledFontSize = 14 * textScaler.scale(1); + final int crossAxisCount = _calculateCrossAxisCount(scaledFontSize); + + return Column( + children: [ + _buildGridView(crossAxisCount), + ].addToStart(const SizedBox(height: 30)).addToEnd(const SizedBox(height: 30)), + ); + } + + int _calculateCrossAxisCount(double scaledFontSize) { + if (scaledFontSize >= 26) return 1; + if (scaledFontSize >= 18) return 2; + return 3; + } + + Widget _buildGridView(int crossAxisCount) { + return GridView.builder( + physics: const NeverScrollableScrollPhysics(), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: crossAxisCount, + crossAxisSpacing: 10.0, + mainAxisSpacing: 10.0, + childAspectRatio: 1, + mainAxisExtent: 100, + ), + itemCount: widget.options.length, + padding: const EdgeInsets.symmetric(horizontal: 14), + shrinkWrap: true, + itemBuilder: (context, index) { + return Container( + height: MediaQuery.of(context).size.height, + width: MediaQuery.of(context).size.width, + alignment: Alignment.center, + padding: const EdgeInsets.all(0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(0), + color: Colors.transparent, + boxShadow: const [ + BoxShadow( + color: Colors.transparent, + blurRadius: 4, + offset: Offset(0, 2), + ), + ], + ), + child: Center(child: widget.options[index]), + ); + }, + ); + } + + Widget collapseExpandMethod(BuildContext context) { + if (widget.isGrid) { + return _buildCollapseButton(context); + } else { + return _buildExpandButton(context); + } + } + + Widget _buildCollapseButton(BuildContext context) { + return Align( + alignment: const AlignmentDirectional(0.0, 0.0), + child: Container( + decoration: const BoxDecoration( + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(0.0), + bottomRight: Radius.circular(0.0), + topLeft: Radius.circular(0.0), + topRight: Radius.circular(0.0), + ), + ), + alignment: const AlignmentDirectional(0.0, 0.0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + Text( + FFLocalizations.of(context).getVariableText( + enText: 'Minimize', + ptText: 'Minimizar', + ), + style: FlutterFlowTheme.of(context).title1.override( + fontFamily: 'Nunito', + color: FlutterFlowTheme.of(context).primaryText, + fontSize: 12.0, + fontWeight: FontWeight.w600, + fontStyle: FontStyle.normal, + ), + ), + Align( + alignment: const AlignmentDirectional(0.0, 0.0), + child: FlutterFlowIconButton( + borderColor: Colors.transparent, + borderRadius: 20.0, + borderWidth: 1.0, + buttonSize: 50.0, + fillColor: const Color(0x00FFFFFF), + icon: Icon( + Icons.keyboard_arrow_up_sharp, + color: FlutterFlowTheme.of(context).primary, + ), + onPressed: () async { + await widget.changeMenuStyle?.call(); + }, + ), + ), + ], + ), + ), + ); + } + + Widget _buildExpandButton(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + FFLocalizations.of(context).getVariableText( + enText: 'Expand', + ptText: 'Expandir', + ), + style: FlutterFlowTheme.of(context).title1.override( + fontFamily: 'Nunito', + color: FlutterFlowTheme.of(context).primaryText, + fontSize: 12.0, + fontWeight: FontWeight.w600, + fontStyle: FontStyle.normal, + ), + ), + Align( + alignment: const AlignmentDirectional(0.0, 0.0), + child: FlutterFlowIconButton( + borderColor: Colors.transparent, + borderRadius: 20.0, + borderWidth: 0.0, + buttonSize: 50.0, + fillColor: const Color(0x00FFFFFF), + icon: Icon( + Icons.keyboard_arrow_down_outlined, + color: FlutterFlowTheme.of(context).primary, + ), + onPressed: () async { + await widget.changeMenuStyle?.call(); + }, + ), + ), + ], + ); + } +} diff --git a/lib/shared/components/molecules/menu/presentation/widgets/menu_view/menu_view_factory.dart b/lib/shared/components/molecules/menu/presentation/widgets/menu_view/menu_view_factory.dart new file mode 100644 index 00000000..59464013 --- /dev/null +++ b/lib/shared/components/molecules/menu/presentation/widgets/menu_view/menu_view_factory.dart @@ -0,0 +1,87 @@ +import 'package:hub/flutter_flow/nav/nav.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; + +import 'package:hub/flutter_flow/flutter_flow_theme.dart'; +import 'package:hub/shared/components/molecules/modules/index.dart'; +import 'package:hub/shared/components/molecules/menu/index.dart'; + +class MenuViewFactory extends StatelessWidget { + final MenuView view; + final MenuItem item; + final bool expandable; + final MenuEntries entry; + + const MenuViewFactory({ + super.key, + required this.view, + required this.item, + required this.expandable, + required this.entry, + }); + + @override + Widget build(BuildContext context) { + return StreamBuilder( + stream: LicenseRepositoryImpl.stream, + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return const Center(child: CircularProgressIndicator()); + } else if (snapshot.hasError) { + return Center(child: Text('Error: ${snapshot.error}')); + } else if (!snapshot.hasData || snapshot.data! == false) { + return _buildLoadingIndicator(context); + } + return _buildMenuBloc(context); + }, + ); + } + + Widget buildMenu(BuildContext context) { + return _buildMenuBloc(context); + } + + Widget _buildLoadingIndicator(BuildContext context) { + return Center( + child: Padding( + padding: EdgeInsets.only(top: MediaQuery.of(context).size.height / 10), + child: CircularProgressIndicator( + backgroundColor: FlutterFlowTheme.of(navigatorKey.currentContext!).primaryBackground, + color: FlutterFlowTheme.of(navigatorKey.currentContext!).primary, + ), + ), + ); + } + + Widget _buildMenuBloc(BuildContext context) { + return BlocProvider( + create: (context) => MenuViewBloc( + style: view, + item: item, + menuOptions: entry.getValues, + expandable: expandable, + )..add(MenuViewEvent()), + child: BlocBuilder( + builder: (context, state) { + if (view == MenuView.list_grid) { + return MenuStaggeredView( + options: state.menuEntries, + expandable: expandable, + item: item, + changeMenuStyle: () async {}, + isGrid: state.isGrid, + ); + } else if (view == MenuView.list) { + return MenuListView( + options: state.menuEntries, + expandable: expandable, + item: item, + changeMenuStyle: () async {}, + ); + } + return const SizedBox(); + }, + ), + ); + } +} diff --git a/lib/shared/components/molecules/modules/data/data_sources/license_local_data_source.dart b/lib/shared/components/molecules/modules/data/data_sources/license_local_data_source.dart index 9f4dfdf2..0cd0f092 100644 --- a/lib/shared/components/molecules/modules/data/data_sources/license_local_data_source.dart +++ b/lib/shared/components/molecules/modules/data/data_sources/license_local_data_source.dart @@ -109,6 +109,7 @@ class LicenseLocalDataSourceImpl implements LicenseLocalDataSource { 'quantity': value['quantity'], }, conflictAlgorithm: ConflictAlgorithm.replace); + return; } Future d(String key) async { diff --git a/lib/shared/components/molecules/modules/data/data_sources/license_remote_data_source.dart b/lib/shared/components/molecules/modules/data/data_sources/license_remote_data_source.dart index cc6aa0df..69770f10 100644 --- a/lib/shared/components/molecules/modules/data/data_sources/license_remote_data_source.dart +++ b/lib/shared/components/molecules/modules/data/data_sources/license_remote_data_source.dart @@ -1,5 +1,6 @@ // ignore_for_file: curly_braces_in_flow_control_structures, prefer_is_empty +import 'dart:async'; import 'dart:developer'; import 'package:hub/backend/api_requests/api_calls.dart'; @@ -21,10 +22,9 @@ class LicenseRemoteDataSourceImpl implements LicenseRemoteDataSource { factory LicenseRemoteDataSourceImpl() => _instance; LicenseRemoteDataSourceImpl._internal(); - final _licenseSubject = BehaviorSubject>(); - - Stream> get licenseStream => _licenseSubject.stream; + final Completer _saveCompleter = Completer(); + @override Future processLicense() async { // if (body['key'] == Module.pets.value && body['display'] == 'VISIVEL') { // await LicenseHelper().s(Module.petsHistory.value, body); @@ -36,11 +36,12 @@ class LicenseRemoteDataSourceImpl implements LicenseRemoteDataSource { // await LicenseHelper().s(Module.aboutProperty.value, body); // } } - + @override Future cleanLicense() async { - _licenseSubject.add([]); + LicenseRepositoryImpl.license.add([]); } + @override Future setupLicense(Database database, bool isNewVersion) async { log('(B) => license'); @@ -52,13 +53,16 @@ class LicenseRemoteDataSourceImpl implements LicenseRemoteDataSource { await LicenseLocalDataSourceImpl().setByKey(activeModuleKey, 'VISIVEL'); if (isNewVersion == true) { await LicenseLocalDataSourceImpl().setByKey(disabledModuleKey, 'VISIVEL'); - await LicenseLocalDataSourceImpl().setByKey([ModuleEnum.aboutProperty.value], 'VISIVEL'); + await LicenseLocalDataSourceImpl().setByKey([Modules.aboutProperty.value], 'VISIVEL'); } else { await LicenseLocalDataSourceImpl().setByKey(disabledModuleKey, 'DESABILITADO'); } - _licenseSubject.add([...activeModuleKey]); + + LicenseRepositoryImpl.license.add([...activeModuleKey]); + _saveCompleter.complete(); } + @override Future fetchLicenses(bool isNewVersion) async { log('(A) => license'); try { @@ -79,16 +83,21 @@ class LicenseRemoteDataSourceImpl implements LicenseRemoteDataSource { if (responseBody == []) { await setupLicense(DatabaseStorage.database, isNewVersion); - _licenseSubject.add([]); + LicenseRepositoryImpl.license.add([]); return false; } + List> saveOperations = []; for (var element in responseBody) { if (licenseContainsKey(element['key'])) { - _saveModule(element); + saveOperations.add(_saveModule(element)); } } - _licenseSubject.add(responseBody); + await Future.wait(saveOperations); + + log('() => License stream add'); + LicenseRepositoryImpl.license.add(responseBody); + _saveCompleter.complete(); return true; } catch (e) { log('Erro ao obter licenças: $e'); @@ -97,8 +106,12 @@ class LicenseRemoteDataSourceImpl implements LicenseRemoteDataSource { } } + Future waitForSaveCompletion() async { + await _saveCompleter.future; + } + static bool licenseContainsKey(final String key) { - return ModuleEnum.values.map((e) => e.value).toList().contains(key); + return Modules.values.map((e) => e.value).toList().contains(key); } static Future _saveModule(final dynamic body) async { diff --git a/lib/shared/components/molecules/modules/data/repositories/license_repository_impl.dart b/lib/shared/components/molecules/modules/data/repositories/license_repository_impl.dart index 240d8733..2569d598 100644 --- a/lib/shared/components/molecules/modules/data/repositories/license_repository_impl.dart +++ b/lib/shared/components/molecules/modules/data/repositories/license_repository_impl.dart @@ -2,8 +2,11 @@ import 'package:hub/shared/components/molecules/modules/data/data_sources/licens import 'package:hub/shared/components/molecules/modules/data/data_sources/license_remote_data_source.dart'; import 'package:hub/shared/components/molecules/modules/domain/respositories/license_repository.dart'; import 'package:hub/shared/helpers/database/database_helper.dart'; +import 'package:rxdart/rxdart.dart'; import 'package:sqflite/sqflite.dart'; +typedef TModule = List; + class LicenseRepositoryImpl implements LicenseRepository { final LicenseLocalDataSource localDataSource = LicenseLocalDataSourceImpl(); final LicenseRemoteDataSource remoteDataSource = LicenseRemoteDataSourceImpl(); @@ -11,7 +14,8 @@ class LicenseRepositoryImpl implements LicenseRepository { LicenseRepositoryImpl(); - static get stream => LicenseRemoteDataSourceImpl().licenseStream; + static final license = BehaviorSubject(); + static get stream => license.stream; Future fetchLicense(bool isNewVersion) async { return await remoteDataSource.fetchLicenses(isNewVersion); diff --git a/lib/shared/components/molecules/modules/enums/active_modules.dart b/lib/shared/components/molecules/modules/domain/entities/active_modules.dart similarity index 84% rename from lib/shared/components/molecules/modules/enums/active_modules.dart rename to lib/shared/components/molecules/modules/domain/entities/active_modules.dart index 81c81234..a2ac143f 100644 --- a/lib/shared/components/molecules/modules/enums/active_modules.dart +++ b/lib/shared/components/molecules/modules/domain/entities/active_modules.dart @@ -4,10 +4,7 @@ import 'package:hub/shared/components/molecules/modules/index.dart'; enum ActiveModuleKey implements BaseModule { messages, liberations, - reservations, access, - pets, - orders, completeSchedule, providerSchedule, deliverySchedule, @@ -33,14 +30,8 @@ enum ActiveModuleKey implements BaseModule { return 'FRE-HUB-MESSAGES'; case ActiveModuleKey.liberations: return 'FRE-HUB-LIBERATIONS'; - case ActiveModuleKey.reservations: - return 'FRE-HUB-RESERVATIONS'; case ActiveModuleKey.access: return 'FRE-HUB-ACCESS'; - case ActiveModuleKey.pets: - return 'FRE-HUB-PETS'; - case ActiveModuleKey.orders: - return 'FRE-HUB-ORDERS'; case ActiveModuleKey.completeSchedule: return 'FRE-HUB-COMPLETE-SCHEDULE'; case ActiveModuleKey.providerSchedule: diff --git a/lib/shared/components/molecules/modules/domain/entities/base_module.dart b/lib/shared/components/molecules/modules/domain/entities/base_module.dart new file mode 100644 index 00000000..b67b25a9 --- /dev/null +++ b/lib/shared/components/molecules/modules/domain/entities/base_module.dart @@ -0,0 +1,10 @@ +import 'package:flutter/material.dart'; +import 'package:hub/flutter_flow/internationalization.dart'; +import 'package:hub/flutter_flow/nav/nav.dart'; + +abstract class BaseModule { + String get value; + String get name; + IconData get icon; + String get route; +} diff --git a/lib/shared/components/molecules/modules/enums/disabled_modules.dart b/lib/shared/components/molecules/modules/domain/entities/disabled_modules.dart similarity index 100% rename from lib/shared/components/molecules/modules/enums/disabled_modules.dart rename to lib/shared/components/molecules/modules/domain/entities/disabled_modules.dart diff --git a/lib/shared/components/molecules/modules/enums/inactive_modules.dart b/lib/shared/components/molecules/modules/domain/entities/inactive_modules.dart similarity index 77% rename from lib/shared/components/molecules/modules/enums/inactive_modules.dart rename to lib/shared/components/molecules/modules/domain/entities/inactive_modules.dart index ff2dbaa5..0be8edae 100644 --- a/lib/shared/components/molecules/modules/enums/inactive_modules.dart +++ b/lib/shared/components/molecules/modules/domain/entities/inactive_modules.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:hub/shared/components/molecules/modules/enums/enum_modules.dart'; import 'package:hub/shared/components/molecules/modules/index.dart'; enum InactiveModuleKey implements BaseModule { @@ -7,6 +6,10 @@ enum InactiveModuleKey implements BaseModule { vehicles, openedVisits, petsHistory, + pets, + orders, + fastpass, + reservations, aboutProperty; @override @@ -31,6 +34,12 @@ enum InactiveModuleKey implements BaseModule { return 'FRE-HUB-PETS-HISTORY'; case InactiveModuleKey.aboutProperty: return 'FRE-HUB-PROPERTY'; + case InactiveModuleKey.pets: + return 'FRE-HUB-PETS'; + case InactiveModuleKey.orders: + return 'FRE-HUB-ORDERS'; + case InactiveModuleKey.reservations: + return 'FRE-HUB-RESERVATIONS'; default: return ''; } diff --git a/lib/shared/components/molecules/modules/domain/entities/index.dart b/lib/shared/components/molecules/modules/domain/entities/index.dart index ccb3a9d2..609f59b0 100644 --- a/lib/shared/components/molecules/modules/domain/entities/index.dart +++ b/lib/shared/components/molecules/modules/domain/entities/index.dart @@ -1,2 +1,7 @@ +export 'active_modules.dart'; +export 'base_module.dart'; +export 'disabled_modules.dart'; +export 'inactive_modules.dart'; export 'license.dart'; export 'module.dart'; +export 'modules.dart'; diff --git a/lib/shared/components/molecules/modules/domain/entities/modules.dart b/lib/shared/components/molecules/modules/domain/entities/modules.dart new file mode 100644 index 00000000..0766112a --- /dev/null +++ b/lib/shared/components/molecules/modules/domain/entities/modules.dart @@ -0,0 +1,271 @@ +import 'package:flutter/material.dart'; +import 'package:hub/flutter_flow/internationalization.dart'; +import 'package:hub/flutter_flow/nav/nav.dart'; +import 'package:hub/shared/components/molecules/modules/index.dart'; + +enum Modules implements BaseModule { + providerSchedule, + deliverySchedule, + fastPass, + completeSchedule, + orders, + reservations, + visitors, + vehicles, + residents, + openedVisits, + qrCode, + pets, + access, + liberations, + messages, + aboutProperty, + petsHistory, + peopleOnTheProperty, + settings, + logout; + + @override + String get value { + switch (this) { + case Modules.messages: + return 'FRE-HUB-MESSAGES'; + case Modules.liberations: + return 'FRE-HUB-LIBERATIONS'; + case Modules.reservations: + return 'FRE-HUB-RESERVATIONS'; + case Modules.access: + return 'FRE-HUB-ACCESS'; + case Modules.openedVisits: + return 'FRE-HUB-OPENED-VISITS'; + case Modules.vehicles: + return 'FRE-HUB-VEHICLES'; + case Modules.residents: + return 'FRE-HUB-RESIDENTS'; + case Modules.pets: + return 'FRE-HUB-PETS'; + case Modules.orders: + return 'FRE-HUB-ORDERS'; + case Modules.completeSchedule: + return 'FRE-HUB-COMPLETE-SCHEDULE'; + case Modules.providerSchedule: + return 'FRE-HUB-AGE-PROV-PRESTADOR'; + case Modules.deliverySchedule: + return 'FRE-HUB-AGE-PROV-DELIVERY'; + case Modules.aboutProperty: + return 'FRE-HUB-PROPERTY'; + case Modules.fastPass: + return 'FRE-HUB-FASTPASS'; + case Modules.visitors: + return 'FRE-HUB-VISITORS'; + case Modules.qrCode: + return 'FRE-HUB-QRCODE'; + case Modules.peopleOnTheProperty: + return 'FRE-HUB-PEOPLE'; + case Modules.petsHistory: + return 'FRE-HUB-PETS-HISTORY'; + default: + return ''; + } + } + + @override + String get name { + switch (this) { + case Modules.messages: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Mensagens', + enText: 'Messages History', + ); + case Modules.liberations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Liberações', + enText: 'Liberations History', + ); + case Modules.reservations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Reservas', + enText: 'Reservations', + ); + case Modules.access: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Acessos', + enText: 'Access History', + ); + case Modules.openedVisits: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Visitas em Aberto', + enText: 'Opened Visits', + ); + case Modules.vehicles: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Veículos', + enText: 'Vehicles', + ); + case Modules.residents: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Moradores', + enText: 'Residents', + ); + case Modules.pets: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pets', + enText: 'Pets', + ); + case Modules.petsHistory: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pets', + enText: 'Pets', + ); + case Modules.peopleOnTheProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pessoas na Propriedade', + enText: 'People on the Property', + ); + case Modules.orders: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Minhas Encomendas', + enText: 'My Orders', + ); + case Modules.completeSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agenda Completa', + enText: 'Complete Schedule', + ); + case Modules.providerSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Prestadores', + enText: 'Schedule Providers', + ); + case Modules.deliverySchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Delivery', + enText: 'Schedule Delivery', + ); + case Modules.fastPass: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Fast Pass', + enText: 'Fast Pass', + ); + case Modules.qrCode: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'QRCode de Acesso', + enText: 'Access QRCode', + ); + case Modules.visitors: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Cadastrar Visitantes', + enText: 'Register Visitors', + ); + case Modules.aboutProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Sobre a Propriedade', + enText: 'About the Property', + ); + case Modules.settings: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Configurações', + enText: 'Settings', + ); + case Modules.logout: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Sair', + enText: 'Logout', + ); + } + } + + @override + IconData get icon { + switch (this) { + case Modules.messages: + return Icons.chat_outlined; + case Modules.liberations: + return Icons.how_to_reg_outlined; + case Modules.reservations: + return Icons.event_available; + case Modules.access: + return Icons.transfer_within_a_station_outlined; + case Modules.openedVisits: + return Icons.perm_contact_calendar; + case Modules.vehicles: + return Icons.directions_car; + case Modules.residents: + return Icons.groups; + case Modules.pets: + return Icons.pets; + case Modules.petsHistory: + return Icons.pets; + case Modules.peopleOnTheProperty: + return Icons.groups; + case Modules.orders: + return Icons.inventory_2_outlined; + case Modules.completeSchedule: + return Icons.event; + case Modules.providerSchedule: + return Icons.engineering_outlined; + case Modules.deliverySchedule: + return Icons.sports_motorsports_outlined; + case Modules.fastPass: + return Icons.attach_email_outlined; + case Modules.qrCode: + return Icons.qr_code; + case Modules.visitors: + return Icons.person_add_alt_1_outlined; + case Modules.aboutProperty: + return Icons.home; + case Modules.settings: + return Icons.settings; + case Modules.logout: + return Icons.logout; + } + } + + @override + String get route { + switch (this) { + case Modules.messages: + return '/messageHistoryPage'; + case Modules.liberations: + return '/liberationHistory'; + case Modules.reservations: + return '/reservation'; + case Modules.access: + return '/acessHistoryPage'; + case Modules.openedVisits: + return '/visitsOnThePropertyPage'; + case Modules.vehicles: + return '/vehiclesOnThePropertyPage'; + case Modules.residents: + return '/residentsOnThePropertyPage'; + case Modules.pets: + return '/petsPage'; + case Modules.petsHistory: + return '/petsHistoryPage'; + case Modules.peopleOnTheProperty: + return '/peopleOnThePropertyPage'; + case Modules.orders: + return '/packageOrder'; + case Modules.completeSchedule: + return '/scheduleCompleteVisitPage'; + case Modules.providerSchedule: + return '/provisionalSchedule'; + case Modules.aboutProperty: + return '/aboutProperty'; + case Modules.deliverySchedule: + return '/deliverySchedule'; + case Modules.fastPass: + return '/fastPassPage'; + case Modules.qrCode: + return '/qrCodePage'; + case Modules.visitors: + return '/registerVisitorPage'; + case Modules.settings: + return '/preferencesSettings'; + case Modules.logout: + return '/WelcomePage'; + default: + return ''; + } + } +} diff --git a/lib/shared/components/molecules/modules/enums/enum_modules.dart b/lib/shared/components/molecules/modules/enums/enum_modules.dart deleted file mode 100644 index c46ab43f..00000000 --- a/lib/shared/components/molecules/modules/enums/enum_modules.dart +++ /dev/null @@ -1,549 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:hub/flutter_flow/internationalization.dart'; -import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/shared/components/molecules/menu/index.dart'; - -abstract class BaseModule { - String get value; - String get name; - IconData get icon; - String get route; -} - -enum ModuleEnum implements BaseModule { - providerSchedule, - deliverySchedule, - fastPass, - completeSchedule, - orders, - reservations, - visitors, - vehicles, - residents, - openedVisits, - qrCode, - pets, - access, - liberations, - messages, - aboutProperty, - petsHistory, - peopleOnTheProperty, - settings, - logout; - - @override - String get value { - switch (this) { - case ModuleEnum.messages: - return 'FRE-HUB-MESSAGES'; - case ModuleEnum.liberations: - return 'FRE-HUB-LIBERATIONS'; - case ModuleEnum.reservations: - return 'FRE-HUB-RESERVATIONS'; - case ModuleEnum.access: - return 'FRE-HUB-ACCESS'; - case ModuleEnum.openedVisits: - return 'FRE-HUB-OPENED-VISITS'; - case ModuleEnum.vehicles: - return 'FRE-HUB-VEHICLES'; - case ModuleEnum.residents: - return 'FRE-HUB-RESIDENTS'; - case ModuleEnum.pets: - return 'FRE-HUB-PETS'; - case ModuleEnum.orders: - return 'FRE-HUB-ORDERS'; - case ModuleEnum.completeSchedule: - return 'FRE-HUB-COMPLETE-SCHEDULE'; - case ModuleEnum.providerSchedule: - return 'FRE-HUB-AGE-PROV-PRESTADOR'; - case ModuleEnum.deliverySchedule: - return 'FRE-HUB-AGE-PROV-DELIVERY'; - case ModuleEnum.aboutProperty: - return 'FRE-HUB-PROPERTY'; - case ModuleEnum.fastPass: - return 'FRE-HUB-FASTPASS'; - case ModuleEnum.visitors: - return 'FRE-HUB-VISITORS'; - case ModuleEnum.qrCode: - return 'FRE-HUB-QRCODE'; - case ModuleEnum.peopleOnTheProperty: - return 'FRE-HUB-PEOPLE'; - case ModuleEnum.petsHistory: - return 'FRE-HUB-PETS-HISTORY'; - default: - return ''; - } - } - - @override - String get name { - switch (this) { - case ModuleEnum.messages: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Consultar Mensagens', - enText: 'Messages History', - ); - case ModuleEnum.liberations: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Consultar Liberações', - enText: 'Liberations History', - ); - case ModuleEnum.reservations: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Reservas', - enText: 'Reservations', - ); - case ModuleEnum.access: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Consultar Acessos', - enText: 'Access History', - ); - case ModuleEnum.openedVisits: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Visitas em Aberto', - enText: 'Opened Visits', - ); - case ModuleEnum.vehicles: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Veículos', - enText: 'Vehicles', - ); - case ModuleEnum.residents: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Moradores', - enText: 'Residents', - ); - case ModuleEnum.pets: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Pets', - enText: 'Pets', - ); - case ModuleEnum.petsHistory: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Pets', - enText: 'Pets', - ); - case ModuleEnum.peopleOnTheProperty: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Pessoas na Propriedade', - enText: 'People on the Property', - ); - case ModuleEnum.orders: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Minhas Encomendas', - enText: 'My Orders', - ); - case ModuleEnum.completeSchedule: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Agenda Completa', - enText: 'Complete Schedule', - ); - case ModuleEnum.providerSchedule: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Agendar Prestadores', - enText: 'Schedule Providers', - ); - case ModuleEnum.deliverySchedule: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Agendar Delivery', - enText: 'Schedule Delivery', - ); - case ModuleEnum.fastPass: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Fast Pass', - enText: 'Fast Pass', - ); - case ModuleEnum.qrCode: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'QRCode de Acesso', - enText: 'Access QRCode', - ); - case ModuleEnum.visitors: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Cadastrar Visitantes', - enText: 'Register Visitors', - ); - case ModuleEnum.aboutProperty: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Sobre a Propriedade', - enText: 'About the Property', - ); - case ModuleEnum.settings: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Configurações', - enText: 'Settings', - ); - case ModuleEnum.logout: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Sair', - enText: 'Logout', - ); - } - } - - @override - IconData get icon { - switch (this) { - case ModuleEnum.messages: - return Icons.chat_outlined; - case ModuleEnum.liberations: - return Icons.how_to_reg_outlined; - case ModuleEnum.reservations: - return Icons.event_available; - case ModuleEnum.access: - return Icons.transfer_within_a_station_outlined; - case ModuleEnum.openedVisits: - return Icons.perm_contact_calendar; - case ModuleEnum.vehicles: - return Icons.directions_car; - case ModuleEnum.residents: - return Icons.groups; - case ModuleEnum.pets: - return Icons.pets; - case ModuleEnum.petsHistory: - return Icons.pets; - case ModuleEnum.peopleOnTheProperty: - return Icons.groups; - case ModuleEnum.orders: - return Icons.inventory_2_outlined; - case ModuleEnum.completeSchedule: - return Icons.event; - case ModuleEnum.providerSchedule: - return Icons.engineering_outlined; - case ModuleEnum.deliverySchedule: - return Icons.sports_motorsports_outlined; - case ModuleEnum.fastPass: - return Icons.attach_email_outlined; - case ModuleEnum.qrCode: - return Icons.qr_code; - case ModuleEnum.visitors: - return Icons.person_add_alt_1_outlined; - case ModuleEnum.aboutProperty: - return Icons.home; - case ModuleEnum.settings: - return Icons.settings; - case ModuleEnum.logout: - return Icons.logout; - } - } - - @override - String get route { - switch (this) { - case ModuleEnum.messages: - return '/messageHistoryPage'; - case ModuleEnum.liberations: - return '/liberationHistory'; - case ModuleEnum.reservations: - return '/reservation'; - case ModuleEnum.access: - return '/acessHistoryPage'; - case ModuleEnum.openedVisits: - return '/visitsOnThePropertyPage'; - case ModuleEnum.vehicles: - return '/vehiclesOnThePropertyPage'; - case ModuleEnum.residents: - return '/residentsOnThePropertyPage'; - case ModuleEnum.pets: - return '/petsPage'; - case ModuleEnum.petsHistory: - return '/petsHistoryPage'; - case ModuleEnum.peopleOnTheProperty: - return '/peopleOnThePropertyPage'; - case ModuleEnum.orders: - return '/packageOrder'; - case ModuleEnum.completeSchedule: - return '/scheduleCompleteVisitPage'; - case ModuleEnum.providerSchedule: - return '/provisionalSchedule'; - case ModuleEnum.aboutProperty: - return '/aboutProperty'; - case ModuleEnum.deliverySchedule: - return '/deliverySchedule'; - case ModuleEnum.fastPass: - return '/fastPassPage'; - case ModuleEnum.qrCode: - return '/qrCodePage'; - case ModuleEnum.visitors: - return '/registerVisitorPage'; - case ModuleEnum.settings: - return '/preferencesSettings'; - case ModuleEnum.logout: - return '/WelcomePage'; - default: - return ''; - } - } -} - -enum MenuEntries implements BaseEntry { - providerSchedule, - deliverySchedule, - fastPass, - completeSchedule, - orders, - reservations, - visitors, - vehicles, - residents, - openedVisits, - qrCode, - pets, - access, - liberations, - messages, - aboutProperty, - petsHistory, - peopleOnTheProperty, - settings, - logout; - - @override - String get value { - switch (this) { - case ModuleEnum.messages: - return 'FRE-HUB-MESSAGES'; - case ModuleEnum.liberations: - return 'FRE-HUB-LIBERATIONS'; - case ModuleEnum.reservations: - return 'FRE-HUB-RESERVATIONS'; - case ModuleEnum.access: - return 'FRE-HUB-ACCESS'; - case ModuleEnum.openedVisits: - return 'FRE-HUB-OPENED-VISITS'; - case ModuleEnum.vehicles: - return 'FRE-HUB-VEHICLES'; - case ModuleEnum.residents: - return 'FRE-HUB-RESIDENTS'; - case ModuleEnum.pets: - return 'FRE-HUB-PETS'; - case ModuleEnum.orders: - return 'FRE-HUB-ORDERS'; - case ModuleEnum.completeSchedule: - return 'FRE-HUB-COMPLETE-SCHEDULE'; - case ModuleEnum.providerSchedule: - return 'FRE-HUB-AGE-PROV-PRESTADOR'; - case ModuleEnum.deliverySchedule: - return 'FRE-HUB-AGE-PROV-DELIVERY'; - case ModuleEnum.aboutProperty: - return 'FRE-HUB-PROPERTY'; - case ModuleEnum.fastPass: - return 'FRE-HUB-FASTPASS'; - case ModuleEnum.visitors: - return 'FRE-HUB-VISITORS'; - case ModuleEnum.qrCode: - return 'FRE-HUB-QRCODE'; - case ModuleEnum.peopleOnTheProperty: - return 'FRE-HUB-PEOPLE'; - case ModuleEnum.petsHistory: - return 'FRE-HUB-PETS-HISTORY'; - default: - return ''; - } - } - - @override - String get name { - switch (this) { - case ModuleEnum.messages: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Consultar Mensagens', - enText: 'Messages History', - ); - case ModuleEnum.liberations: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Consultar Liberações', - enText: 'Liberations History', - ); - case ModuleEnum.reservations: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Reservas', - enText: 'Reservations', - ); - case ModuleEnum.access: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Consultar Acessos', - enText: 'Access History', - ); - case ModuleEnum.openedVisits: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Visitas em Aberto', - enText: 'Opened Visits', - ); - case ModuleEnum.vehicles: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Veículos', - enText: 'Vehicles', - ); - case ModuleEnum.residents: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Moradores', - enText: 'Residents', - ); - case ModuleEnum.pets: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Pets', - enText: 'Pets', - ); - case ModuleEnum.petsHistory: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Pets', - enText: 'Pets', - ); - case ModuleEnum.peopleOnTheProperty: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Pessoas na Propriedade', - enText: 'People on the Property', - ); - case ModuleEnum.orders: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Minhas Encomendas', - enText: 'My Orders', - ); - case ModuleEnum.completeSchedule: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Agenda Completa', - enText: 'Complete Schedule', - ); - case ModuleEnum.providerSchedule: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Agendar Prestadores', - enText: 'Schedule Providers', - ); - case ModuleEnum.deliverySchedule: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Agendar Delivery', - enText: 'Schedule Delivery', - ); - case ModuleEnum.fastPass: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Fast Pass', - enText: 'Fast Pass', - ); - case ModuleEnum.qrCode: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'QRCode de Acesso', - enText: 'Access QRCode', - ); - case ModuleEnum.visitors: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Cadastrar Visitantes', - enText: 'Register Visitors', - ); - case ModuleEnum.aboutProperty: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Sobre a Propriedade', - enText: 'About the Property', - ); - case ModuleEnum.settings: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Configurações', - enText: 'Settings', - ); - case ModuleEnum.logout: - return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( - ptText: 'Sair', - enText: 'Logout', - ); - default: - return ''; - } - } - - @override - IconData get icon { - switch (this) { - case ModuleEnum.messages: - return Icons.chat_outlined; - case ModuleEnum.liberations: - return Icons.how_to_reg_outlined; - case ModuleEnum.reservations: - return Icons.event_available; - case ModuleEnum.access: - return Icons.transfer_within_a_station_outlined; - case ModuleEnum.openedVisits: - return Icons.perm_contact_calendar; - case ModuleEnum.vehicles: - return Icons.directions_car; - case ModuleEnum.residents: - return Icons.groups; - case ModuleEnum.pets: - return Icons.pets; - case ModuleEnum.petsHistory: - return Icons.pets; - case ModuleEnum.peopleOnTheProperty: - return Icons.groups; - case ModuleEnum.orders: - return Icons.inventory_2_outlined; - case ModuleEnum.completeSchedule: - return Icons.event; - case ModuleEnum.providerSchedule: - return Icons.engineering_outlined; - case ModuleEnum.deliverySchedule: - return Icons.sports_motorsports_outlined; - case ModuleEnum.fastPass: - return Icons.attach_email_outlined; - case ModuleEnum.qrCode: - return Icons.qr_code; - case ModuleEnum.visitors: - return Icons.person_add_alt_1_outlined; - case ModuleEnum.aboutProperty: - return Icons.home; - case ModuleEnum.settings: - return Icons.settings; - case ModuleEnum.logout: - return Icons.logout; - default: - return Icons.error; - } - } - - @override - String get route { - switch (this) { - case ModuleEnum.messages: - return '/messageHistoryPage'; - case ModuleEnum.liberations: - return '/liberationHistory'; - case ModuleEnum.reservations: - return '/reservation'; - case ModuleEnum.access: - return '/acessHistoryPage'; - case ModuleEnum.openedVisits: - return '/visitsOnThePropertyPage'; - case ModuleEnum.vehicles: - return '/vehiclesOnThePropertyPage'; - case ModuleEnum.residents: - return '/residentsOnThePropertyPage'; - case ModuleEnum.pets: - return '/petsPage'; - case ModuleEnum.petsHistory: - return '/petsHistoryPage'; - case ModuleEnum.peopleOnTheProperty: - return '/peopleOnThePropertyPage'; - case ModuleEnum.orders: - return '/packageOrder'; - case ModuleEnum.completeSchedule: - return '/scheduleCompleteVisitPage'; - case ModuleEnum.providerSchedule: - return '/provisionalSchedule'; - case ModuleEnum.aboutProperty: - return '/aboutProperty'; - case ModuleEnum.deliverySchedule: - return '/deliverySchedule'; - case ModuleEnum.fastPass: - return '/fastPassPage'; - case ModuleEnum.qrCode: - return '/qrCodePage'; - case ModuleEnum.visitors: - return '/registerVisitorPage'; - case ModuleEnum.settings: - return '/preferencesSettings'; - case ModuleEnum.logout: - return '/WelcomePage'; - default: - return ''; - } - } -} diff --git a/lib/shared/components/molecules/modules/enums/index.dart b/lib/shared/components/molecules/modules/enums/index.dart deleted file mode 100644 index 77515664..00000000 --- a/lib/shared/components/molecules/modules/enums/index.dart +++ /dev/null @@ -1,4 +0,0 @@ -export 'active_modules.dart'; -export 'disabled_modules.dart'; -export 'enum_modules.dart'; -export 'inactive_modules.dart'; diff --git a/lib/shared/components/molecules/modules/index.dart b/lib/shared/components/molecules/modules/index.dart index d58702fc..aa560630 100644 --- a/lib/shared/components/molecules/modules/index.dart +++ b/lib/shared/components/molecules/modules/index.dart @@ -1,4 +1,3 @@ export 'data/index.dart'; export 'domain/index.dart'; export 'presentation/index.dart'; -export 'enums/index.dart'; diff --git a/lib/shared/components/molecules/modules/presentation/index.dart b/lib/shared/components/molecules/modules/presentation/index.dart index 48b6447a..688818c6 100644 --- a/lib/shared/components/molecules/modules/presentation/index.dart +++ b/lib/shared/components/molecules/modules/presentation/index.dart @@ -1,3 +1,2 @@ export 'blocs/index.dart'; -export 'pages/index.dart'; export 'widgets/index.dart'; diff --git a/lib/shared/enums/enum_menu.dart b/lib/shared/enums/enum_menu.dart new file mode 100644 index 00000000..fd0af8ca --- /dev/null +++ b/lib/shared/enums/enum_menu.dart @@ -0,0 +1,699 @@ +import 'package:flutter/material.dart'; +import 'package:hub/flutter_flow/internationalization.dart'; +import 'package:hub/flutter_flow/nav/nav.dart'; +import 'package:hub/shared/components/molecules/modules/index.dart'; + +enum Module implements BaseModule { + providerSchedule, + deliverySchedule, + fastPass, + completeSchedule, + orders, + reservations, + visitors, + vehicles, + residents, + openedVisits, + qrCode, + pets, + access, + liberations, + messages, + aboutProperty, + petsHistory, + peopleOnTheProperty, + settings, + logout; + + @override + String get value { + switch (this) { + case Module.messages: + return 'FRE-HUB-MESSAGES'; + case Module.liberations: + return 'FRE-HUB-LIBERATIONS'; + case Module.reservations: + return 'FRE-HUB-RESERVATIONS'; + case Module.access: + return 'FRE-HUB-ACCESS'; + case Module.openedVisits: + return 'FRE-HUB-OPENED-VISITS'; + case Module.vehicles: + return 'FRE-HUB-VEHICLES'; + case Module.residents: + return 'FRE-HUB-RESIDENTS'; + case Module.pets: + return 'FRE-HUB-PETS'; + case Module.orders: + return 'FRE-HUB-ORDERS'; + case Module.completeSchedule: + return 'FRE-HUB-COMPLETE-SCHEDULE'; + case Module.providerSchedule: + return 'FRE-HUB-AGE-PROV-PRESTADOR'; + case Module.deliverySchedule: + return 'FRE-HUB-AGE-PROV-DELIVERY'; + case Module.aboutProperty: + return 'FRE-HUB-PROPERTY'; + case Module.fastPass: + return 'FRE-HUB-FASTPASS'; + case Module.visitors: + return 'FRE-HUB-VISITORS'; + case Module.qrCode: + return 'FRE-HUB-QRCODE'; + case Module.peopleOnTheProperty: + return 'FRE-HUB-PEOPLE'; + case Module.petsHistory: + return 'FRE-HUB-PETS-HISTORY'; + default: + return ''; + } + } + + @override + String get name { + switch (this) { + case Module.messages: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Mensagens', + enText: 'Messages History', + ); + case Module.liberations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Liberações', + enText: 'Liberations History', + ); + case Module.reservations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Reservas', + enText: 'Reservations', + ); + case Module.access: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Acessos', + enText: 'Access History', + ); + case Module.openedVisits: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Visitas em Aberto', + enText: 'Opened Visits', + ); + case Module.vehicles: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Veículos', + enText: 'Vehicles', + ); + case Module.residents: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Moradores', + enText: 'Residents', + ); + case Module.pets: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pets', + enText: 'Pets', + ); + case Module.petsHistory: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pets', + enText: 'Pets', + ); + case Module.peopleOnTheProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pessoas na Propriedade', + enText: 'People on the Property', + ); + case Module.orders: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Minhas Encomendas', + enText: 'My Orders', + ); + case Module.completeSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agenda Completa', + enText: 'Complete Schedule', + ); + case Module.providerSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Prestadores', + enText: 'Schedule Providers', + ); + case Module.deliverySchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Delivery', + enText: 'Schedule Delivery', + ); + case Module.fastPass: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Fast Pass', + enText: 'Fast Pass', + ); + case Module.qrCode: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'QRCode de Acesso', + enText: 'Access QRCode', + ); + case Module.visitors: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Cadastrar Visitantes', + enText: 'Register Visitors', + ); + case Module.aboutProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Sobre a Propriedade', + enText: 'About the Property', + ); + case Module.settings: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Configurações', + enText: 'Settings', + ); + case Module.logout: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Sair', + enText: 'Logout', + ); + } + } + + @override + IconData get icon { + switch (this) { + case Module.messages: + return Icons.chat_outlined; + case Module.liberations: + return Icons.how_to_reg_outlined; + case Module.reservations: + return Icons.event_available; + case Module.access: + return Icons.transfer_within_a_station_outlined; + case Module.openedVisits: + return Icons.perm_contact_calendar; + case Module.vehicles: + return Icons.directions_car; + case Module.residents: + return Icons.groups; + case Module.pets: + return Icons.pets; + case Module.petsHistory: + return Icons.pets; + case Module.peopleOnTheProperty: + return Icons.groups; + case Module.orders: + return Icons.inventory_2_outlined; + case Module.completeSchedule: + return Icons.event; + case Module.providerSchedule: + return Icons.engineering_outlined; + case Module.deliverySchedule: + return Icons.sports_motorsports_outlined; + case Module.fastPass: + return Icons.attach_email_outlined; + case Module.qrCode: + return Icons.qr_code; + case Module.visitors: + return Icons.person_add_alt_1_outlined; + case Module.aboutProperty: + return Icons.home; + case Module.settings: + return Icons.settings; + case Module.logout: + return Icons.logout; + } + } + + @override + String get route { + switch (this) { + case Module.messages: + return '/messageHistoryPage'; + case Module.liberations: + return '/liberationHistory'; + case Module.reservations: + return '/reservation'; + case Module.access: + return '/acessHistoryPage'; + case Module.openedVisits: + return '/visitsOnThePropertyPage'; + case Module.vehicles: + return '/vehiclesOnThePropertyPage'; + case Module.residents: + return '/residentsOnThePropertyPage'; + case Module.pets: + return '/petsPage'; + case Module.petsHistory: + return '/petsHistoryPage'; + case Module.peopleOnTheProperty: + return '/peopleOnThePropertyPage'; + case Module.orders: + return '/packageOrder'; + case Module.completeSchedule: + return '/scheduleCompleteVisitPage'; + case Module.providerSchedule: + return '/provisionalSchedule'; + case Module.aboutProperty: + return '/aboutProperty'; + case Module.deliverySchedule: + return '/deliverySchedule'; + case Module.fastPass: + return '/fastPassPage'; + case Module.qrCode: + return '/qrCodePage'; + case Module.visitors: + return '/registerVisitorPage'; + case Module.settings: + return '/preferencesSettings'; + case Module.logout: + return '/WelcomePage'; + default: + return ''; + } + } +} + +enum HomeMenuEntries implements BaseModule { + providerSchedule, + deliverySchedule, + fastPass, + completeSchedule, + orders, + reservations, + visitors, + qrCode, + pets, + access, + liberations, + messages, + aboutProperty, + peopleOnTheProperty, + settings; + + @override + String get value { + switch (this) { + case HomeMenuEntries.messages: + return 'FRE-HUB-MESSAGES'; + case HomeMenuEntries.liberations: + return 'FRE-HUB-LIBERATIONS'; + case HomeMenuEntries.reservations: + return 'FRE-HUB-RESERVATIONS'; + case HomeMenuEntries.access: + return 'FRE-HUB-ACCESS'; + case HomeMenuEntries.pets: + return 'FRE-HUB-PETS'; + case HomeMenuEntries.orders: + return 'FRE-HUB-ORDERS'; + case HomeMenuEntries.completeSchedule: + return 'FRE-HUB-COMPLETE-SCHEDULE'; + case HomeMenuEntries.providerSchedule: + return 'FRE-HUB-AGE-PROV-PRESTADOR'; + case HomeMenuEntries.deliverySchedule: + return 'FRE-HUB-AGE-PROV-DELIVERY'; + case HomeMenuEntries.aboutProperty: + return 'FRE-HUB-PROPERTY'; + case HomeMenuEntries.fastPass: + return 'FRE-HUB-FASTPASS'; + case HomeMenuEntries.visitors: + return 'FRE-HUB-VISITORS'; + case HomeMenuEntries.qrCode: + return 'FRE-HUB-QRCODE'; + case HomeMenuEntries.peopleOnTheProperty: + return 'FRE-HUB-PEOPLE'; + default: + return ''; + } + } + + @override + String get name { + switch (this) { + case HomeMenuEntries.messages: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Mensagens', + enText: 'Messages History', + ); + case HomeMenuEntries.liberations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Liberações', + enText: 'Liberations History', + ); + case HomeMenuEntries.reservations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Reservas', + enText: 'Reservations', + ); + case HomeMenuEntries.access: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Acessos', + enText: 'Access History', + ); + case HomeMenuEntries.pets: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pets', + enText: 'Pets', + ); + case HomeMenuEntries.peopleOnTheProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pessoas na Propriedade', + enText: 'People on the Property', + ); + case HomeMenuEntries.orders: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Minhas Encomendas', + enText: 'My Orders', + ); + case HomeMenuEntries.completeSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agenda Completa', + enText: 'Complete Schedule', + ); + case HomeMenuEntries.providerSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Prestadores', + enText: 'Schedule Providers', + ); + case HomeMenuEntries.deliverySchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Delivery', + enText: 'Schedule Delivery', + ); + case HomeMenuEntries.fastPass: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Fast Pass', + enText: 'Fast Pass', + ); + case HomeMenuEntries.qrCode: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'QRCode de Acesso', + enText: 'Access QRCode', + ); + case HomeMenuEntries.visitors: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Cadastrar Visitantes', + enText: 'Register Visitors', + ); + case HomeMenuEntries.aboutProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Sobre a Propriedade', + enText: 'About the Property', + ); + case HomeMenuEntries.settings: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Configurações', + enText: 'Settings', + ); + } + } + + @override + IconData get icon { + switch (this) { + case HomeMenuEntries.messages: + return Icons.chat_outlined; + case HomeMenuEntries.liberations: + return Icons.how_to_reg_outlined; + case HomeMenuEntries.reservations: + return Icons.event_available; + case HomeMenuEntries.access: + return Icons.transfer_within_a_station_outlined; + case HomeMenuEntries.pets: + return Icons.pets; + case HomeMenuEntries.peopleOnTheProperty: + return Icons.groups; + case HomeMenuEntries.orders: + return Icons.inventory_2_outlined; + case HomeMenuEntries.completeSchedule: + return Icons.event; + case HomeMenuEntries.providerSchedule: + return Icons.engineering_outlined; + case HomeMenuEntries.deliverySchedule: + return Icons.sports_motorsports_outlined; + case HomeMenuEntries.fastPass: + return Icons.attach_email_outlined; + case HomeMenuEntries.qrCode: + return Icons.qr_code; + case HomeMenuEntries.visitors: + return Icons.person_add_alt_1_outlined; + case HomeMenuEntries.aboutProperty: + return Icons.home; + case HomeMenuEntries.settings: + return Icons.settings; + } + } + + @override + String get route { + switch (this) { + case HomeMenuEntries.messages: + return '/messageHistoryPage'; + case HomeMenuEntries.liberations: + return '/liberationHistory'; + case HomeMenuEntries.reservations: + return '/reservation'; + case HomeMenuEntries.access: + return '/acessHistoryPage'; + case HomeMenuEntries.pets: + return '/petsPage'; + case HomeMenuEntries.peopleOnTheProperty: + return '/peopleOnThePropertyPage'; + case HomeMenuEntries.orders: + return '/packageOrder'; + case HomeMenuEntries.completeSchedule: + return '/scheduleCompleteVisitPage'; + case HomeMenuEntries.providerSchedule: + return '/provisionalSchedule'; + case HomeMenuEntries.aboutProperty: + return '/aboutProperty'; + case HomeMenuEntries.deliverySchedule: + return '/deliverySchedule'; + case HomeMenuEntries.fastPass: + return '/fastPassPage'; + case HomeMenuEntries.qrCode: + return '/qrCodePage'; + case HomeMenuEntries.visitors: + return '/registerVisitorPage'; + case HomeMenuEntries.settings: + return '/preferencesSettings'; + default: + return ''; + } + } +} + +enum DrawerMenuEntries implements BaseModule { + providerSchedule, + deliverySchedule, + fastPass, + completeSchedule, + orders, + reservations, + visitors, + qrCode, + pets, + access, + liberations, + messages, + aboutProperty, + peopleOnTheProperty, + settings, + logout; + + @override + String get value { + switch (this) { + case DrawerMenuEntries.messages: + return 'FRE-HUB-MESSAGES'; + case DrawerMenuEntries.liberations: + return 'FRE-HUB-LIBERATIONS'; + case DrawerMenuEntries.reservations: + return 'FRE-HUB-RESERVATIONS'; + case DrawerMenuEntries.access: + return 'FRE-HUB-ACCESS'; + case DrawerMenuEntries.pets: + return 'FRE-HUB-PETS'; + case DrawerMenuEntries.orders: + return 'FRE-HUB-ORDERS'; + case DrawerMenuEntries.completeSchedule: + return 'FRE-HUB-COMPLETE-SCHEDULE'; + case DrawerMenuEntries.providerSchedule: + return 'FRE-HUB-AGE-PROV-PRESTADOR'; + case DrawerMenuEntries.deliverySchedule: + return 'FRE-HUB-AGE-PROV-DELIVERY'; + case DrawerMenuEntries.aboutProperty: + return 'FRE-HUB-PROPERTY'; + case DrawerMenuEntries.fastPass: + return 'FRE-HUB-FASTPASS'; + case DrawerMenuEntries.visitors: + return 'FRE-HUB-VISITORS'; + case DrawerMenuEntries.qrCode: + return 'FRE-HUB-QRCODE'; + case DrawerMenuEntries.peopleOnTheProperty: + return 'FRE-HUB-PEOPLE'; + default: + return ''; + } + } + + @override + String get name { + switch (this) { + case DrawerMenuEntries.messages: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Mensagens', + enText: 'Messages History', + ); + case DrawerMenuEntries.liberations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Liberações', + enText: 'Liberations History', + ); + case DrawerMenuEntries.reservations: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Reservas', + enText: 'Reservations', + ); + case DrawerMenuEntries.access: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Consultar Acessos', + enText: 'Access History', + ); + case DrawerMenuEntries.pets: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pets', + enText: 'Pets', + ); + case DrawerMenuEntries.peopleOnTheProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Pessoas na Propriedade', + enText: 'People on the Property', + ); + case DrawerMenuEntries.orders: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Minhas Encomendas', + enText: 'My Orders', + ); + case DrawerMenuEntries.completeSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agenda Completa', + enText: 'Complete Schedule', + ); + case DrawerMenuEntries.providerSchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Prestadores', + enText: 'Schedule Providers', + ); + case DrawerMenuEntries.deliverySchedule: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Agendar Delivery', + enText: 'Schedule Delivery', + ); + case DrawerMenuEntries.fastPass: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Fast Pass', + enText: 'Fast Pass', + ); + case DrawerMenuEntries.qrCode: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'QRCode de Acesso', + enText: 'Access QRCode', + ); + case DrawerMenuEntries.visitors: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Cadastrar Visitantes', + enText: 'Register Visitors', + ); + case DrawerMenuEntries.aboutProperty: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Sobre a Propriedade', + enText: 'About the Property', + ); + case DrawerMenuEntries.settings: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Configurações', + enText: 'Settings', + ); + case DrawerMenuEntries.logout: + return FFLocalizations.of(navigatorKey.currentContext!).getVariableText( + ptText: 'Sair', + enText: 'Logout', + ); + } + } + + @override + IconData get icon { + switch (this) { + case DrawerMenuEntries.messages: + return Icons.chat_outlined; + case DrawerMenuEntries.liberations: + return Icons.how_to_reg_outlined; + case DrawerMenuEntries.reservations: + return Icons.event_available; + case DrawerMenuEntries.access: + return Icons.transfer_within_a_station_outlined; + case DrawerMenuEntries.pets: + return Icons.pets; + case DrawerMenuEntries.peopleOnTheProperty: + return Icons.groups; + case DrawerMenuEntries.orders: + return Icons.inventory_2_outlined; + case DrawerMenuEntries.completeSchedule: + return Icons.event; + case DrawerMenuEntries.providerSchedule: + return Icons.engineering_outlined; + case DrawerMenuEntries.deliverySchedule: + return Icons.sports_motorsports_outlined; + case DrawerMenuEntries.fastPass: + return Icons.attach_email_outlined; + case DrawerMenuEntries.qrCode: + return Icons.qr_code; + case DrawerMenuEntries.visitors: + return Icons.person_add_alt_1_outlined; + case DrawerMenuEntries.aboutProperty: + return Icons.home; + case DrawerMenuEntries.settings: + return Icons.settings; + case DrawerMenuEntries.logout: + return Icons.exit_to_app; + } + } + + @override + String get route { + switch (this) { + case DrawerMenuEntries.messages: + return '/messageHistoryPage'; + case DrawerMenuEntries.liberations: + return '/liberationHistory'; + case DrawerMenuEntries.reservations: + return '/reservation'; + case DrawerMenuEntries.access: + return '/acessHistoryPage'; + case DrawerMenuEntries.pets: + return '/petsPage'; + case DrawerMenuEntries.peopleOnTheProperty: + return '/peopleOnThePropertyPage'; + case DrawerMenuEntries.orders: + return '/packageOrder'; + case DrawerMenuEntries.completeSchedule: + return '/scheduleCompleteVisitPage'; + case DrawerMenuEntries.providerSchedule: + return '/provisionalSchedule'; + case DrawerMenuEntries.aboutProperty: + return '/aboutProperty'; + case DrawerMenuEntries.deliverySchedule: + return '/deliverySchedule'; + case DrawerMenuEntries.fastPass: + return '/fastPassPage'; + case DrawerMenuEntries.qrCode: + return '/qrCodePage'; + case DrawerMenuEntries.visitors: + return '/registerVisitorPage'; + case DrawerMenuEntries.settings: + return '/preferencesSettings'; + case DrawerMenuEntries.logout: + return '/WelcomePage'; + default: + return ''; + } + } +} diff --git a/lib/shared/helpers/database/database_helper.dart b/lib/shared/helpers/database/database_helper.dart index 15344451..1311fbdc 100644 --- a/lib/shared/helpers/database/database_helper.dart +++ b/lib/shared/helpers/database/database_helper.dart @@ -1,13 +1,13 @@ -import 'package:hub/shared/helpers/license/license_helper.dart'; +import 'package:hub/shared/components/molecules/modules/data/data_sources/license_local_data_source.dart'; +import 'package:hub/shared/components/molecules/modules/data/repositories/license_repository_impl.dart'; import 'package:hub/shared/helpers/storage/keychain_storage.dart'; -import 'package:hub/shared/services/license/license_service.dart'; import 'package:sqflite/sqflite.dart'; import 'package:path/path.dart'; import 'dart:developer'; class DatabaseStorage { static final String _dbName = 'database.db'; - static final int _dbVersion = 2; + static final int _dbVersion = 3; static final DatabaseStorage instance = DatabaseStorage._internal(); factory DatabaseStorage() => instance; @@ -32,22 +32,39 @@ class DatabaseStorage { onUpgrade: _onUpgrade, onDowngrade: _onDowngrade, ); - await LicenseService().setupLicense(database, false); + await LicenseRepositoryImpl().setupLicense(false); isInitialized = true; } Future _onCreate(Database database, int version) async { log('Creating database...'); - await database.execute(KeychainHelper.createTableQuery); - await database.execute(LicenseHelper.createTableQuery); + await database.execute(KeychainHelper.createKeychainTable); + await database.execute(LicenseLocalDataSourceImpl.createLicenseTable); + if (version >= 2) { + await database.execute(LicenseLocalDataSourceImpl.updatePetsHistoryTrigger); + } + if (version >= 3) { + await database.execute(LicenseLocalDataSourceImpl.updateDisplayTrigger); + } } Future _onUpgrade(Database database, int oldVersion, int newVersion) async { log('Upgrading database from version $oldVersion to $newVersion...'); - if (oldVersion < 2) { - await database.execute(LicenseHelper.createTableQuery); + if (oldVersion < 2 && newVersion >= 2) { + await database.execute(LicenseLocalDataSourceImpl.updatePetsHistoryTrigger); + } + if (oldVersion < 3 && newVersion >= 3) { + await database.execute(LicenseLocalDataSourceImpl.updateDisplayTrigger); } } - Future _onDowngrade(Database database, int oldVersion, int newVersion) async {} + Future _onDowngrade(Database database, int oldVersion, int newVersion) async { + log('Downgrading database from version $oldVersion to $newVersion...'); + if (oldVersion >= 3 && newVersion < 3) { + await database.execute(LicenseLocalDataSourceImpl.dropDisplayTrigger); + } + if (oldVersion >= 2 && newVersion < 2) { + await database.execute(LicenseLocalDataSourceImpl.dropPetsHistoryTrigger); + } + } } diff --git a/lib/shared/helpers/license/license_helper.dart b/lib/shared/helpers/license/license_helper.dart deleted file mode 100644 index 9ce5c8b8..00000000 --- a/lib/shared/helpers/license/license_helper.dart +++ /dev/null @@ -1,443 +0,0 @@ -import 'dart:developer'; - -import 'package:flutter/material.dart'; -import 'package:hub/flutter_flow/internationalization.dart'; -import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/shared/helpers/database/database_helper.dart'; -import 'package:hub/shared/helpers/storage/base_storage.dart'; -import 'package:sqflite/sqflite.dart'; - -enum InactiveModuleKey { - residents, - vehicles, - openedVisits, - petsHistory, - aboutProperty, -} - -extension InactiveModuleKeyExtension on InactiveModuleKey { - String get value { - switch (this) { - case InactiveModuleKey.openedVisits: - return 'FRE-HUB-OPENED-VISITS'; - case InactiveModuleKey.vehicles: - return 'FRE-HUB-VEHICLES'; - case InactiveModuleKey.residents: - return 'FRE-HUB-RESIDENTS'; - case InactiveModuleKey.petsHistory: - return 'FRE-HUB-PETS-HISTORY'; - case InactiveModuleKey.aboutProperty: - return 'FRE-HUB-PROPERTY'; - default: - return ''; - } - } -} - -enum DisabledModuleKey { - fastPass, -} - -extension DisabledModuleKeyExtension on DisabledModuleKey { - String get value { - switch (this) { - case DisabledModuleKey.fastPass: - return 'FRE-HUB-FASTPASS'; - - default: - return ''; - } - } -} - -enum ActiveModuleKey { - messages, - liberations, - reservations, - access, - pets, - orders, - completeSchedule, - providerSchedule, - deliverySchedule, - qrCode, - visitors, - peopleOnTheProperty, - settings, - logout, -} - -extension ActiveModuleKeyExtension on ActiveModuleKey { - String get value { - switch (this) { - case ActiveModuleKey.messages: - return 'FRE-HUB-MESSAGES'; - case ActiveModuleKey.liberations: - return 'FRE-HUB-LIBERATIONS'; - case ActiveModuleKey.reservations: - return 'FRE-HUB-RESERVATIONS'; - case ActiveModuleKey.access: - return 'FRE-HUB-ACCESS'; - case ActiveModuleKey.pets: - return 'FRE-HUB-PETS'; - case ActiveModuleKey.orders: - return 'FRE-HUB-ORDERS'; - case ActiveModuleKey.completeSchedule: - return 'FRE-HUB-COMPLETE-SCHEDULE'; - case ActiveModuleKey.providerSchedule: - return 'FRE-HUB-AGE-PROV-PRESTADOR'; - case ActiveModuleKey.deliverySchedule: - return 'FRE-HUB-AGE-PROV-DELIVERY'; - case ActiveModuleKey.visitors: - return 'FRE-HUB-VISITORS'; - case ActiveModuleKey.qrCode: - return 'FRE-HUB-QRCODE'; - case ActiveModuleKey.peopleOnTheProperty: - return 'FRE-HUB-PEOPLE'; - default: - return ''; - } - } -} - -enum Module { - providerSchedule, - deliverySchedule, - fastPass, - completeSchedule, - orders, - reservations, - visitors, - vehicles, - residents, - openedVisits, - qrCode, - pets, - access, - liberations, - messages, - aboutProperty, - petsHistory, - peopleOnTheProperty, - settings, - logout, -} - -extension LicenseKeyExtension on Module { - String get value { - switch (this) { - case Module.messages: - return 'FRE-HUB-MESSAGES'; - case Module.liberations: - return 'FRE-HUB-LIBERATIONS'; - case Module.reservations: - return 'FRE-HUB-RESERVATIONS'; - case Module.access: - return 'FRE-HUB-ACCESS'; - case Module.openedVisits: - return 'FRE-HUB-OPENED-VISITS'; - case Module.vehicles: - return 'FRE-HUB-VEHICLES'; - case Module.residents: - return 'FRE-HUB-RESIDENTS'; - case Module.pets: - return 'FRE-HUB-PETS'; - case Module.orders: - return 'FRE-HUB-ORDERS'; - case Module.completeSchedule: - return 'FRE-HUB-COMPLETE-SCHEDULE'; - case Module.providerSchedule: - return 'FRE-HUB-AGE-PROV-PRESTADOR'; - case Module.deliverySchedule: - return 'FRE-HUB-AGE-PROV-DELIVERY'; - case Module.aboutProperty: - return 'FRE-HUB-PROPERTY'; - case Module.fastPass: - return 'FRE-HUB-FASTPASS'; - case Module.visitors: - return 'FRE-HUB-VISITORS'; - case Module.qrCode: - return 'FRE-HUB-QRCODE'; - case Module.peopleOnTheProperty: - return 'FRE-HUB-PEOPLE'; - case Module.petsHistory: - return 'FRE-HUB-PETS-HISTORY'; - default: - return ''; - } - } - - String get name { - switch (this) { - case Module.messages: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Consultar Mensagens', - enText: 'Messages History', - ); - case Module.liberations: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Consultar Liberações', - enText: 'Liberations History', - ); - case Module.reservations: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Reservas', - enText: 'Reservations', - ); - case Module.access: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Consultar Acessos', - enText: 'Access History', - ); - case Module.openedVisits: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Visitas em Aberto', - enText: 'Opened Visits', - ); - case Module.vehicles: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Veículos', - enText: 'Vehicles', - ); - case Module.residents: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Moradores', - enText: 'Residents', - ); - case Module.pets: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Pets', - enText: 'Pets', - ); - case Module.petsHistory: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Pets', - enText: 'Pets', - ); - case Module.peopleOnTheProperty: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Pessoas na Propriedade', - enText: 'People on the Property', - ); - case Module.orders: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Minhas Encomendas', - enText: 'My Orders', - ); - case Module.completeSchedule: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Agenda Completa', - enText: 'Complete Schedule', - ); - case Module.providerSchedule: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Agendar Prestadores', - enText: 'Schedule Providers', - ); - case Module.deliverySchedule: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Agendar Delivery', - enText: 'Schedule Delivery', - ); - case Module.fastPass: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Fast Pass', - enText: 'Fast Pass', - ); - case Module.qrCode: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'QRCode de Acesso', - enText: 'Access QRCode', - ); - case Module.visitors: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Cadastrar Visitantes', - enText: 'Register Visitors', - ); - case Module.aboutProperty: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Sobre a Propriedade', - enText: 'About the Property', - ); - case Module.settings: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Configurações', - enText: 'Settings', - ); - case Module.logout: - return FFLocalizations.of(key.currentContext!).getVariableText( - ptText: 'Sair', - enText: 'Logout', - ); - } - } - - IconData get icon { - switch (this) { - case Module.messages: - return Icons.chat_outlined; - case Module.liberations: - return Icons.how_to_reg_outlined; - case Module.reservations: - return Icons.event_available; - case Module.access: - return Icons.transfer_within_a_station_outlined; - case Module.openedVisits: - return Icons.perm_contact_calendar; - case Module.vehicles: - return Icons.directions_car; - case Module.residents: - return Icons.groups; - case Module.pets: - return Icons.pets; - case Module.petsHistory: - return Icons.pets; - case Module.peopleOnTheProperty: - return Icons.groups; - case Module.orders: - return Icons.inventory_2_outlined; - case Module.completeSchedule: - return Icons.event; - case Module.providerSchedule: - return Icons.engineering_outlined; - case Module.deliverySchedule: - return Icons.sports_motorsports_outlined; - case Module.fastPass: - return Icons.attach_email_outlined; - case Module.qrCode: - return Icons.qr_code; - case Module.visitors: - return Icons.person_add_alt_1_outlined; - case Module.aboutProperty: - return Icons.home; - case Module.settings: - return Icons.settings; - case Module.logout: - return Icons.logout; - } - } - - String get route { - switch (this) { - case Module.messages: - return '/messageHistoryPage'; - case Module.liberations: - return '/liberationHistory'; - case Module.reservations: - return '/reservation'; - case Module.access: - return '/acessHistoryPage'; - case Module.openedVisits: - return '/visitsOnThePropertyPage'; - case Module.vehicles: - return '/vehiclesOnThePropertyPage'; - case Module.residents: - return '/residentsOnThePropertyPage'; - case Module.pets: - return '/petsPage'; - case Module.petsHistory: - return '/petsHistoryPage'; - case Module.peopleOnTheProperty: - return '/peopleOnThePropertyPage'; - case Module.orders: - return '/packageOrder'; - case Module.completeSchedule: - return '/scheduleCompleteVisitPage'; - case Module.providerSchedule: - return '/provisionalSchedule'; - case Module.aboutProperty: - return '/aboutProperty'; - case Module.deliverySchedule: - return '/deliverySchedule'; - case Module.fastPass: - return '/fastPassPage'; - case Module.qrCode: - return '/qrCodePage'; - case Module.visitors: - return '/registerVisitorPage'; - case Module.settings: - return '/preferencesSettings'; - case Module.logout: - return '/WelcomePage'; - default: - return ''; - } - } -} - -class LicenseHelper { - static final LicenseHelper _instance = LicenseHelper._internal(); - - factory LicenseHelper() => _instance; - - LicenseHelper._internal(); - - static const String tableLicense = 'license'; - - static String get createTableQuery => ''' - CREATE TABLE $tableLicense ( - key TEXT UNIQUE, - display TEXT, - expirationDate TEXT, - startDate TEXT, - quantity TEXT - ); - '''; - - Future init() async { - await DatabaseStorage.instance.init(); - } - - Future setByKey(final List key, final String display) async { - for (var element in key) { - log('setByKey($element, $display)'); - await s(element, { - 'display': display, - 'expirationDate': '', - 'startDate': '', - 'quantity': '', - }); - } - } - - Future isNewVersion() async { - var response = await DatabaseStorage.database.query(tableLicense, where: 'key = ?', whereArgs: [KeychainStorageKey.isNewVersion.value], columns: ['display']); - if (response.isEmpty) { - return false; - } - log('isNewVersion(): ${response.first['display']}'); - return response.first['display'] == 'true'; - } - - Future g(String key) async { - var response = await DatabaseStorage.database.query(tableLicense, where: 'key = ?', whereArgs: [key]); - if (response.isEmpty) { - return null; - } - return response.first.toString(); - } - - Future s(String key, T value) async { - log('setLicense($key, $value)'); - value as Map; - - await DatabaseStorage.database.insert( - tableLicense, - { - 'key': key, - 'display': value['display'], - 'expirationDate': value['expirationDate'], - 'startDate': value['startDate'], - 'quantity': value['quantity'], - }, - conflictAlgorithm: ConflictAlgorithm.replace); - } - - Future d(String key) async { - await DatabaseStorage.database.delete(tableLicense, where: 'key = ?', whereArgs: [key]); - } - - Future c() async { - await DatabaseStorage.database.delete(tableLicense); - } -} diff --git a/lib/shared/helpers/storage/keychain_storage.dart b/lib/shared/helpers/storage/keychain_storage.dart index 4ddd3587..d41cd1e4 100644 --- a/lib/shared/helpers/storage/keychain_storage.dart +++ b/lib/shared/helpers/storage/keychain_storage.dart @@ -12,7 +12,7 @@ class KeychainHelper implements BaseStorage { static const String tableKeychain = 'keychain'; bool _isInitialized = false; - static String get createTableQuery => ''' + static String get createKeychainTable => ''' CREATE TABLE $tableKeychain ( key TEXT UNIQUE, value TEXT, @@ -22,6 +22,7 @@ class KeychainHelper implements BaseStorage { createdAt TEXT ); '''; + static String get deleteKeychainTable => 'DROP TABLE IF EXISTS $tableKeychain;'; @override Future init() async { diff --git a/lib/shared/services/deeplink/deep_link_service.dart b/lib/shared/services/deeplink/deep_link_service.dart index f24c6093..3bc1b4c4 100644 --- a/lib/shared/services/deeplink/deep_link_service.dart +++ b/lib/shared/services/deeplink/deep_link_service.dart @@ -57,13 +57,13 @@ class DeepLinkService { try { WidgetsBinding.instance.addPostFrameCallback((_) async { await showModalBottomSheet( - context: key.currentContext!, + context: navigatorKey.currentContext!, builder: (context) => Padding( padding: MediaQuery.viewInsetsOf(context), child: ForgotPasswordScreen(email: email, token: token), ), isScrollControlled: true, - backgroundColor: FlutterFlowTheme.of(key.currentContext!).primaryBackground, + backgroundColor: FlutterFlowTheme.of(navigatorKey.currentContext!).primaryBackground, showDragHandle: true, useSafeArea: true, enableDrag: true, diff --git a/lib/shared/services/keychain/keychain_service.dart b/lib/shared/services/keychain/keychain_service.dart deleted file mode 100644 index a5497f9d..00000000 --- a/lib/shared/services/keychain/keychain_service.dart +++ /dev/null @@ -1,5 +0,0 @@ -class KeychainService { - static final KeychainService _instance = KeychainService._internal(); - factory KeychainService() => _instance; - KeychainService._internal(); -} diff --git a/lib/shared/services/license/license_service.dart b/lib/shared/services/license/license_service.dart deleted file mode 100644 index b6180934..00000000 --- a/lib/shared/services/license/license_service.dart +++ /dev/null @@ -1,103 +0,0 @@ -// ignore_for_file: curly_braces_in_flow_control_structures, prefer_is_empty - -import 'dart:developer'; - -import 'package:hub/backend/api_requests/api_calls.dart'; -import 'package:hub/pages/about_property_page/about_property_model.dart'; -import 'package:hub/pages/about_property_page/about_property_screen.dart'; -import 'package:hub/shared/helpers/database/database_helper.dart'; -import 'package:hub/shared/helpers/license/license_helper.dart'; -import 'package:rxdart/rxdart.dart'; -import 'package:sqflite/sqflite.dart'; - -class LicenseService { - static final LicenseService _instance = LicenseService._internal(); - factory LicenseService() => _instance; - LicenseService._internal(); - - final _licenseSubject = BehaviorSubject>(); - - Stream> get licenseStream => _licenseSubject.stream; - - Future processLicense() async { - if (body['key'] == Module.pets.value && body['display'] == 'VISIVEL') { - await LicenseHelper().s(Module.petsHistory.value, body); - } - final bool isAboutProperty = AboutPropertyModules.values.contains(body['key']); - final bool isVisible = body['display'] == 'VISIVEL'; - log('contains () => ${body['key']} - $isAboutProperty'); - if (isAboutProperty && isVisible) { - await LicenseHelper().s(Module.aboutProperty.value, body); - } - } - - Future cleanLicense() async { - _licenseSubject.add([]); - } - - Future setupLicense(Database database, bool isNewVersion) async { - log('(B) => license'); - - final List inactiveModuleKey = InactiveModuleKey.values.map((e) => e.value).toList(); - final List activeModuleKey = ActiveModuleKey.values.map((e) => e.value).toList(); - final List disabledModuleKey = DisabledModuleKey.values.map((e) => e.value).toList(); - - await LicenseHelper().setByKey(inactiveModuleKey, 'INVISIVEL'); - await LicenseHelper().setByKey(activeModuleKey, 'VISIVEL'); - if (isNewVersion == true) { - await LicenseHelper().setByKey(disabledModuleKey, 'VISIVEL'); - await LicenseHelper().setByKey([Module.aboutProperty.value], 'VISIVEL'); - } else { - await LicenseHelper().setByKey(disabledModuleKey, 'DESABILITADO'); - } - _licenseSubject.add([...activeModuleKey]); - } - - Future fetchLicenses(bool isNewVersion) async { - log('(A) => license'); - try { - log('Obtendo licenças...'); - final response = await PhpGroup.getLicense(); - final dynamic responseBody = response.jsonBody; - log('Licenças obtidas: $responseBody'); - - if (response.jsonBody is! List) { - late final String error; - if (response.jsonBody is Map) - error = response.jsonBody['error_msg']; - else - error = 'Erro desconhecido'; - - throw Exception('Erro ao consultar licenças: $error'); - } - - if (responseBody == []) { - await setupLicense(DatabaseStorage.database, isNewVersion); - _licenseSubject.add([]); - return false; - } - - for (var element in responseBody) { - if (licenseContainsKey(element['key'])) { - _saveModule(element); - } - } - _licenseSubject.add(responseBody); - return true; - } catch (e) { - log('Erro ao obter licenças: $e'); - await setupLicense(DatabaseStorage.database, isNewVersion); - return false; - } - } - - static bool licenseContainsKey(final String key) { - return Module.values.map((e) => e.value).toList().contains(key); - } - - static Future _saveModule(final dynamic body) async { - if (body is! Map) return; - log('Salvando módulo: ${body.toString()}'); - await LicenseHelper().s(body['key'], body); - } -} diff --git a/lib/shared/widgets/menu.dart b/lib/shared/widgets/menu.dart deleted file mode 100644 index 7624f6e3..00000000 --- a/lib/shared/widgets/menu.dart +++ /dev/null @@ -1,56 +0,0 @@ -// // LinkedHashMap menu = LinkedHashMap.from({ -// "Schedule": -// [{ -// "title": "Schedule\nVisit", -// "icon": Icons.settings, -// "route": "/Schedule", -// }, -// { -// "title": "Complete\Schedule", -// "icon": Icons.calendar_today, -// "route": "/Complete", -// }, -// { -// "title": "Provisional\Schedule", -// "icon": Icons.calendar_today, -// "route": "/Provisional", -// }, -// { -// "title": "Fast\Schedule", -// "icon": Icons.calendar_today, -// "route": "/Fast", -// }], -// "Consult": -// [{ -// "title": "Consult", -// "icon": Icons.search, -// "route": "/consult", -// }, -// { -// "title": "Liberation\nConsult", -// "icon": Icons.search, -// "route": "/Liberation", -// }, -// { -// "title": "Access\nConsult", -// "icon": Icons.search, -// "route": "/Access", -// }, -// { -// "title": "Poeple\nConsult", -// "icon": Icons.search, -// "route": "/Poeple", -// }, -// { -// "title": "QR Code\nConsult", -// "icon": Icons.search, -// "route": "/qrcode", -// }], -// "Preferences": -// [{ -// "title": "Preferences", -// "icon": Icons.settings, -// "route": "/preferences", -// }], - -// }); diff --git a/pubspec.lock b/pubspec.lock index b0e34950..64d4e4b8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 + url: "https://pub.dev" + source: hosted + version: "72.0.0" _flutterfire_internals: dependency: transitive description: @@ -9,6 +17,19 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.41" + _macros: + dependency: transitive + description: dart + source: sdk + version: "0.3.2" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 + url: "https://pub.dev" + source: hosted + version: "6.7.0" app_links: dependency: "direct main" description: @@ -121,6 +142,70 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d" + url: "https://pub.dev" + source: hosted + version: "2.4.13" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0 + url: "https://pub.dev" + source: hosted + version: "7.3.2" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" cached_network_image: dependency: "direct main" description: @@ -217,6 +302,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e" + url: "https://pub.dev" + source: hosted + version: "4.10.1" collection: dependency: "direct main" description: @@ -241,6 +334,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.1" + convert: + dependency: transitive + description: + name: convert + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 + url: "https://pub.dev" + source: hosted + version: "3.1.2" crop_your_image: dependency: "direct main" description: @@ -281,6 +382,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab" + url: "https://pub.dev" + source: hosted + version: "2.3.7" dbus: dependency: transitive description: @@ -741,6 +850,22 @@ packages: url: "https://pub.dev" source: hosted version: "10.8.0" + freezed: + dependency: "direct dev" + description: + name: freezed + sha256: "44c19278dd9d89292cf46e97dc0c1e52ce03275f40a97c5a348e802a924bf40e" + url: "https://pub.dev" + source: hosted + version: "2.5.7" + freezed_annotation: + dependency: "direct main" + description: + name: freezed_annotation + sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + url: "https://pub.dev" + source: hosted + version: "2.4.4" from_css_color: dependency: "direct main" description: @@ -749,6 +874,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" go_router: dependency: "direct main" description: @@ -781,6 +922,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.12.0" + graphs: + dependency: transitive + description: + name: graphs + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" + url: "https://pub.dev" + source: hosted + version: "2.3.2" gtk: dependency: transitive description: @@ -797,6 +946,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.1" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" http_parser: dependency: transitive description: @@ -885,6 +1042,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.19.0" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" iregexp: dependency: transitive description: @@ -902,7 +1067,7 @@ packages: source: hosted version: "0.6.7" json_annotation: - dependency: transitive + dependency: "direct main" description: name: json_annotation sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" @@ -917,6 +1082,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.4" + json_serializable: + dependency: "direct dev" + description: + name: json_serializable + sha256: c2fcb3920cf2b6ae6845954186420fca40bc0a8abcc84903b7801f17d7050d7c + url: "https://pub.dev" + source: hosted + version: "6.9.0" leak_tracker: dependency: transitive description: @@ -997,6 +1170,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + macros: + dependency: transitive + description: + name: macros + sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536" + url: "https://pub.dev" + source: hosted + version: "0.1.2-main.4" matcher: dependency: transitive description: @@ -1077,6 +1258,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" page_transition: dependency: "direct main" description: @@ -1237,6 +1426,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" provider: dependency: "direct main" description: @@ -1245,6 +1442,22 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + url: "https://pub.dev" + source: hosted + version: "1.3.0" qr: dependency: transitive description: @@ -1365,11 +1578,43 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.1" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67 + url: "https://pub.dev" + source: hosted + version: "2.0.1" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + source_helper: + dependency: transitive + description: + name: source_helper + sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" + url: "https://pub.dev" + source: hosted + version: "1.3.4" source_span: dependency: transitive description: @@ -1498,6 +1743,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.7.0" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" typed_data: dependency: transitive description: @@ -1618,6 +1871,14 @@ packages: url: "https://pub.dev" source: hosted version: "14.2.5" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" web: dependency: transitive description: @@ -1626,6 +1887,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + url: "https://pub.dev" + source: hosted + version: "0.1.6" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" + url: "https://pub.dev" + source: hosted + version: "3.0.1" webview_flutter: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 37258a93..0f320ee2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -101,6 +101,8 @@ dependencies: app_tracking_transparency: ^2.0.6 dio: ^5.7.0 crypto: ^3.0.5 + freezed_annotation: ^2.4.4 + json_annotation: ^4.9.0 dependency_overrides: http: 1.2.1 @@ -119,6 +121,9 @@ dev_dependencies: flutter_test: sdk: flutter + build_runner: ^2.4.13 + freezed: ^2.5.7 + json_serializable: ^6.9.0 flutter_launcher_icons: android: "launcher_icon"