This commit is contained in:
J. A. Messias 2024-11-21 16:15:14 -03:00
parent b87b26fced
commit 8e5d40ff2f
12 changed files with 159 additions and 100 deletions

View File

@ -27,19 +27,25 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
final bool expandable;
final List<Module> menuOptions;
MenuComponentModel({required this.style, required this.item, required this.expandable, required this.menuOptions});
MenuComponentModel(
{required this.style,
required this.item,
required this.expandable,
required this.menuOptions});
bool isGrid = false;
late MenuListViewComponentModel menuListViewComponentModel;
late MenuStaggeredViewComponentModel menuStaggeredViewComponentModel;
late VoidCallback safeSetState;
late List<MenuEntry?> menuEntries;
List<MenuEntry?> menuEntries = [];
@override
void initState(BuildContext context) {
menuListViewComponentModel = createModel(context, () => MenuListViewComponentModel());
menuStaggeredViewComponentModel = createModel(context, () => MenuStaggeredViewComponentModel());
menuListViewComponentModel =
createModel(context, () => MenuListViewComponentModel());
menuStaggeredViewComponentModel =
createModel(context, () => MenuStaggeredViewComponentModel());
}
@override
@ -48,27 +54,32 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
menuStaggeredViewComponentModel.dispose();
}
Future<List<MenuEntry?>> generateMenuEntries(BuildContext context, MenuItem item, List<Module> options) async {
Future<List<MenuEntry?>> generateMenuEntries(
BuildContext context, MenuItem item, List<Module> options) async {
List<MenuEntry?> entries = [];
Future<MenuEntry?> addMenuEntry(IconData icon, String enText, String ptText, Function() action) async {
Future<MenuEntry?> addMenuEntry(
IconData icon, String enText, String ptText, Function() action) async {
entries.add(
item == MenuItem.button
? MenuButtonWidget(
icon: icon,
action: action,
title: FFLocalizations.of(context).getVariableText(enText: enText, ptText: ptText),
title: FFLocalizations.of(context)
.getVariableText(enText: enText, ptText: ptText),
safeSetState: safeSetState)
: item == MenuItem.card
? MenuCardItem(
icon: icon,
action: action,
title: FFLocalizations.of(context).getVariableText(enText: enText, ptText: ptText),
title: FFLocalizations.of(context)
.getVariableText(enText: enText, ptText: ptText),
safeSetState: safeSetState)
: item == MenuItem.tile
? MenuCardItem(
icon: icon,
action: action,
title: FFLocalizations.of(context).getVariableText(enText: enText, ptText: ptText),
title: FFLocalizations.of(context)
.getVariableText(enText: enText, ptText: ptText),
safeSetState: safeSetState)
: null,
);
@ -80,15 +91,18 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
log('Module: ${opt.value} - License: $v');
switch (v) {
case 'VISIVEL':
addMenuEntry(Icons.engineering_outlined, 'Schedule Providers', 'Agendar Prestadores', () async {
addMenuEntry(Icons.engineering_outlined, 'Schedule Providers',
'Agendar Prestadores', () async {
await open(context, '/provisionalSchedule');
});
break;
case 'INVISIVEL':
case 'BLOQUEADO':
DialogUnavailable.unavailableFeature(context);
break;
default:
case 'INVISIVEL':
break;
default:
throw Exception('Invalid license value');
}
safeSetState();
}
@ -118,11 +132,13 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
ptText: 'Tem certeza que deseja sair?',
enText: 'Are you sure you want to logout?',
);
showAlertDialog(context, title, content, () async => await AuthenticationService.signOut(context));
showAlertDialog(context, title, content,
() async => await AuthenticationService.signOut(context));
}
Future openDeliverySchedule(BuildContext context) async {
final bool isProvisional = await StorageHelper().g(KeychainStorageKey.provisional.value) == 'true';
final bool isProvisional =
await StorageHelper().g(KeychainStorageKey.provisional.value) == 'true';
if (isProvisional == true) {
context.push(
'/deliverySchedule',
@ -140,7 +156,8 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
}
Future openProvisionalSchedule(BuildContext context) async {
final isProvisional = await StorageHelper().g(KeychainStorageKey.provisional.value) == 'true';
final isProvisional =
await StorageHelper().g(KeychainStorageKey.provisional.value) == 'true';
if (isProvisional == true) {
context.push(
'/provisionalSchedule',
@ -158,7 +175,8 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
}
Future openFastPassSchedule(BuildContext context) async {
final isWpp = await StorageHelper().g(KeychainStorageKey.whatsapp.value) == 'true';
final isWpp =
await StorageHelper().g(KeychainStorageKey.whatsapp.value) == 'true';
if (isWpp) {
context.push(
'/fastPassPage',
@ -250,7 +268,8 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
ptText: 'Tem certeza que deseja sair?',
enText: 'Are you sure you want to logout?',
);
showAlertDialog(context, title, content, () async => await AuthenticationService.signOut(context));
showAlertDialog(context, title, content,
() async => await AuthenticationService.signOut(context));
}
Future openPreferencesSettings(BuildContext context) async {
@ -267,7 +286,8 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
}
Future openMyOrders(BuildContext context) async {
final isWpp = await StorageHelper().g(KeychainStorageKey.whatsapp.value) == 'true';
final isWpp =
await StorageHelper().g(KeychainStorageKey.whatsapp.value) == 'true';
;
if (isWpp) {
context.push(
@ -286,7 +306,8 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
}
Future openReservations(BuildContext context) async {
final isWpp = await StorageHelper().g(KeychainStorageKey.whatsapp.value) == 'true';
final isWpp =
await StorageHelper().g(KeychainStorageKey.whatsapp.value) == 'true';
;
if (isWpp) {
context.push(
@ -403,7 +424,8 @@ class MenuComponentModel extends FlutterFlowModel<MenuComponentWidget> {
}
Future openPetsRegister(BuildContext context) async {
bool isPet = await StorageHelper().g(KeychainStorageKey.pets.value) == 'true';
bool isPet =
await StorageHelper().g(KeychainStorageKey.pets.value) == 'true';
;
if (isPet) {
context.push(

View File

@ -148,11 +148,6 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) {
name: 'vehiclesOnThePropertyPage',
path: '/vehiclesOnThePropertyPage',
builder: (context, params) => const VehicleOnTheProperty()),
FFRoute(
name: 'homePage',
path: '/homePage',
builder: (context, params) => HomePageWidget(key: UniqueKey()),
),
FFRoute(
name: 'receptionPage',
path: '/receptionPage',

View File

@ -16,6 +16,7 @@ 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/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';

View File

@ -6,6 +6,7 @@ import 'package:hub/components/organism_components/menu_component/menu_component
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/pages/about_property_page/about_property_screen.dart';
import 'package:hub/shared/helpers/license/license_helper.dart';
class AboutPropertyModel extends FlutterFlowModel<AboutPropertyPage> {
dynamic item;
@ -22,13 +23,17 @@ class AboutPropertyModel extends FlutterFlowModel<AboutPropertyPage> {
void initState(BuildContext context) {
menuComponentModel = createModel(
context,
() => MenuComponentModel(expandable: true, style: MenuView.list_grid, item: MenuItem.button, menuOptions: [
MenuOption.PetsOnTheProperty,
MenuOption.ResidentsOnTheProperty,
MenuOption.VisitsOnTheProperty,
MenuOption.VehiclesOnTheProperty,
MenuOption.PackagesOnTheProperty,
]));
() => MenuComponentModel(
expandable: true,
style: MenuView.list_grid,
item: MenuItem.button,
menuOptions: [
Module.pets,
Module.residents,
Module.openedVisits,
Module.vehicles,
Module.orders,
]));
initAsync();
}

View File

@ -6,10 +6,10 @@ import 'package:hub/components/organism_components/menu_component/menu_component
import 'package:hub/components/organism_components/message_well_component/message_well_component_model.dart';
import 'package:hub/flutter_flow/flutter_flow_model.dart';
import 'package:hub/pages/home_page/home_page_widget.dart';
import 'package:hub/shared/helpers/license/license_helper.dart';
import 'package:hub/shared/helpers/storage/base_storage.dart';
import 'package:hub/shared/helpers/storage/storage_helper.dart';
class HomePageModel extends FlutterFlowModel<HomePageWidget> {
HomePageModel({required this.safeSetState});
late final VoidCallback safeSetState;
@ -32,54 +32,64 @@ class HomePageModel extends FlutterFlowModel<HomePageWidget> {
Future<void> _initVariable() async {
devUUID = (await StorageHelper().g(KeychainStorageKey.devUUID.value)) ?? '';
userUUID = (await StorageHelper().g(KeychainStorageKey.userUUID.value)) ?? '';
cliUUID = (await StorageHelper().g(KeychainStorageKey.clientUUID.value)) ?? '';
userName = (await StorageHelper().g(KeychainStorageKey.userName.value)) ?? '';
userUUID =
(await StorageHelper().g(KeychainStorageKey.userUUID.value)) ?? '';
cliUUID =
(await StorageHelper().g(KeychainStorageKey.clientUUID.value)) ?? '';
userName =
(await StorageHelper().g(KeychainStorageKey.userName.value)) ?? '';
userEmail = (await StorageHelper().g(SecureStorageKey.email.value)) ?? '';
}
@override
void initState(BuildContext context) {
_initVariable();
localComponentModel = createModel(context, () => LocalProfileComponentModel());
localComponentModel =
createModel(context, () => LocalProfileComponentModel());
homeMenuComponentModel = createModel(
context,
() => MenuComponentModel(expandable: true, style: MenuView.list_grid, item: MenuItem.button, menuOptions: [
MenuOption.SettingsOnTheApp,
MenuOption.MessagesOnTheProperty,
MenuOption.AccessOnTheProperty,
MenuOption.PetsRegister,
MenuOption.VisitorsRegister,
MenuOption.ReservationsOnTheLocal,
MenuOption.PackagesOnTheProperty,
MenuOption.DeliverySchedule,
MenuOption.WorkersOnTheProperty,
MenuOption.AboutProperty,
MenuOption.CompleteSchedule,
MenuOption.FastPassSchedule,
MenuOption.LiberationsOnTheProperty,
MenuOption.QRCodeAccessInProperty,
]));
() => MenuComponentModel(
expandable: true,
style: MenuView.list_grid,
item: MenuItem.button,
menuOptions: [
Module.messages,
Module.access,
Module.pets,
Module.openedVisits,
Module.reservations,
Module.orders,
Module.providerSchedule,
Module.deliverySchedule,
Module.completeSchedule,
Module.fastPass,
Module.liberations,
Module.qrCode,
Module.settings,
]));
drawerMenuComponentModel = createModel(
context,
() => MenuComponentModel(expandable: false, style: MenuView.list, item: MenuItem.tile, menuOptions: [
MenuOption.SettingsOnTheApp,
MenuOption.MessagesOnTheProperty,
MenuOption.AccessOnTheProperty,
MenuOption.PetsRegister,
MenuOption.VisitorsRegister,
MenuOption.ReservationsOnTheLocal,
MenuOption.PackagesOnTheProperty,
MenuOption.DeliverySchedule,
MenuOption.WorkersOnTheProperty,
MenuOption.AboutProperty,
MenuOption.CompleteSchedule,
MenuOption.FastPassSchedule,
MenuOption.LiberationsOnTheProperty,
MenuOption.QRCodeAccessInProperty,
MenuOption.LogoutOnTheApp,
]));
messageWellComponentModel = createModel(context, () => MessageWellComponentModel());
() => MenuComponentModel(
expandable: false,
style: MenuView.list,
item: MenuItem.tile,
menuOptions: [
Module.messages,
Module.access,
Module.pets,
Module.openedVisits,
Module.reservations,
Module.orders,
Module.providerSchedule,
Module.deliverySchedule,
Module.completeSchedule,
Module.fastPass,
Module.liberations,
Module.qrCode,
Module.logout,
]));
messageWellComponentModel =
createModel(context, () => MessageWellComponentModel());
}
@override

View File

@ -21,8 +21,10 @@ class DatabaseStorage {
return _database!;
}
bool isInitialized = false;
Future<void> init() async {
if (_database != null) return;
if (isInitialized) return;
_database = await openDatabase(
join(await getDatabasesPath(), _dbName),
version: _dbVersion,
@ -31,6 +33,7 @@ class DatabaseStorage {
onDowngrade: _onDowngrade,
);
await LicenseService.setupLicense(database);
isInitialized = true;
}
Future<void> _onCreate(Database database, int version) async {
@ -39,13 +42,14 @@ class DatabaseStorage {
await database.execute(LicenseHelper.createTableQuery);
}
Future<void> _onUpgrade(Database database, int oldVersion, int newVersion) async {
Future<void> _onUpgrade(
Database database, int oldVersion, int newVersion) async {
log('Upgrading database from version $oldVersion to $newVersion...');
if (oldVersion < 2) {
await database.execute(LicenseHelper.createTableQuery);
await LicenseService.setupLicense(database);
}
}
Future<void> _onDowngrade(Database database, int oldVersion, int newVersion) async {}
Future<void> _onDowngrade(
Database database, int oldVersion, int newVersion) async {}
}

View File

@ -77,6 +77,9 @@ enum Module {
providerSchedule,
deliverySchedule,
fastPass,
qrCode,
settings,
logout,
}
extension LicenseKeyExtension on Module {
@ -116,31 +119,31 @@ extension LicenseKeyExtension on Module {
String get route {
switch (this) {
case Module.messages:
return '/messages';
return '/messageHistoryPage';
case Module.liberations:
return '/liberations';
return '/liberationHistory';
case Module.reservations:
return '/reservations';
return '/reservation';
case Module.access:
return '/access';
return '/acessHistoryPage';
case Module.openedVisits:
return '/opened-visits';
return '/visitsOnTheProperty';
case Module.vehicles:
return '/vehicles';
return '/vehiclesOnThePropertyPage';
case Module.residents:
return '/residents';
return '/peopleOnThePropertyPage';
case Module.pets:
return '/pets';
return '/petsPage';
case Module.orders:
return '/orders';
return '/packageOrder';
case Module.completeSchedule:
return '/complete-schedule';
return '/scheduleCompleteVisitPage';
case Module.providerSchedule:
return '/provider-schedule';
return '/provisionalSchedule';
case Module.deliverySchedule:
return '/delivery-schedule';
return '/deliverySchedule';
case Module.fastPass:
return '/fast-pass';
return '/fastPassPage';
default:
return '';
}
@ -170,7 +173,8 @@ class LicenseHelper {
await DatabaseStorage.instance.init();
}
static Future<void> insertLicenseFoo(final List<String> key, final String display) async {
static Future<void> insertLicenseFoo(
final List<String> key, final String display) async {
for (var element in key) {
DatabaseStorage.database.insert(
tableLicense,
@ -187,11 +191,12 @@ class LicenseHelper {
}
Future<String?> g(String key) async {
var response = await DatabaseStorage.database.query(tableLicense, where: 'key = ?', whereArgs: [key]);
var response = await DatabaseStorage.database.query(tableLicense,
where: 'key = ?', whereArgs: [key], columns: ['display']);
if (response.isEmpty) {
return null;
}
return response.first['value'].toString();
return response.first['display'].toString();
}
Future<void> s<T>(String key, T value) async {
@ -211,7 +216,8 @@ class LicenseHelper {
}
Future<void> d(String key) async {
await DatabaseStorage.database.delete(tableLicense, where: 'key = ?', whereArgs: [key]);
await DatabaseStorage.database
.delete(tableLicense, where: 'key = ?', whereArgs: [key]);
}
Future<void> c() async {

View File

@ -8,6 +8,7 @@ class KeychainHelper implements BaseStorage {
static final KeychainHelper instance = KeychainHelper._();
static const String tableKeychain = 'keychain';
bool _isInitialized = false;
static String get createTableQuery => '''
CREATE TABLE $tableKeychain (
@ -22,12 +23,15 @@ class KeychainHelper implements BaseStorage {
@override
Future<void> init() async {
if (_isInitialized) return;
await DatabaseStorage.instance.init();
_isInitialized = true;
}
@override
Future<String?> get(String key) async {
var response = await DatabaseStorage.database.query(tableKeychain, where: 'key = ?', whereArgs: [key]);
var response = await DatabaseStorage.database
.query(tableKeychain, where: 'key = ?', whereArgs: [key]);
if (response.isEmpty) {
return null;
}
@ -52,7 +56,8 @@ class KeychainHelper implements BaseStorage {
@override
Future<void> delete(String key) async {
await DatabaseStorage.database.delete(tableKeychain, where: 'key = ?', whereArgs: [key]);
await DatabaseStorage.database
.delete(tableKeychain, where: 'key = ?', whereArgs: [key]);
}
@override

View File

@ -7,10 +7,13 @@ class SecureStorage implements BaseStorage {
static final SecureStorage instance = SecureStorage._();
late final FlutterSecureStorage _secureStorage;
bool _isInitialized = false;
@override
Future<void> init() async {
if (_isInitialized) return;
_secureStorage = const FlutterSecureStorage();
_isInitialized = true;
}
@override

View File

@ -7,10 +7,13 @@ class SharedPreferencesStorage implements BaseStorage {
static final SharedPreferencesStorage instance = SharedPreferencesStorage._();
late final SharedPreferences _prefs;
bool _isInitialized = false;
@override
Future<void> init() async {
if (_isInitialized) return;
_prefs = await SharedPreferences.getInstance();
_isInitialized = true;
}
@override

View File

@ -10,10 +10,10 @@ class StorageHelper {
StorageHelper._internal();
late BuildContext? _context;
late bool _isRecovered = false;
BuildContext? get context => _context;
set context(BuildContext? context) => _context = context;
late bool _isRecovered = false;
bool get isRecovered => _isRecovered;
set isRecovered(bool isRecovered) => _isRecovered = isRecovered;
@ -22,10 +22,12 @@ class StorageHelper {
await SharedPreferencesStorage.instance.init();
await KeychainHelper.instance.init();
String? isFirstRun = await SharedPreferencesStorage.instance.get(SharedPreferencesKey.isFirstRun.value);
String? isFirstRun = await SharedPreferencesStorage.instance
.get(SharedPreferencesKey.isFirstRun.value);
if (isFirstRun == 'true') {
await SharedPreferencesStorage.instance.set(SharedPreferencesKey.isFirstRun.value, false);
if (isFirstRun != 'false') {
await SharedPreferencesStorage.instance
.set(SharedPreferencesKey.isFirstRun.value, false);
await SecureStorage.instance.set(SecureStorageKey.isLogged.value, false);
}
}
@ -44,7 +46,10 @@ class StorageHelper {
static BaseStorage getInstanceByKey(String key) {
if (SecureStorageKey.values.map((e) => e.value).toList().contains(key)) {
return SecureStorage.instance;
} else if (SharedPreferencesKey.values.map((e) => e.value).toList().contains(key)) {
} else if (SharedPreferencesKey.values
.map((e) => e.value)
.toList()
.contains(key)) {
return SharedPreferencesStorage.instance;
} else {
return KeychainHelper.instance;

View File

@ -5,7 +5,7 @@ import 'package:flutter/material.dart';
import 'package:hub/flutter_flow/flutter_flow_theme.dart';
import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/pages/forgot_password_page/forgot_password_screen.dart';
import 'package:hub/shared/helpers/storage_helper.dart';
import 'package:hub/shared/helpers/storage/storage_helper.dart';
class DeepLinkService {
static final DeepLinkService _instance = DeepLinkService._internal();