diff --git a/lib/app_state.dart b/lib/app_state.dart index 96c8dd59..8b137891 100644 --- a/lib/app_state.dart +++ b/lib/app_state.dart @@ -1,373 +1 @@ -// import 'dart:ffi'; -import 'package:csv/csv.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import 'package:local_auth/local_auth.dart'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:synchronized/synchronized.dart'; - -class AppState extends ChangeNotifier { - // Adiciona a variável para controle de autenticação biométrica - bool _isBiometricAuthenticated = false; - bool get isBiometricAuthenticated => _isBiometricAuthenticated; - - // Instância do LocalAuthentication - final LocalAuthentication auth = LocalAuthentication(); - - // Verifica suporte biométrico - Future checkBiometrics() async { - try { - return await auth.canCheckBiometrics; - } catch (e) { - clearBiometricAuthentication(); - return false; - } - } - - // Solicita autenticação biométrica - Future authenticateBiometric() async { - bool authenticated = false; - try { - authenticated = await auth.authenticate( - localizedReason: 'Scan your fingerprint to authenticate', - options: const AuthenticationOptions( - biometricOnly: true, - stickyAuth: true, - useErrorDialogs: true, - sensitiveTransaction: true, - )); - if (authenticated) { - _isBiometricAuthenticated = true; - notifyListeners(); - return Future.value(); - // Salvar o estado de autenticação biométrica, se necessário - } - } catch (e) { - clearBiometricAuthentication(); - return Future.error(e); - } - return Future.error( - ''); // Add this line to ensure a value is always returned - } - - // Função para limpar o estado de autenticação biométrica - void clearBiometricAuthentication() { - _isBiometricAuthenticated = false; - notifyListeners(); - // Limpar a informação salva, se necessário - } - - static AppState _instance = AppState._internal(); - - factory AppState() { - return _instance; - } - - AppState._internal(); - - static void reset() { - _instance = AppState._internal(); - } - - Future initializePersistedState() async { - secureStorage = const FlutterSecureStorage(); - - await _safeInitAsync(() async { - _email = await secureStorage.getString('ff_email') ?? _email; - }); - await _safeInitAsync(() async { - _passwd = await secureStorage.getString('ff_passwd') ?? _passwd; - }); - await _safeInitAsync(() async { - _deviceType = - await secureStorage.getString('ff_deviceType') ?? _deviceType; - }); - await _safeInitAsync(() async { - _isLogged = await secureStorage.getBool('ff_isLogged') ?? _isLogged; - }); - - await _safeInitAsync(() async { - _tokenAPNS = await secureStorage.getString('ff_tokenAPNS') ?? _tokenAPNS; - }); - - await _safeInitAsync(() async { - _accessPass = await secureStorage.getString('accessPass') ?? _accessPass; - }); - await _safeInitAsync(() async { - _panicPass = await secureStorage.getString('panicPass') ?? _panicPass; - }); - await _safeInitAsync(() async { - _fingerprintPass = - await secureStorage.getString('fingerprintPass') ?? _fingerprintPass; - }); - await _safeInitAsync(() async { - _context = await secureStorage.getObject('ff_context') ?? _context; - }); - - await _safeInitAsync(() async { - _haveLocal = await secureStorage.getBool('ff_have_local') ?? _haveLocal; - }); - - await _safeInitAsync(() async { - _deviceDescription = await secureStorage.getString('deviceDescription') ?? - _deviceDescription; - }); - await loadFirstRun(); - } - - bool _firstRun = true; - bool get firstRun => _firstRun; - - Future loadFirstRun() async { - final prefs = await SharedPreferences.getInstance(); - _firstRun = prefs.getBool('first_run') ?? true; - notifyListeners(); - } - - Future setFirstRun(bool value) async { - final prefs = await SharedPreferences.getInstance(); - _firstRun = value; - await prefs.setBool('first_run', value); - notifyListeners(); - } - - Future deleteFirstRun() async { - final prefs = await SharedPreferences.getInstance(); - _firstRun = true; - await prefs.remove('first_run'); - notifyListeners(); - } - - void update(VoidCallback callback) { - callback(); - notifyListeners(); - } - - late FlutterSecureStorage secureStorage; - - String _deviceDescription = ''; - String get deviceDescription => _deviceDescription; - set deviceDescription(String value) { - _deviceDescription = value; - secureStorage.setString('deviceDescription', value); - } - - void deleteDeviceDescription() { - secureStorage.delete(key: 'deviceDescription'); - } - - BuildContext? _context; - BuildContext? get context => _context; - set context(BuildContext? value) { - _context = value; - secureStorage.setString('ff_context', value.toString()); - } - - void deleteContext() { - secureStorage.delete(key: 'ff_context'); - } - - bool? _haveLocal = null; - bool? get haveLocal => _haveLocal; - set haveLocal(bool? value) { - _haveLocal = value; - secureStorage.setBool('ff_have_local', value); - } - - void deleteHaveLocal() { - secureStorage.delete(key: 'ff_have_local'); - } - - String _fingerprintPass = ''; - String get fingerprintPass => _fingerprintPass; - set fingerprintPass(String value) { - _fingerprintPass = value; - secureStorage.setString('fingerprintPass', value); - } - - void deleteFingerprintPass() { - secureStorage.delete(key: 'fingerprintPass'); - } - - String _accessPass = ''; - String get accessPass => _accessPass; - set accessPass(String value) { - _accessPass = value; - secureStorage.setString('accessPass', value); - } - - void deleteAccessPass() { - secureStorage.delete(key: 'accessPass'); - } - - String _panicPass = ''; - String get panicPass => _panicPass; - set panicPass(String value) { - _panicPass = value; - secureStorage.setString('panicPass', value); - } - - void deletePanicPass() { - secureStorage.delete(key: 'panicPass'); - } - - String? _tokenAPNS = ''; - String? get tokenAPNS => _tokenAPNS; - - set tokenAPNS(String? value) { - _tokenAPNS = value; - if (value != null) { - secureStorage.setString('ff_tokenAPNS', value); - } else { - secureStorage.delete(key: 'ff_tokenAPNS'); - } - } - - void deleteTokenAPNS() { - secureStorage.delete(key: 'ff_tokenAPNS'); - AppState().tokenAPNS = ''; - } - - String _email = ''; - String get email => _email; - set email(String value) { - _email = value; - secureStorage.setString('ff_email', value); - } - - void deleteEmail() { - secureStorage.delete(key: 'ff_email'); - AppState().email = ''; - } - - String _passwd = ''; - String get passwd => _passwd; - set passwd(String value) { - _passwd = value; - secureStorage.setString('ff_passwd', value); - } - - void deletePasswd() { - secureStorage.delete(key: 'ff_passwd'); - AppState().passwd = ''; - } - - String _deviceType = ''; - String get deviceType => _deviceType; - set deviceType(String value) { - _deviceType = value; - secureStorage.setString('ff_deviceType', value); - } - - void deleteDevice() { - secureStorage.delete(key: 'ff_deviceType'); - AppState().deviceType = ''; - } - - bool _isLogged = false; - bool get isLogged => _isLogged; - set isLogged(bool value) { - _isLogged = value; - secureStorage.setBool('ff_isLogged', value); - } - - void deleteIsLogged() { - secureStorage.delete(key: 'ff_isLogged'); - } - - String _token = ''; - String get token => _token; - set token(String value) { - _token = value; - secureStorage.setString('ff_token', value); - } - - void deleteToken() { - secureStorage.delete(key: 'ff_token'); - AppState().token = ''; - } - - void deleteAll() { - AppState().deleteAccessPass(); - AppState().deleteDevice(); - AppState().deleteEmail(); - AppState().deleteFingerprintPass(); - AppState().deleteIsLogged(); - AppState().deletePasswd(); - AppState().deletePanicPass(); - AppState().deleteToken(); - AppState().deleteTokenAPNS(); - AppState().deleteContext(); - secureStorage.deleteAll(); - - AppState().isLogged = false; - AppState().setFirstRun(false); - - AppState().update(() {}); - } -} - -void _safeInit(Function() initializeField) { - try { - initializeField(); - } catch (_) {} -} - -Future _safeInitAsync(Function() initializeField) async { - try { - await initializeField(); - } catch (_) {} -} - -extension FlutterSecureStorageExtensions on FlutterSecureStorage { - static final _lock = Lock(); - - Future writeSync({required String key, String? value}) async => - await _lock.synchronized(() async { - await write(key: key, value: value); - }); - - void remove(String key) => delete(key: key); - - Future getString(String key) async => await read(key: key); - Future setString(String key, String value) async => - await writeSync(key: key, value: value); - - Future getBool(String key) async => (await read(key: key)) == 'true'; - Future setBool(String key, bool? value) async => - await writeSync(key: key, value: value.toString()); - - Future getInt(String key) async => - int.tryParse(await read(key: key) ?? ''); - Future setInt(String key, int value) async => - await writeSync(key: key, value: value.toString()); - - Future getDouble(String key) async => - double.tryParse(await read(key: key) ?? ''); - Future setDouble(String key, double value) async => - await writeSync(key: key, value: value.toString()); - - Future getObject(String key) async { - final value = await read(key: key); - if (value == null || value.isEmpty) { - return null; - } - return value as BuildContext; - } - - Future?> getStringList(String key) async => - await read(key: key).then((result) { - if (result == null || result.isEmpty) { - return null; - } - return const CsvToListConverter() - .convert(result) - .first - .map((e) => e.toString()) - .toList(); - }); - Future setStringList(String key, List value) async => - await writeSync( - key: key, value: const ListToCsvConverter().convert([value])); -} diff --git a/lib/backend/api_requests/api_calls.dart b/lib/backend/api_requests/api_calls.dart index 0a001a68..17989ffc 100644 --- a/lib/backend/api_requests/api_calls.dart +++ b/lib/backend/api_requests/api_calls.dart @@ -1,10 +1,11 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:hub/backend/notifications/firebase_messaging_service.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:hub/shared/utils/validator_util.dart'; import '/flutter_flow/flutter_flow_util.dart'; @@ -59,13 +60,9 @@ class PhpGroup { class UnregisterDevice { Future call() async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; return ApiManager.instance.makeApiCall( callName: 'unregisterDevice', @@ -94,16 +91,10 @@ class DeletePet { int? petID = 0, }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'excluirPet'; return ApiManager.instance.makeApiCall( @@ -145,16 +136,10 @@ class UpdatePet { String? notes = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'atualizarPet'; return ApiManager.instance.makeApiCall( @@ -199,16 +184,10 @@ class GetPets { int? pageSize = 0, }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'consultaPets'; return ApiManager.instance.makeApiCall( @@ -241,16 +220,10 @@ class GetPetPhoto { int? petId = 0, }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'consultaFotoPet'; return ApiManager.instance.makeApiCall( @@ -290,16 +263,10 @@ class RegisterPet { String? notes = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'cadastrarPet'; return ApiManager.instance.makeApiCall( @@ -344,16 +311,9 @@ class BuscaEnconcomendas { String? adresseeType = '', String? status = '', }) async { - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'getEncomendas'; final baseUrl = PhpGroup.getBaseUrl(); @@ -394,17 +354,11 @@ class CancelaVisita { String? DevDesc = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'cancelaVisita'; - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); return ApiManager.instance.makeApiCall( callName: 'cancelaVisita', @@ -435,13 +389,9 @@ class CancelaVisita { class DeleteAccount { Future call() async { - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final baseUrl = PhpGroup.getBaseUrl(); return ApiManager.instance.makeApiCall( callName: 'deleteAccount', @@ -470,17 +420,10 @@ class ChangePanic { String? newSenhaPanico = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'updVisitado'; return ApiManager.instance.makeApiCall( @@ -513,16 +456,10 @@ class ChangePass { String? newSenha = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'updVisitado'; return ApiManager.instance.makeApiCall( @@ -556,13 +493,9 @@ class RespondeVinculo { String? cliID = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; return ApiManager.instance.makeApiCall( callName: 'respondeVinculo', @@ -593,16 +526,10 @@ class ChangeNotifica { String? notifica = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'updVisitado'; return ApiManager.instance.makeApiCall( @@ -633,14 +560,10 @@ class ChangeNotifica { class UpdToken { Future call() async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final token = AppState().token; + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final token = StorageUtil().token; return ApiManager.instance.makeApiCall( callName: 'updToken', @@ -667,14 +590,11 @@ class UpdToken { class LoginCall { Future call() async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final email = AppState().email; - final password = AppState().passwd; - final type = AppState().deviceType; - final description = AppState().deviceDescription; + final devUUID = StorageUtil().devUUID; + final email = StorageUtil().email; + final password = StorageUtil().passwd; + final type = StorageUtil().deviceType; + final description = StorageUtil().deviceDescription; final token = FirebaseMessagingService.getToken(); return ApiManager.instance.makeApiCall( @@ -772,13 +692,9 @@ class ForgotPasswordCall { class GetLocalsCall { Future call() async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; return ApiManager.instance.makeApiCall( callName: 'getLocals', @@ -816,16 +732,10 @@ class PostScheduleVisitorCall { String? foto = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'putVisitante'; return ApiManager.instance.makeApiCall( @@ -877,16 +787,10 @@ class PostScheduleVisitCall { String? obs = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'putVisita'; return ApiManager.instance.makeApiCall( @@ -937,16 +841,10 @@ class GetScheduleVisitCall { String? chaveBusca = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliUUID = StorageUtil().cliUUID; const atividade = 'getVisitas'; return ApiManager.instance.makeApiCall( @@ -1217,16 +1115,10 @@ class GetScheduleVisitCall { class GetDadosCall { Future call() async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliUUID = StorageUtil().cliUUID; const atividade = 'getDados'; return ApiManager.instance.makeApiCall( @@ -1466,16 +1358,10 @@ class GetVisitorByDocCall { String? documento = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'getVisitante'; return ApiManager.instance.makeApiCall( @@ -1526,16 +1412,10 @@ class GetFotoVisitanteCall { String? tipo = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'getFotoVisitante'; return ApiManager.instance.makeApiCall( @@ -1571,16 +1451,10 @@ class PostProvVisitSchedulingCall { String? proID = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'putAgendamentoProv'; return ApiManager.instance.makeApiCall( @@ -1626,16 +1500,10 @@ class GetVisitsCall { int? pageNumber, }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'getVisitas'; return ApiManager.instance.makeApiCall( @@ -1895,16 +1763,10 @@ class DeleteVisitCall { String? idVisita = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliID = StorageUtil().cliUUID; const atividade = 'cancelaVisita'; return ApiManager.instance.makeApiCall( @@ -1944,19 +1806,11 @@ class DeleteVisitCall { class GetPessoasLocalCall { Future call() async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final ownerUUID = await db - .get(key: 'ownerUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final ownerUUID = StorageUtil().ownerUUID; + final userUUID = StorageUtil().userUUID; + final cliUUID = StorageUtil().cliUUID; return ApiManager.instance.makeApiCall( callName: 'getPessoasLocal', @@ -2018,16 +1872,10 @@ class RespondeSolicitacaoCall { String? idVisitante = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliUUID = StorageUtil().cliUUID; const atividade = 'respondeSolicitacao'; return ApiManager.instance.makeApiCall( @@ -2074,16 +1922,10 @@ class GetAccessCall { String? pesTipo = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliUUID = StorageUtil().cliUUID; const atividade = 'getAcessos'; return ApiManager.instance.makeApiCall( @@ -2328,19 +2170,13 @@ class GetLiberationsCall { Stream call() { final baseUrl = PhpGroup.getBaseUrl(); final StreamController controller = StreamController(); - final DatabaseHelper db = DatabaseHelper(); Future.microtask(() async { - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliUUID = StorageUtil().cliUUID; const atividade = 'getSolicitacoes'; + try { final response = await ApiManager.instance.makeApiCall( callName: 'getLiberations', @@ -2527,16 +2363,10 @@ class GetMessagesCall { String? tipoDestino = '', }) async { final baseUrl = PhpGroup.getBaseUrl(); - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + final cliUUID = StorageUtil().cliUUID; const atividade = 'getMensagens'; return ApiManager.instance.makeApiCall( diff --git a/lib/backend/api_requests/api_manager.dart b/lib/backend/api_requests/api_manager.dart index aaaef549..72087153 100644 --- a/lib/backend/api_requests/api_manager.dart +++ b/lib/backend/api_requests/api_manager.dart @@ -1,5 +1,3 @@ -// ignore_for_file: constant_identifier_names, depend_on_referenced_packages, prefer_final_fields - import 'dart:convert'; import 'dart:core'; import 'dart:developer'; @@ -107,11 +105,8 @@ class ApiCallResponse { final http.Response? response; final http.StreamedResponse? streamedResponse; final Object? exception; - // Whether we received a 2xx status (which generally marks success). bool get succeeded => statusCode >= 200 && statusCode < 300; String getHeader(String headerName) => headers[headerName] ?? ''; - // Return the raw body from the response, or if this came from a cloud call - // and the body is not a string, then the json encoded body. String get bodyText => response?.body ?? (jsonBody is String ? jsonBody as String : jsonEncode(jsonBody)); @@ -126,7 +121,7 @@ class ApiCallResponse { dynamic jsonBody; try { if (bodyType == BodyType.BLOB) { - jsonBody = response.bodyBytes; // Armazenar os bytes diretamente + jsonBody = response.bodyBytes; } else { final responseBody = decodeUtf8 && returnBody ? const Utf8Decoder().convert(response.bodyBytes) @@ -153,19 +148,13 @@ class ApiCallResponse { class ApiManager { ApiManager._(); - // Cache that will ensure identical calls are not repeatedly made. - static Map _apiCache = {}; + static final Map _apiCache = {}; static ApiManager? _instance; static ApiManager get instance => _instance ??= ApiManager._(); - // If your API calls need authentication, populate this field once - // the user has authenticated. Alter this as needed. static String? _accessToken; - // You may want to call this if, for example, you make a change to the - // database and no longer want the cached result of a call that may - // have changed. static void clearCache(String callName) => _apiCache.keys .toSet() .forEach((k) => k.callName == callName ? _apiCache.remove(k) : null); @@ -187,7 +176,7 @@ class ApiManager { bool decodeUtf8, bool isStreamingApi, { http.Client? client, - BodyType? bodyType, // Adicionado para verificar o tipo de corpo + BodyType? bodyType, }) async { if (params.isNotEmpty) { final specifier = @@ -213,7 +202,7 @@ class ApiManager { final response = await makeRequest(Uri.parse(apiUrl), headers: toStringMap(headers)); return ApiCallResponse.fromHttpResponse( - response, returnBody, decodeUtf8, bodyType); // Passar bodyType + response, returnBody, decodeUtf8, bodyType); } static Future requestWithBody( @@ -368,7 +357,6 @@ class ApiManager { case null: break; } - // Set "Content-Type" header if it was previously unset. if (contentType != null && !headers.keys.any((h) => h.toLowerCase() == 'content-type')) { headers['Content-Type'] = contentType; @@ -428,7 +416,6 @@ class ApiManager { cache: cache, isStreamingApi: isStreamingApi, ); - // Modify for your specific needs if this differs from your API. if (_accessToken != null) { headers[HttpHeaders.authorizationHeader] = 'Bearer $_accessToken'; } @@ -436,8 +423,6 @@ class ApiManager { apiUrl = 'https://$apiUrl'; } - // If we've already made this exact call before and caching is on, - // return the cached result. if (cache && _apiCache.containsKey(callOptions)) { return _apiCache[callOptions]!; } @@ -504,7 +489,6 @@ class ApiManager { break; } - // If caching is on, cache the result (if present). if (cache) { _apiCache[callOptions] = result; } diff --git a/lib/backend/notifications/firebase_messaging_service.dart b/lib/backend/notifications/firebase_messaging_service.dart index 3dd3ad68..be23aad5 100644 --- a/lib/backend/notifications/firebase_messaging_service.dart +++ b/lib/backend/notifications/firebase_messaging_service.dart @@ -1,11 +1,10 @@ import 'dart:developer'; -import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; -import 'package:hub/app_state.dart'; import 'package:hub/backend/api_requests/api_calls.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; import 'package:hub/shared/utils/log_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'notification_service.dart'; @@ -36,24 +35,6 @@ class FirebaseMessagingService { _firebaseMessaging.setAutoInitEnabled(false); _firebaseMessaging.pluginConstants; - - // FirebaseMessaging.onBackgroundMessage(handleMessage); - - // FirebaseMessaging.onMessage.listen((RemoteMessage message) { - // handleMessage(message); - // }); - - // FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { - // log('A Message was opened: $message'); - // }); - - // FirebaseMessaging.instance - // .getInitialMessage() - // .then((RemoteMessage? message) { - // if (message != null) { - // log('A Message was opened: $message'); - // } - // }); } static Future getToken() async => @@ -64,7 +45,7 @@ class FirebaseMessagingService { final String? deviceToken = await _firebaseMessaging.getToken(); if (deviceToken != null) { - AppState().token = deviceToken; + StorageUtil().token = deviceToken; final ApiCallResponse? response; response = await PhpGroup.updToken.call(); diff --git a/lib/backend/notifications/notification_service.dart b/lib/backend/notifications/notification_service.dart index c02ff32d..2b761b8c 100644 --- a/lib/backend/notifications/notification_service.dart +++ b/lib/backend/notifications/notification_service.dart @@ -13,17 +13,17 @@ 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/flutter_flow/nav/nav.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:hub/shared/utils/dialog_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:sqflite/sqflite.dart'; Future onMessageReceived( Map payload, String? extra, String? handleClick) async { final localId = jsonDecode(payload['local']!)['CLI_ID']; - final DatabaseHelper db = DatabaseHelper(); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + + final cliUUID = StorageUtil().cliUUID; answersRequest( {required BuildContext context, required String? ref, @@ -50,7 +50,7 @@ Future onMessageReceived( switch (handleClick) { case 'visit_request': showDialog( - context: AppState().context!, + context: StorageUtil().context!, barrierColor: Colors.transparent, barrierDismissible: true, builder: (BuildContext context) { @@ -173,7 +173,7 @@ Future onMessageReceived( break; case 'access': showDialog( - context: AppState().context!, + context: StorageUtil().context!, barrierColor: Colors.transparent, barrierDismissible: true, builder: (BuildContext context) { @@ -225,14 +225,14 @@ Future onMessageReceived( } ], // onTapCardItemAction: () {}, - buttons: [], + buttons: const [], ), ); }); break; case 'mensagem': showDialog( - context: AppState().context!, + context: StorageUtil().context!, barrierColor: Colors.transparent, barrierDismissible: true, builder: (BuildContext context) { @@ -255,8 +255,8 @@ Future onMessageReceived( break; case 'enroll_cond': - AppState().haveLocal = true; - AppState().context!.go('/homePage'); + StorageUtil().haveLocal = true; + StorageUtil().context!.go('/homePage'); break; default: break; @@ -292,14 +292,12 @@ class NotificationService { await AwesomeNotifications() .isNotificationAllowed() .then((isAllowed) async { - final DatabaseHelper db = DatabaseHelper(); - final bool requestOSnotification = await db - .get(key: 'requestOSnotification', field: 'value') - .then((value) => value.toString() == 'true'); + final bool requestOSnotification = + StorageUtil().requestOSnotification; if (!requestOSnotification) { if (!isAllowed) { - await db.update('requestOSnotification', 'true', 'util'); + StorageUtil().requestOSnotification = true; await AwesomeNotifications().requestPermissionToSendNotifications(); } } diff --git a/lib/components/atomic_components/menu_button_item/menu_button_item_widget.dart b/lib/components/atomic_components/menu_button_item/menu_button_item_widget.dart index 26968d47..317a3bfa 100644 --- a/lib/components/atomic_components/menu_button_item/menu_button_item_widget.dart +++ b/lib/components/atomic_components/menu_button_item/menu_button_item_widget.dart @@ -2,21 +2,25 @@ 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 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:hub/shared/utils/dialog_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import '../../../app_state.dart'; class MenuButtonWidget extends MenuEntry { const MenuButtonWidget({ - Key? key, + super.key, this.action, this.title, this.icon, - }) : super(key: key); + }); + @override final Function()? action; + @override final String? title; + @override final IconData? icon; @override @@ -34,10 +38,7 @@ class _MenuButtonWidgetState extends State { hoverColor: Colors.transparent, highlightColor: Colors.transparent, onTap: () async { - final DatabaseHelper db = DatabaseHelper(); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + final cliUUID = StorageUtil().cliUUID; if (cliUUID.isEmpty) { return DialogUtil.warningDefault(context); diff --git a/lib/components/atomic_components/menu_card_item/menu_card_item.dart b/lib/components/atomic_components/menu_card_item/menu_card_item.dart index f4544500..4c68066e 100644 --- a/lib/components/atomic_components/menu_card_item/menu_card_item.dart +++ b/lib/components/atomic_components/menu_card_item/menu_card_item.dart @@ -5,14 +5,17 @@ import 'package:hub/flutter_flow/flutter_flow_theme.dart'; class MenuCardItem extends MenuEntry { const MenuCardItem({ - Key? key, + super.key, this.action, this.title, this.icon, - }) : super(key: key); + }); + @override final Function()? action; + @override final String? title; + @override final IconData? icon; @override diff --git a/lib/components/atomic_components/shared_components_atoms/appbar.dart b/lib/components/atomic_components/shared_components_atoms/appbar.dart index d8be68d9..6fe9a824 100644 --- a/lib/components/atomic_components/shared_components_atoms/appbar.dart +++ b/lib/components/atomic_components/shared_components_atoms/appbar.dart @@ -9,11 +9,11 @@ class AppBarUtil extends StatelessWidget implements PreferredSizeWidget { final Widget? actionButton; const AppBarUtil({ - Key? key, + super.key, required this.title, this.onBackButtonPressed, this.actionButton, - }) : super(key: key); + }); @override Widget build(BuildContext context) { diff --git a/lib/components/atomic_components/shared_components_atoms/custom_datepicker.dart b/lib/components/atomic_components/shared_components_atoms/custom_datepicker.dart index 78732aa3..596f50ce 100644 --- a/lib/components/atomic_components/shared_components_atoms/custom_datepicker.dart +++ b/lib/components/atomic_components/shared_components_atoms/custom_datepicker.dart @@ -18,7 +18,7 @@ class CustomDatePickerUtil extends StatefulWidget { final FormFieldValidator? validator; CustomDatePickerUtil({ - Key? key, + super.key, this.controller, this.focusNode, required this.hintText, @@ -29,7 +29,7 @@ class CustomDatePickerUtil extends StatefulWidget { required this.firstDate, this.lastDate, this.validator, - }) : super(key: key); + }); @override _CustomDatePickerState createState() => _CustomDatePickerState(); diff --git a/lib/components/atomic_components/shared_components_atoms/custom_input.dart b/lib/components/atomic_components/shared_components_atoms/custom_input.dart index b9878f1c..748448b9 100644 --- a/lib/components/atomic_components/shared_components_atoms/custom_input.dart +++ b/lib/components/atomic_components/shared_components_atoms/custom_input.dart @@ -22,7 +22,7 @@ class CustomInputUtil extends StatefulWidget { final void Function(String)? onChanged; CustomInputUtil( - {Key? key, + {super.key, this.controller, required this.labelText, required this.hintText, @@ -35,8 +35,7 @@ class CustomInputUtil extends StatefulWidget { this.maxLength = 80, this.validator, this.obscureText, - required this.haveMaxLength}) - : super(key: key); + required this.haveMaxLength}); @override State createState() => _CustomInputUtilState(); diff --git a/lib/components/atomic_components/shared_components_atoms/custom_select.dart b/lib/components/atomic_components/shared_components_atoms/custom_select.dart index 89396d14..950d43de 100644 --- a/lib/components/atomic_components/shared_components_atoms/custom_select.dart +++ b/lib/components/atomic_components/shared_components_atoms/custom_select.dart @@ -21,7 +21,7 @@ class CustomSelect extends StatefulWidget { bool isRequired; CustomSelect({ - Key? key, + super.key, required this.options, required this.optionsLabel, required this.hintText, @@ -30,7 +30,7 @@ class CustomSelect extends StatefulWidget { this.isRequired = false, this.dropDownValue, this.isMultiSelect = false, - }) : super(key: key); + }); @override _CustomSelectState createState() => _CustomSelectState(); diff --git a/lib/components/atomic_components/shared_components_atoms/media_upload_button.dart b/lib/components/atomic_components/shared_components_atoms/media_upload_button.dart index 7946e9b7..1dadacc9 100644 --- a/lib/components/atomic_components/shared_components_atoms/media_upload_button.dart +++ b/lib/components/atomic_components/shared_components_atoms/media_upload_button.dart @@ -15,12 +15,12 @@ class MediaUploadButtonUtil extends StatefulWidget { FFUploadedFile? uploadedFiles; MediaUploadButtonUtil({ - Key? key, + super.key, required this.onUploadComplete, required this.isUploading, required this.labelText, this.uploadedFiles, - }) : super(key: key); + }); @override State createState() => _MediaUploadButtonUtilState(); diff --git a/lib/components/atomic_components/shared_components_atoms/submit_button.dart b/lib/components/atomic_components/shared_components_atoms/submit_button.dart index 1ca6c5d2..08180f3d 100644 --- a/lib/components/atomic_components/shared_components_atoms/submit_button.dart +++ b/lib/components/atomic_components/shared_components_atoms/submit_button.dart @@ -9,7 +9,7 @@ class SubmitButtonUtil extends StatelessWidget { final String labelText; Future Function()? onPressed; - SubmitButtonUtil({ + SubmitButtonUtil({super.key, required this.labelText, required this.onPressed, }); diff --git a/lib/components/atomic_components/shared_components_atoms/tabview.dart b/lib/components/atomic_components/shared_components_atoms/tabview.dart index 422c3d60..6ec30597 100644 --- a/lib/components/atomic_components/shared_components_atoms/tabview.dart +++ b/lib/components/atomic_components/shared_components_atoms/tabview.dart @@ -1,4 +1,3 @@ -import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; diff --git a/lib/components/molecular_components/menu_item/menu_item.dart b/lib/components/molecular_components/menu_item/menu_item.dart index 395c21ce..ce3aac0a 100644 --- a/lib/components/molecular_components/menu_item/menu_item.dart +++ b/lib/components/molecular_components/menu_item/menu_item.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; abstract class MenuEntry extends StatefulWidget { const MenuEntry({ - Key? key, + super.key, this.action, this.title, this.icon, - }) : super(key: key); + }); final Function()? action; final String? title; diff --git a/lib/components/molecular_components/message_opt_modal/opt_modal_widget.dart b/lib/components/molecular_components/message_opt_modal/opt_modal_widget.dart index 19ecdff5..fe501dc9 100644 --- a/lib/components/molecular_components/message_opt_modal/opt_modal_widget.dart +++ b/lib/components/molecular_components/message_opt_modal/opt_modal_widget.dart @@ -10,10 +10,10 @@ class OptModalWidget extends StatefulWidget { final String defaultAccessType; const OptModalWidget({ - Key? key, + super.key, this.defaultPersonType = '.*', this.defaultAccessType = '.*', - }) : super(key: key); + }); @override _OptModalWidgetState createState() => _OptModalWidgetState(); diff --git a/lib/components/molecular_components/opt_modal/opt_modal_widget.dart b/lib/components/molecular_components/opt_modal/opt_modal_widget.dart index 21be811f..2a5e9329 100644 --- a/lib/components/molecular_components/opt_modal/opt_modal_widget.dart +++ b/lib/components/molecular_components/opt_modal/opt_modal_widget.dart @@ -11,10 +11,10 @@ class OptModalWidget extends StatefulWidget { final String defaultAccessType; const OptModalWidget({ - Key? key, + super.key, this.defaultPersonType = '.*', this.defaultAccessType = '.*', - }) : super(key: key); + }); @override _OptModalWidgetState createState() => _OptModalWidgetState(); @@ -315,12 +315,12 @@ class _OptModalWidgetState extends State { ), ElevatedButton( onPressed: _applyFilter, - child: - Text(FFLocalizations.of(context).getText('88kshkph')), style: ElevatedButton.styleFrom( foregroundColor: FlutterFlowTheme.of(context).info, backgroundColor: FlutterFlowTheme.of(context).primary, ), + child: + Text(FFLocalizations.of(context).getText('88kshkph')), ), ], ), diff --git a/lib/components/molecular_components/order_filter_modal/order_filter_modal_widget.dart b/lib/components/molecular_components/order_filter_modal/order_filter_modal_widget.dart index ddd13a38..ce905389 100644 --- a/lib/components/molecular_components/order_filter_modal/order_filter_modal_widget.dart +++ b/lib/components/molecular_components/order_filter_modal/order_filter_modal_widget.dart @@ -4,16 +4,18 @@ import 'package:hub/components/molecular_components/order_filter_modal/order_fil 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/secure_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; class OrderFilterModalWidget extends StatefulWidget { final String defaultAdresseeType; final String defaultStatus; const OrderFilterModalWidget({ - Key? key, + super.key, this.defaultAdresseeType = '.*', this.defaultStatus = '.*', - }) : super(key: key); + }); @override _OrderFilterModalWidgetState createState() => _OrderFilterModalWidgetState(); @@ -25,24 +27,25 @@ class _OrderFilterModalWidgetState extends State { late Map selected; final List> adresseeTypeOptions = [ { - 'title': FFLocalizations.of(AppState().context!) + 'title': FFLocalizations.of(StorageUtil().context!) .getVariableText(enText: 'Resident', ptText: 'Morador'), 'value': 'MOR' }, { - 'title': FFLocalizations.of(AppState().context!) + 'title': FFLocalizations.of(StorageUtil().context!) .getVariableText(enText: 'Property', ptText: 'Propriedade'), 'value': 'PRO' }, ]; final List> statusOptions = [ { - 'title': FFLocalizations.of(AppState().context!).getVariableText( - ptText: 'Aguardando Retirada', enText: 'Waiting for Pickup'), + 'title': FFLocalizations.of(StorageUtil().context!) + .getVariableText( + ptText: 'Aguardando Retirada', enText: 'Waiting for Pickup'), 'value': 'notPickedUp' }, { - 'title': FFLocalizations.of(AppState().context!) + 'title': FFLocalizations.of(StorageUtil().context!) .getVariableText(ptText: 'Retirado', enText: 'Picked Up'), 'value': 'pickedUp' }, diff --git a/lib/components/molecular_components/visitor_not_found_component/visitor_not_found_component_widget.dart b/lib/components/molecular_components/visitor_not_found_component/visitor_not_found_component_widget.dart index 5b5ce3be..00261f19 100644 --- a/lib/components/molecular_components/visitor_not_found_component/visitor_not_found_component_widget.dart +++ b/lib/components/molecular_components/visitor_not_found_component/visitor_not_found_component_widget.dart @@ -9,7 +9,7 @@ import 'package:hub/flutter_flow/flutter_flow_widgets.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; class VisitorNotFoundComponentWidget extends StatefulWidget { - const VisitorNotFoundComponentWidget({this.doc, Key? key}) : super(key: key); + const VisitorNotFoundComponentWidget({this.doc, super.key}); final String? doc; @override diff --git a/lib/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart b/lib/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart index 06f4b4ee..82d5e236 100644 --- a/lib/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart +++ b/lib/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart @@ -3,9 +3,10 @@ import 'package:hub/components/organism_components/bottom_arrow_linked_locals_co import 'package:hub/components/templates_components/card_item_template_component/card_item_template_component_widget.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/log_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:provider/provider.dart'; import '/backend/api_requests/api_calls.dart'; @@ -65,16 +66,12 @@ class _BottomArrowLinkedLocalsComponentWidgetState Future _fetchLocals() async { try { - final DatabaseHelper db = DatabaseHelper(); - final devUUID = await db.get(key: 'devUUID', field: 'value'); - final userUUID = await db.get(key: 'userUUID', field: 'value'); - setState(() => _loading = true); var response = await PhpGroup.getLocalsCall.call(); final List locals = response.jsonBody['locais'] ?? []; - if (locals != null && locals.isNotEmpty) { + if (locals.isNotEmpty) { setState(() { _localsWrap.addAll(locals); _hasData = true; @@ -84,9 +81,9 @@ class _BottomArrowLinkedLocalsComponentWidgetState // Verifica se há apenas um local e se o status é 'A' if (locals.length == 1 && locals[0]['CLU_STATUS'] == 'A') { final local = locals[0]; - db.update('cliUUID', local['CLI_ID'], 'local'); - db.update('cliName', local['CLI_NOME'], 'local'); - db.update('ownerUUID', local['CLU_OWNER_ID'], 'local'); + StorageUtil().cliName = local['CLI_NOME']; + StorageUtil().cliUUID = local['CLI_ID']; + StorageUtil().ownerUUID = local['CLU_OWNER_ID']; context.pop(); } @@ -108,6 +105,7 @@ class _BottomArrowLinkedLocalsComponentWidgetState _loading = false; }); } + return null; } Future _fetchResponseLink(String status, String cliID) async { @@ -173,12 +171,10 @@ class _BottomArrowLinkedLocalsComponentWidgetState labelsHashMap: _labelsHashMap(local), statusHashMap: [_statusHashMap(local)], onTapCardItemAction: () async { - final DatabaseHelper db = DatabaseHelper(); - if (local['CLU_STATUS'] == 'A') { - db.update('cliUUID', local['CLI_ID'], 'local'); - db.update('cliName', local['CLI_NOME'], 'local'); - db.update('ownerUUID', local['CLU_OWNER_ID'], 'local'); + StorageUtil().cliUUID = local['CLI_ID']; + StorageUtil().cliName = local['CLI_NOME']; + StorageUtil().ownerUUID = local['CLU_OWNER_ID']; context.pop(); } else if (local['CLU_STATUS'] == 'B') { @@ -247,8 +243,6 @@ class _BottomArrowLinkedLocalsComponentWidgetState @override Widget build(BuildContext context) { - context.watch(); - double height = MediaQuery.sizeOf(context).height; return Align( @@ -300,7 +294,7 @@ class _BottomArrowLinkedLocalsComponentWidgetState FFLocalizations.of(context).getVariableText( ptText: 'Escolha um local', enText: 'Choose a location'), overflow: TextOverflow.ellipsis, - style: TextStyle(fontWeight: FontWeight.bold), + style: const TextStyle(fontWeight: FontWeight.bold), )))), ), ), diff --git a/lib/components/organism_components/local_profile_component/local_profile_component_model.dart b/lib/components/organism_components/local_profile_component/local_profile_component_model.dart index 6b17df55..84b308c6 100644 --- a/lib/components/organism_components/local_profile_component/local_profile_component_model.dart +++ b/lib/components/organism_components/local_profile_component/local_profile_component_model.dart @@ -1,7 +1,6 @@ -import 'dart:ffi'; -import 'dart:math'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import '/flutter_flow/flutter_flow_util.dart'; import 'local_profile_component_widget.dart' show LocalProfileComponentWidget; @@ -11,7 +10,6 @@ import 'package:flutter/material.dart'; class LocalProfileComponentModel extends FlutterFlowModel { - final DatabaseHelper db = DatabaseHelper(); String cliName = ''; String cliUUID = ''; VoidCallback? setStateCallback; @@ -22,12 +20,8 @@ class LocalProfileComponentModel } Future getData() async { - cliName = await db - .get(key: 'cliName', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + cliName = StorageUtil().cliName; + cliUUID = StorageUtil().cliUUID; setStateCallback?.call(); } diff --git a/lib/components/organism_components/local_profile_component/local_profile_component_widget.dart b/lib/components/organism_components/local_profile_component/local_profile_component_widget.dart index e0dbbc42..f5b709e7 100644 --- a/lib/components/organism_components/local_profile_component/local_profile_component_widget.dart +++ b/lib/components/organism_components/local_profile_component/local_profile_component_widget.dart @@ -5,8 +5,9 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:hub/shared/utils/dialog_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:provider/provider.dart'; import '/flutter_flow/custom_functions.dart' as functions; @@ -16,10 +17,8 @@ import 'local_profile_component_model.dart'; export 'local_profile_component_model.dart'; -//// - class LocalProfileComponentWidget extends StatefulWidget { - LocalProfileComponentWidget({Key? key}) : super(key: key); + const LocalProfileComponentWidget({super.key}); @override State createState() => @@ -29,7 +28,6 @@ class LocalProfileComponentWidget extends StatefulWidget { class _LocalProfileComponentWidgetState extends State { late LocalProfileComponentModel _model; - final DatabaseHelper db = DatabaseHelper(); @override void setState(VoidCallback callback) { @@ -45,9 +43,7 @@ class _LocalProfileComponentWidgetState _model.setStateCallback = () => safeSetState(() {}); () async { - _model.cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + _model.cliUUID = StorageUtil().cliUUID; if (_model.cliUUID.isEmpty) { await processLocals(); @@ -72,26 +68,31 @@ class _LocalProfileComponentWidgetState // final errorMsg = response.jsonBody['error_msg']; if (error == false) { - final whatsapp = response.jsonBody['whatsapp'] ?? false; - final provisional = response.jsonBody['provisional'] ?? false; - final pets = response.jsonBody['pet'] ?? false; - final petAmountRegister = response.jsonBody['petAmountRegister'] ?? '0'; - final name = response.jsonBody['visitado']['VDO_NOME']; + final bool whatsapp = response.jsonBody['whatsapp'] ?? false; + final bool provisional = response.jsonBody['provisional'] ?? false; + final bool pets = response.jsonBody['pet'] ?? false; + final String petAmountRegister = + response.jsonBody['petAmountRegister'].toString().isEmpty + ? '0' + : response.jsonBody['petAmountRegister'].toString(); + final String name = response.jsonBody['visitado']['VDO_NOME']; - await db.update('whatsapp', whatsapp.toString(), 'local'); - await db.update('provisional', provisional.toString(), 'local'); - await db.update('pets', pets.toString(), 'local'); - await db.update('petAmountRegister', petAmountRegister, 'local'); - await db.update('name', name, 'local'); + StorageUtil().whatsapp = whatsapp; + StorageUtil().provisional = provisional; + StorageUtil().pets = pets; + StorageUtil().petAmountRegister = petAmountRegister; + StorageUtil().userName = name; safeSetState(() {}); return; + } else if (error == true) { + DialogUtil.warningDefault(context).whenComplete(() => processLocals()); + safeSetState(() {}); } - DialogUtil.warningDefault(context).whenComplete(() => processLocals()); - safeSetState(() {}); return; - } catch (e, s) { + } catch (e) { + log('() => error: $e'); // Add this line to log the error DialogUtil.warningDefault(context).whenComplete(() => processLocals()); } } @@ -100,9 +101,7 @@ class _LocalProfileComponentWidgetState try { final GetLocalsCall callback = PhpGroup.getLocalsCall; - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + final cliUUID = StorageUtil().cliUUID; var response = await callback.call(); List locals = response.jsonBody['locais'] ?? []; @@ -146,8 +145,6 @@ class _LocalProfileComponentWidgetState @override Widget build(BuildContext context) { - context.watch(); - return Container( decoration: const BoxDecoration(), child: Align( diff --git a/lib/components/organism_components/menu_component/menu_component_model.dart b/lib/components/organism_components/menu_component/menu_component_model.dart index fe9f9d7e..6c99d9a6 100644 --- a/lib/components/organism_components/menu_component/menu_component_model.dart +++ b/lib/components/organism_components/menu_component/menu_component_model.dart @@ -3,7 +3,9 @@ import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_model.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/shared/extensions/dialog_extensions.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:sqflite/sqflite.dart'; import '/components/molecular_components/option_selection_modal/option_selection_modal_widget.dart'; @@ -70,11 +72,7 @@ class MenuComponentModel extends FlutterFlowModel { } Future deliverySchedule(BuildContext context) async { - final DatabaseHelper db = DatabaseHelper(); - - final bool isProvisional = await db - .get(key: 'provisional', field: 'value') - .then((value) => value.toString() == 'true') as bool; + final bool isProvisional = StorageUtil().provisional; if (isProvisional == true) { context.push( @@ -93,11 +91,7 @@ class MenuComponentModel extends FlutterFlowModel { } Future provisionalSchedule(BuildContext context) async { - final DatabaseHelper db = DatabaseHelper(); - - final isProvisional = await db - .get(key: 'provisional', field: 'value') - .then((value) => value.toString() == 'true') as bool; + final isProvisional = StorageUtil().provisional; if (isProvisional == true) { context.push( '/provisionalSchedule', @@ -115,10 +109,7 @@ class MenuComponentModel extends FlutterFlowModel { } Future fastPassAction(BuildContext context) async { - final DatabaseHelper db = DatabaseHelper(); - final isWpp = await db.get(key: 'whatsapp', field: 'value').then((value) { - return value.toString() == 'true'; - }) as bool; + final isWpp = StorageUtil().whatsapp; if (isWpp) { context.push( '/fastPassPage', @@ -202,8 +193,6 @@ class MenuComponentModel extends FlutterFlowModel { } Future signOut(BuildContext context) async { - final DatabaseHelper db = DatabaseHelper(); - showAlertDialog( context, 'Logout', @@ -212,7 +201,7 @@ class MenuComponentModel extends FlutterFlowModel { ptText: 'Tem certeza', ), () async { PhpGroup.unregisterDevice.call(); - AppState().deleteAll(); + StorageUtil.purge(); context.go( '/welcomePage', @@ -224,7 +213,7 @@ class MenuComponentModel extends FlutterFlowModel { ), }, ); - await db.purge(); + await SQLiteStorageHelper().purge(); }); } @@ -242,10 +231,7 @@ class MenuComponentModel extends FlutterFlowModel { } Future packageOrder(BuildContext context) async { - final DatabaseHelper db = DatabaseHelper(); - final isWpp = await db.get(key: 'whatsapp', field: 'value').then((value) { - return value.toString() == 'true'; - }) as bool; + final isWpp = StorageUtil().whatsapp; if (isWpp) { context.push( @@ -264,10 +250,7 @@ class MenuComponentModel extends FlutterFlowModel { } Future reservation(BuildContext context) async { - final DatabaseHelper db = DatabaseHelper(); - final isWpp = await db.get(key: 'whatsapp', field: 'value').then((value) { - return value.toString() == 'true'; - }) as bool; + final isWpp = StorageUtil().whatsapp; if (isWpp) { context.push( '/reservation', @@ -294,13 +277,13 @@ class MenuComponentModel extends FlutterFlowModel { return Padding( padding: MediaQuery.viewInsetsOf(context), child: OptionSelectionModalWidget( - routesListStr: [ + routesListStr: const [ 'liberationHistory', 'acessHistoryPage', 'scheduleCompleteVisitPage', 'messageHistoryPage' ], - iconsListIcon: [ + iconsListIcon: const [ Icons.history_rounded, Icons.history_rounded, Icons.history_rounded, @@ -383,10 +366,7 @@ class MenuComponentModel extends FlutterFlowModel { } Future petsAction(BuildContext context) async { - final DatabaseHelper db = DatabaseHelper(); - bool isPet = await db.get(key: 'pets', field: 'value').then((value) { - return value.toString() == 'true'; - }) as bool; + bool isPet = StorageUtil().pets; if (isPet) { context.push( '/petsPage', diff --git a/lib/components/organism_components/menu_component/menu_component_widget.dart b/lib/components/organism_components/menu_component/menu_component_widget.dart index 26650732..22c4710c 100644 --- a/lib/components/organism_components/menu_component/menu_component_widget.dart +++ b/lib/components/organism_components/menu_component/menu_component_widget.dart @@ -3,7 +3,7 @@ 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/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import '/components/organism_components/menu_list_view_component/menu_list_view_component_widget.dart'; import '/components/organism_components/menu_staggered_view_component/menu_staggered_view_component_widget.dart'; diff --git a/lib/components/organism_components/message_well_component/message_well_component_model.dart b/lib/components/organism_components/message_well_component/message_well_component_model.dart index e6b577de..d3aad87c 100644 --- a/lib/components/organism_components/message_well_component/message_well_component_model.dart +++ b/lib/components/organism_components/message_well_component/message_well_component_model.dart @@ -6,9 +6,6 @@ import '/flutter_flow/flutter_flow_util.dart'; import 'message_well_component_widget.dart' show MessageWellComponentWidget; import 'package:flutter/material.dart'; -/// - -import 'package:flutter/material.dart'; class MessageWellComponentModel diff --git a/lib/components/organism_components/message_well_component/message_well_component_widget.dart b/lib/components/organism_components/message_well_component/message_well_component_widget.dart index abe13043..40005da6 100644 --- a/lib/components/organism_components/message_well_component/message_well_component_widget.dart +++ b/lib/components/organism_components/message_well_component/message_well_component_widget.dart @@ -8,7 +8,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:provider/provider.dart'; import 'package:rxdart/rxdart.dart'; @@ -35,7 +35,7 @@ class _MessageWellComponentWidgetState @override void initState() { super.initState(); - WidgetsBinding.instance?.addPostFrameCallback((_) { + WidgetsBinding.instance.addPostFrameCallback((_) { context.read().fetchMessages(); }); @@ -339,7 +339,6 @@ class MessageWellState { class MessageWellNotifier extends StateNotifier { var _totalPageNumber = 1; int get totalPageNumber => _totalPageNumber; - final DatabaseHelper db = DatabaseHelper(); set totalPageNumber(int value) { _totalPageNumber = value; diff --git a/lib/components/organism_components/schedule_visit_detail/schedule_visit_detail_model.dart b/lib/components/organism_components/schedule_visit_detail/schedule_visit_detail_model.dart index c9950487..f594143b 100644 --- a/lib/components/organism_components/schedule_visit_detail/schedule_visit_detail_model.dart +++ b/lib/components/organism_components/schedule_visit_detail/schedule_visit_detail_model.dart @@ -1,16 +1,15 @@ -import 'dart:developer'; import 'package:hub/backend/api_requests/api_manager.dart'; import 'package:flutter/material.dart'; import 'package:hub/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart'; import 'package:hub/flutter_flow/flutter_flow_model.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:intl/intl.dart'; class ScheduleVisitDetailModel extends FlutterFlowModel { - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -60,9 +59,9 @@ class ScheduleVisitDetailModel } Future initDB() async { - devUUID = await db.get(key: 'devUUID', field: 'value'); - userUUID = await db.get(key: 'userUUID', field: 'value'); - cliUUID = await db.get(key: 'cliUUID', field: 'value'); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliUUID; } @override diff --git a/lib/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart b/lib/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart index b347c157..19bbfa3a 100644 --- a/lib/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart +++ b/lib/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart @@ -9,7 +9,6 @@ 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'; import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:provider/provider.dart'; class ScheduleVisitDetailWidget extends StatefulWidget { const ScheduleVisitDetailWidget({ @@ -94,7 +93,6 @@ class _ScheduleVisitDetailWidgetState extends State { @override Widget build(BuildContext context) { - context.watch(); final visitorsData = widget.visitorJsonList!.toList().take(2).toList(); final visitorsDataItem = visitorsData[0]; diff --git a/lib/components/organism_components/up_arrow_linked_locals_component/up_arrow_linked_locals_component_model.dart b/lib/components/organism_components/up_arrow_linked_locals_component/up_arrow_linked_locals_component_model.dart index 5d2c488c..231bdfb6 100644 --- a/lib/components/organism_components/up_arrow_linked_locals_component/up_arrow_linked_locals_component_model.dart +++ b/lib/components/organism_components/up_arrow_linked_locals_component/up_arrow_linked_locals_component_model.dart @@ -2,11 +2,11 @@ import 'package:hub/components/organism_components/up_arrow_linked_locals_compon import 'package:hub/flutter_flow/flutter_flow_model.dart'; import 'package:flutter/material.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; class UpArrowLinkedLocalsComponentModel extends FlutterFlowModel { - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -18,18 +18,10 @@ class UpArrowLinkedLocalsComponentModel } Future initDB() async { - devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); - cliName = await db - .get(key: 'cliName', field: 'value') - .then((value) => value.toString()); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliUUID; + cliName = StorageUtil().cliName; } @override diff --git a/lib/components/organism_components/up_arrow_linked_locals_component/up_arrow_linked_locals_component_widget.dart b/lib/components/organism_components/up_arrow_linked_locals_component/up_arrow_linked_locals_component_widget.dart index 85ca7b2c..9415e7fc 100644 --- a/lib/components/organism_components/up_arrow_linked_locals_component/up_arrow_linked_locals_component_widget.dart +++ b/lib/components/organism_components/up_arrow_linked_locals_component/up_arrow_linked_locals_component_widget.dart @@ -7,7 +7,6 @@ import 'package:hub/components/organism_components/up_arrow_linked_locals_compon 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:provider/provider.dart'; class UpArrowLinkedLocalsComponentWidget extends StatefulWidget { const UpArrowLinkedLocalsComponentWidget({super.key}); @@ -42,8 +41,6 @@ class _UpArrowLinkedLocalsComponentWidgetState @override Widget build(BuildContext context) { - context.watch(); - return Align( alignment: const AlignmentDirectional(0.0, -1.0), child: Container( diff --git a/lib/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_model.dart b/lib/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_model.dart index 0ef05d34..6622fb27 100644 --- a/lib/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_model.dart +++ b/lib/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_model.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import '/backend/api_requests/api_calls.dart'; import '/flutter_flow/flutter_flow_util.dart'; @@ -9,7 +10,6 @@ import 'access_notification_modal_template_component_widget.dart' class AccessNotificationModalTemplateComponentModel extends FlutterFlowModel { - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -33,15 +33,9 @@ class AccessNotificationModalTemplateComponentModel } Future initDB() async { - devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliUUID; } @override diff --git a/lib/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_widget.dart b/lib/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_widget.dart index ffb2bd97..652bdfe6 100644 --- a/lib/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_widget.dart +++ b/lib/components/templates_components/access_notification_modal_template_component/access_notification_modal_template_component_widget.dart @@ -3,7 +3,6 @@ import '/flutter_flow/flutter_flow_util.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; -import 'package:provider/provider.dart'; import 'access_notification_modal_template_component_model.dart'; export 'access_notification_modal_template_component_model.dart'; @@ -67,8 +66,6 @@ class _AccessNotificationModalTemplateComponentWidgetState @override Widget build(BuildContext context) { - context.watch(); - String labelTypeResident = FFLocalizations.of(context) .getVariableText(enText: 'Resident', ptText: 'Morador'); diff --git a/lib/components/templates_components/card_item_template_component/card_item_template_component_widget.dart b/lib/components/templates_components/card_item_template_component/card_item_template_component_widget.dart index 01386be5..4cb84ecc 100644 --- a/lib/components/templates_components/card_item_template_component/card_item_template_component_widget.dart +++ b/lib/components/templates_components/card_item_template_component/card_item_template_component_widget.dart @@ -13,12 +13,12 @@ export 'card_item_template_component_model.dart'; class CardItemTemplateComponentWidget extends StatefulWidget { const CardItemTemplateComponentWidget({ - Key? key, + super.key, required this.labelsHashMap, required this.statusHashMap, required this.imagePath, required this.onTapCardItemAction, - }) : super(key: key); + }); final Map? labelsHashMap; final List?> statusHashMap; @@ -208,8 +208,6 @@ class _CardItemTemplateComponentWidgetState @override Widget build(BuildContext context) { - context.watch(); - return InkWell( splashColor: Colors.transparent, focusColor: Colors.transparent, diff --git a/lib/components/templates_components/change_passs_qr_code_pass_key_template_component/change_pass_model.dart b/lib/components/templates_components/change_passs_qr_code_pass_key_template_component/change_pass_model.dart index 25cc4529..716e98ef 100644 --- a/lib/components/templates_components/change_passs_qr_code_pass_key_template_component/change_pass_model.dart +++ b/lib/components/templates_components/change_passs_qr_code_pass_key_template_component/change_pass_model.dart @@ -26,10 +26,12 @@ class PassKeyTemplateComponentModel ptText: 'Este campo é obrigatório', ); } - if ( val.length < 4 ) return FFLocalizations.of(context).getVariableText( + if ( val.length < 4 ) { + return FFLocalizations.of(context).getVariableText( enText: 'This field must have at least 4 characters', ptText: 'Este campo deve ter pelo menos 4 caracteres', ); + } return null; } diff --git a/lib/components/templates_components/change_passs_qr_code_pass_key_template_component/change_pass_widget.dart b/lib/components/templates_components/change_passs_qr_code_pass_key_template_component/change_pass_widget.dart index 36f51006..b709cc5b 100644 --- a/lib/components/templates_components/change_passs_qr_code_pass_key_template_component/change_pass_widget.dart +++ b/lib/components/templates_components/change_passs_qr_code_pass_key_template_component/change_pass_widget.dart @@ -3,6 +3,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_util.dart'; @@ -129,7 +131,7 @@ class _PassKeyTemplateWidgetState extends State { child: Text( FFLocalizations.of(context).getVariableText( enText: 'INSERT PASSWORD', - ptText: AppState().accessPass != '' + ptText: StorageUtil().accessPass != '' ? 'ALTERAR SENHA' : 'ADICIONAR SENHA', ), @@ -316,9 +318,12 @@ class _PassKeyTemplateWidgetState extends State { context.pop(true); }, text: FFLocalizations.of(context).getVariableText( - ptText: - AppState().accessPass != '' ? 'Alterar' : 'Adicionar', - enText: AppState().accessPass != '' ? 'Change' : 'Add', + ptText: StorageUtil().accessPass != '' + ? 'Alterar' + : 'Adicionar', + enText: StorageUtil().accessPass != '' + ? 'Change' + : 'Add', ), options: FFButtonOptions( width: 270.0, diff --git a/lib/components/templates_components/details_component/details_component_widget.dart b/lib/components/templates_components/details_component/details_component_widget.dart index 48bf6691..ee959e7f 100644 --- a/lib/components/templates_components/details_component/details_component_widget.dart +++ b/lib/components/templates_components/details_component/details_component_widget.dart @@ -64,7 +64,6 @@ class _DetailsComponentWidgetState extends State { @override Widget build(BuildContext context) { - context.watch(); // CachedNetworkImage.evictFromCache(widget.imagePath ?? ''); return Container( diff --git a/lib/components/templates_components/forgot_password_template_component/forgot_password_template_component_widget.dart b/lib/components/templates_components/forgot_password_template_component/forgot_password_template_component_widget.dart index a5033296..88a2f4b8 100644 --- a/lib/components/templates_components/forgot_password_template_component/forgot_password_template_component_widget.dart +++ b/lib/components/templates_components/forgot_password_template_component/forgot_password_template_component_widget.dart @@ -1,4 +1,3 @@ -import 'dart:developer'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/shared/utils/dialog_util.dart'; @@ -6,7 +5,6 @@ import 'package:hub/shared/utils/log_util.dart'; import 'package:hub/shared/utils/validator_util.dart'; import '/backend/api_requests/api_calls.dart'; -import '/components/molecular_components/throw_exception/throw_exception_widget.dart'; import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_widgets.dart'; diff --git a/lib/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_model.dart b/lib/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_model.dart index a95c1eaa..63ce5b0e 100644 --- a/lib/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_model.dart +++ b/lib/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_model.dart @@ -1,15 +1,12 @@ import 'package:flutter/material.dart'; -import 'package:hub/app_state.dart'; -import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_widget.dart'; import 'package:hub/flutter_flow/flutter_flow_model.dart'; -import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; class LiberationHistoryItemDetailsTemplateComponentModel extends FlutterFlowModel< LiberationHistoryItemDetailsTemplateComponentWidget> { - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -31,15 +28,9 @@ class LiberationHistoryItemDetailsTemplateComponentModel void initState(BuildContext context) {} Future initDatabase() async { - devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliUUID; } @override diff --git a/lib/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_widget.dart b/lib/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_widget.dart index 23c6a71e..539f36eb 100644 --- a/lib/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_widget.dart +++ b/lib/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_widget.dart @@ -1,12 +1,9 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; -import 'package:hub/app_state.dart'; import 'package:hub/components/templates_components/liberation_history_item_details_template_component/liberation_history_item_details_template_component_model.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:provider/provider.dart'; class LiberationHistoryItemDetailsTemplateComponentWidget extends StatefulWidget { @@ -68,8 +65,6 @@ class _LiberationHistoryItemDetailsTemplateComponentWidgetState @override Widget build(BuildContext context) { - context.watch(); - return Align( alignment: const AlignmentDirectional(0.0, 0.0), child: Padding( diff --git a/lib/components/templates_components/message_notificaion_modal_template_component/message_notification_model.dart b/lib/components/templates_components/message_notificaion_modal_template_component/message_notification_model.dart index f949913a..74099118 100644 --- a/lib/components/templates_components/message_notificaion_modal_template_component/message_notification_model.dart +++ b/lib/components/templates_components/message_notificaion_modal_template_component/message_notification_model.dart @@ -1,9 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:hub/app_state.dart'; -import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/components/templates_components/message_notificaion_modal_template_component/message_notification_widget.dart'; import 'package:hub/flutter_flow/flutter_flow_model.dart'; -import 'package:hub/flutter_flow/nav/nav.dart'; class MessageNotificationModalTemplateComponentModel extends FlutterFlowModel { diff --git a/lib/components/templates_components/message_notificaion_modal_template_component/message_notification_widget.dart b/lib/components/templates_components/message_notificaion_modal_template_component/message_notification_widget.dart index 31b859f5..2055c251 100644 --- a/lib/components/templates_components/message_notificaion_modal_template_component/message_notification_widget.dart +++ b/lib/components/templates_components/message_notificaion_modal_template_component/message_notification_widget.dart @@ -3,7 +3,6 @@ import 'package:google_fonts/google_fonts.dart'; import 'package:hub/components/templates_components/message_notificaion_modal_template_component/message_notification_model.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; -import 'package:provider/provider.dart'; class MessageNotificationModalTemplateComponentWidget extends StatefulWidget { const MessageNotificationModalTemplateComponentWidget({ @@ -59,8 +58,6 @@ class _MessageNotificationModalTemplateComponentWidgetState @override Widget build(BuildContext context) { - context.watch(); - return Container( width: MediaQuery.sizeOf(context).width, height: MediaQuery.sizeOf(context).height, diff --git a/lib/components/templates_components/provisional_schedule_template/provisional_schedule_template_model.dart b/lib/components/templates_components/provisional_schedule_template/provisional_schedule_template_model.dart index 19311f40..d8e0e8e0 100644 --- a/lib/components/templates_components/provisional_schedule_template/provisional_schedule_template_model.dart +++ b/lib/components/templates_components/provisional_schedule_template/provisional_schedule_template_model.dart @@ -2,12 +2,11 @@ import 'package:flutter/material.dart'; import 'package:hub/backend/api_requests/api_manager.dart'; import 'package:hub/components/templates_components/provisional_schedule_template/provisional_shcedule_template_widget.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; -import 'package:sqflite/sqflite.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; class ScheduleProvisionalVisitPageModel extends FlutterFlowModel { - final DatabaseHelper db = DatabaseHelper(); String cliUUID = ''; String devUUID = ''; String userUUID = ''; @@ -125,11 +124,11 @@ class ScheduleProvisionalVisitPageModel } Future init() async { - cliUUID = await db.get(key: 'cliUUID', field: 'value'); - devUUID = await db.get(key: 'devUUID', field: 'value'); - userUUID = await db.get(key: 'userUUID', field: 'value'); - cliName = await db.get(key: 'cliName', field: 'value'); - ownerUUID = await db.get(key: 'ownerUUID', field: 'value'); + cliUUID = StorageUtil().cliUUID; + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliName = StorageUtil().cliName; + ownerUUID = StorageUtil().ownerUUID; setState?.call(); } diff --git a/lib/components/templates_components/provisional_schedule_template/provisional_shcedule_template_widget.dart b/lib/components/templates_components/provisional_schedule_template/provisional_shcedule_template_widget.dart index 68f8a91f..ad763b85 100644 --- a/lib/components/templates_components/provisional_schedule_template/provisional_shcedule_template_widget.dart +++ b/lib/components/templates_components/provisional_schedule_template/provisional_shcedule_template_widget.dart @@ -4,10 +4,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:hub/components/templates_components/provisional_schedule_template/provisional_schedule_template_model.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/log_util.dart'; -import 'package:provider/provider.dart'; import '/backend/api_requests/api_calls.dart'; import '/flutter_flow/flutter_flow_theme.dart'; @@ -42,8 +40,6 @@ class _ScheduleProvisionalVisitPageWidgetState @override Widget build(BuildContext context) { - context.watch(); - return GestureDetector( onTap: () => FocusScope.of(context).unfocus(), child: SingleChildScrollView( diff --git a/lib/components/templates_components/qr_code_pass_key_template_component/qr_code_pass_key_template_component_model.dart b/lib/components/templates_components/qr_code_pass_key_template_component/qr_code_pass_key_template_component_model.dart index da0ca0a5..7d6efd50 100644 --- a/lib/components/templates_components/qr_code_pass_key_template_component/qr_code_pass_key_template_component_model.dart +++ b/lib/components/templates_components/qr_code_pass_key_template_component/qr_code_pass_key_template_component_model.dart @@ -21,10 +21,12 @@ class QrCodePassKeyTemplateComponentModel ptText: 'Este campo é obrigatório', ); } - if (val.length < 4) return FFLocalizations.of(context).getVariableText( + if (val.length < 4) { + return FFLocalizations.of(context).getVariableText( enText: 'This field must be at least 4 characters', ptText: 'Este campo deve ter pelo menos 4 caracteres', ); + } return null; } diff --git a/lib/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_model.dart b/lib/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_model.dart index 3e752121..2bde3236 100644 --- a/lib/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_model.dart +++ b/lib/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_model.dart @@ -1,7 +1,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:hub/shared/utils/validator_util.dart'; import '/backend/api_requests/api_calls.dart'; @@ -12,7 +13,6 @@ import 'regisiter_vistor_template_component_widget.dart'; class RegisiterVistorTemplateComponentModel extends FlutterFlowModel { Timer? _debounceTimer; - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -135,9 +135,9 @@ class RegisiterVistorTemplateComponentModel } Future initializeDatabase() async { - devUUID = await db.get(key: 'devUUID', field: 'value'); - userUUID = await db.get(key: 'userUUID', field: 'value'); - cliUUID = await db.get(key: 'cliUUID', field: 'value'); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliUUID; } @override diff --git a/lib/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart b/lib/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart index eeb79823..924af967 100644 --- a/lib/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart +++ b/lib/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart @@ -68,7 +68,7 @@ class _RegisiterVistorTemplateComponentWidgetState _model.textController4 ??= TextEditingController(); _model.textFieldFocusNode4 ??= FocusNode(); - WidgetsBinding.instance?.addPostFrameCallback((timeStamp) { + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { _model.textController2.text = widget.doc ?? ''; }); } @@ -121,7 +121,6 @@ class _RegisiterVistorTemplateComponentWidgetState @override Widget build(BuildContext context) { - context.watch(); return Align( alignment: const AlignmentDirectional(0.0, 1.0), child: Container( diff --git a/lib/components/templates_components/sign_in_template_component/sign_in_template_component_model.dart b/lib/components/templates_components/sign_in_template_component/sign_in_template_component_model.dart index e17c09d5..f4bbed31 100644 --- a/lib/components/templates_components/sign_in_template_component/sign_in_template_component_model.dart +++ b/lib/components/templates_components/sign_in_template_component/sign_in_template_component_model.dart @@ -1,12 +1,12 @@ import 'package:hub/backend/api_requests/api_calls.dart'; -import 'package:hub/backend/api_requests/api_manager.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/flutter_flow/random_data_util.dart'; -import 'package:hub/pages/home_page/home_page_model.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:hub/shared/utils/device_util.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/log_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import '/flutter_flow/flutter_flow_util.dart'; import 'sign_in_template_component_widget.dart' @@ -86,9 +86,8 @@ class SignInTemplateComponentModel }) async { try { final ApiCallResponse? response; - final DatabaseHelper db = DatabaseHelper(); final LoginCall callback = PhpGroup.loginCall; - AppState().deviceDescription = randomString( + StorageUtil().deviceDescription = randomString( 10, 10, true, @@ -111,28 +110,27 @@ class SignInTemplateComponentModel devUUID = await DeviceUtil.getDevUUID(); if ((email != '') && (passwd != '')) { - AppState().email = email; - AppState().passwd = passwd; + StorageUtil().email = email; + StorageUtil().passwd = passwd; + StorageUtil().devUUID = devUUID!; response = await callback.call(); if (response.jsonBody['error'] == false) { + userUUID = response.jsonBody['uid']; - status = response.jsonBody['user']['status']; userDevUUID = response.jsonBody['user']['dev_id']; userName = response.jsonBody['user']['name']; - db.update('devUUID', devUUID, 'user'); - db.update('userUUID', userUUID, 'user'); - db.update('userDevUUID', userDevUUID, 'user'); - db.update('status', status, 'user'); - db.update('userName', userName, 'user'); + StorageUtil().userUUID = userUUID; + StorageUtil().userDevUUID = userDevUUID; + StorageUtil().status = status; + StorageUtil().userName = userName; isLogged = true; await checkLocals(context: context, model: model).then((value) { - AppState().haveLocal = value; - AppState().isLogged = isLogged; - AppState().update(() {}); + StorageUtil().haveLocal = value; + StorageUtil().isLogged = isLogged; toggleApp(context); }); } else { @@ -154,7 +152,7 @@ class SignInTemplateComponentModel } Future toggleApp(BuildContext context) async { - final haveLocal = AppState().haveLocal; + final haveLocal = StorageUtil().haveLocal; if (haveLocal == true) { context.go('/homePage'); } else if (haveLocal == false) { diff --git a/lib/components/templates_components/sign_up_template_component/sign_up_template_component_model.dart b/lib/components/templates_components/sign_up_template_component/sign_up_template_component_model.dart index 57fc1e84..62d43a2d 100644 --- a/lib/components/templates_components/sign_up_template_component/sign_up_template_component_model.dart +++ b/lib/components/templates_components/sign_up_template_component/sign_up_template_component_model.dart @@ -1,5 +1,4 @@ import 'package:hub/backend/api_requests/api_calls.dart'; -import 'package:hub/backend/api_requests/api_manager.dart'; import 'package:hub/flutter_flow/random_data_util.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/log_util.dart'; diff --git a/lib/components/templates_components/sign_up_template_component/sign_up_template_component_widget.dart b/lib/components/templates_components/sign_up_template_component/sign_up_template_component_widget.dart index fe35911d..8dd9accf 100644 --- a/lib/components/templates_components/sign_up_template_component/sign_up_template_component_widget.dart +++ b/lib/components/templates_components/sign_up_template_component/sign_up_template_component_widget.dart @@ -4,6 +4,8 @@ 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/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:hub/shared/utils/validator_util.dart'; import 'package:provider/provider.dart'; @@ -104,7 +106,7 @@ class _SignUpTemplateComponentWidgetState final double screenWidth = mediaQuery.size.width; final double screenHeight = mediaQuery.size.height; - bool _isFormInvalid() { + bool isFormInvalid() { if (_model.nameRegisterFormTextController.text == '' || _model.emailRegisterFormTextController.text == '' || _model.passwordRegisterFormTextController.text == '') { @@ -124,8 +126,6 @@ class _SignUpTemplateComponentWidgetState return false; } - context.watch(); - return Row( mainAxisSize: MainAxisSize.max, children: [ @@ -685,7 +685,7 @@ class _SignUpTemplateComponentWidgetState padding: const EdgeInsetsDirectional .fromSTEB(0.0, 0.0, 0.0, 16.0), child: FFButtonWidget( - onPressed: _isFormInvalid() + onPressed: isFormInvalid() ? null : () async { var shouldSetState = false; @@ -702,7 +702,8 @@ class _SignUpTemplateComponentWidgetState .emailRegisterFormTextController .text, device: - AppState().deviceType, + StorageUtil() + .deviceType, ); shouldSetState = true; if (_model.signUp == true) { diff --git a/lib/components/templates_components/view_visit_detail/view_visit_detail_model.dart b/lib/components/templates_components/view_visit_detail/view_visit_detail_model.dart index ab310d6f..1188b53b 100644 --- a/lib/components/templates_components/view_visit_detail/view_visit_detail_model.dart +++ b/lib/components/templates_components/view_visit_detail/view_visit_detail_model.dart @@ -1,4 +1,5 @@ -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import '/backend/api_requests/api_calls.dart'; import '/flutter_flow/flutter_flow_util.dart'; @@ -6,7 +7,6 @@ import 'view_visit_detail_widget.dart' show ViewVisitDetailWidget; import 'package:flutter/material.dart'; class ViewVisitDetailModel extends FlutterFlowModel { - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -37,15 +37,9 @@ class ViewVisitDetailModel extends FlutterFlowModel { } Future initializeDatabase() async { - devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliUUID; } @override diff --git a/lib/components/templates_components/view_visit_detail/view_visit_detail_widget.dart b/lib/components/templates_components/view_visit_detail/view_visit_detail_widget.dart index 65c992c0..fbbd960a 100644 --- a/lib/components/templates_components/view_visit_detail/view_visit_detail_widget.dart +++ b/lib/components/templates_components/view_visit_detail/view_visit_detail_widget.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/shared/utils/dialog_util.dart'; -import 'package:provider/provider.dart'; import 'package:share_plus/share_plus.dart'; import '/backend/api_requests/api_calls.dart'; @@ -121,8 +120,6 @@ class _ViewVisitDetailWidgetState extends State { var filteredVisitorJsonList = findVisitorById(widget.visitorJsonList, widget.visitIdStr) ?? 'null'; - context.watch(); - return Padding( padding: const EdgeInsetsDirectional.fromSTEB(0.0, 200.0, 0.0, 0.0), child: Container( diff --git a/lib/components/templates_components/visit_details_modal_template_component/visit_details_modal_template_component_widget.dart b/lib/components/templates_components/visit_details_modal_template_component/visit_details_modal_template_component_widget.dart index bc39e658..f4864b0b 100644 --- a/lib/components/templates_components/visit_details_modal_template_component/visit_details_modal_template_component_widget.dart +++ b/lib/components/templates_components/visit_details_modal_template_component/visit_details_modal_template_component_widget.dart @@ -1,4 +1,3 @@ -import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:hub/components/organism_components/schedule_visit_detail/schedule_visit_detail_widget.dart'; diff --git a/lib/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_model.dart b/lib/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_model.dart index ef420f06..d0695010 100644 --- a/lib/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_model.dart +++ b/lib/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_model.dart @@ -3,11 +3,11 @@ import 'package:hub/components/templates_components/visitor_search_modal_templat import 'package:hub/flutter_flow/flutter_flow_model.dart'; import 'package:flutter/material.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; class VisitorSearchModalTemplateComponentModel extends FlutterFlowModel { - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -40,15 +40,9 @@ class VisitorSearchModalTemplateComponentModel } Future initDatabase() async { - devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliUUID; } @override diff --git a/lib/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_widget.dart b/lib/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_widget.dart index e1982ac3..584b48fe 100644 --- a/lib/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_widget.dart +++ b/lib/components/templates_components/visitor_search_modal_template_component/visitor_search_modal_template_component_widget.dart @@ -59,8 +59,6 @@ class _VisitorSearchModalTemplateComponentWidgetState @override Widget build(BuildContext context) { - context.watch(); - return Padding( padding: const EdgeInsetsDirectional.fromSTEB(0.0, 10.0, 0.0, 0.0), child: Container( @@ -181,7 +179,7 @@ class _VisitorSearchModalTemplateComponentWidgetState ], ), ), - if (_model.visitors.isNotEmpty && _model.visitors.length > 0) + if (_model.visitors.isNotEmpty && _model.visitors.isNotEmpty) Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.start, diff --git a/lib/components/templates_components/welcome_template_component/welcome_template_component_widget.dart b/lib/components/templates_components/welcome_template_component/welcome_template_component_widget.dart index e0b97fe2..999a3a80 100644 --- a/lib/components/templates_components/welcome_template_component/welcome_template_component_widget.dart +++ b/lib/components/templates_components/welcome_template_component/welcome_template_component_widget.dart @@ -6,7 +6,6 @@ import '/flutter_flow/flutter_flow_util.dart'; import '/flutter_flow/flutter_flow_widgets.dart'; import 'package:flutter/material.dart'; import 'package:flutter_animate/flutter_animate.dart'; -import 'package:flutter_svg/flutter_svg.dart'; import 'package:google_fonts/google_fonts.dart'; import 'welcome_template_component_model.dart'; export 'welcome_template_component_model.dart'; diff --git a/lib/flutter_flow/flutter_flow_drop_down.dart b/lib/flutter_flow/flutter_flow_drop_down.dart index 35831023..493a9e50 100644 --- a/lib/flutter_flow/flutter_flow_drop_down.dart +++ b/lib/flutter_flow/flutter_flow_drop_down.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'form_field_controller.dart'; -import 'package:flutter/material.dart'; class FlutterFlowDropDown extends StatefulWidget { const FlutterFlowDropDown({ diff --git a/lib/flutter_flow/nav/nav.dart b/lib/flutter_flow/nav/nav.dart index 3947cd2b..13334eb7 100644 --- a/lib/flutter_flow/nav/nav.dart +++ b/lib/flutter_flow/nav/nav.dart @@ -10,6 +10,8 @@ import 'package:hub/pages/pets_page/pets_page_widget.dart'; import 'package:hub/pages/provisional_schedule_page/provisional_schedule_widget.dart'; import 'package:hub/pages/reception_page/reception_page_widget.dart'; import 'package:hub/pages/reservation_page/reservation_page_widget.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:provider/provider.dart'; import '/backend/schema/structs/index.dart'; @@ -72,8 +74,8 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) => GoRouter( FFRoute( name: '_initialize', path: '/', - builder: (context, _) => AppState().isLogged - ? AppState().haveLocal == true + builder: (context, _) => StorageUtil().isLogged + ? StorageUtil().haveLocal == true ? const HomePageWidget() : const ReceptionPageWidget() : const WelcomePageWidget(), diff --git a/lib/flutter_flow/nav/serialization_util.dart b/lib/flutter_flow/nav/serialization_util.dart index 349feee6..9ee5ecdb 100644 --- a/lib/flutter_flow/nav/serialization_util.dart +++ b/lib/flutter_flow/nav/serialization_util.dart @@ -1,5 +1,4 @@ import 'dart:convert'; -import 'dart:developer'; import 'package:flutter/material.dart'; diff --git a/lib/flutter_flow/permissions_util.dart b/lib/flutter_flow/permissions_util.dart index 304c8a17..10768b17 100644 --- a/lib/flutter_flow/permissions_util.dart +++ b/lib/flutter_flow/permissions_util.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart'; import 'package:permission_handler/permission_handler.dart'; const kPermissionStateToBool = { diff --git a/lib/main.dart b/lib/main.dart index 270f2dc9..20bdcc59 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,32 +12,61 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_web_plugins/url_strategy.dart'; import 'package:hub/backend/notifications/notification_service.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; -import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/internationalization.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; -import 'package:provider/provider.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:responsive_framework/responsive_framework.dart'; final GlobalKey navigatorKey = GlobalKey(); -Future initializeApp() async { + + +void main() async { + await _initializeApp(); + runApp(const App()); +} + + +Future _initializeApp() async { WidgetsFlutterBinding.ensureInitialized(); - await DatabaseHelper().database; + await _initializeStorageHelpers(); + await _initializeTracking(); + await _initializeFirebase(); + await _initializeNotificationService(); + _initializeUrlStrategy(); + _initializeSystemSettings(); + await _initializeFlutterFlow(); +} - final status = await AppTrackingTransparency.requestTrackingAuthorization(); - final appState = AppState(); - await appState.initializePersistedState(); - if (AppState().firstRun == true) { - AppState().deleteAll(); - } + +Future _initializeStorageHelpers() async { + await StorageUtil().ensureInitialization(); + + + +} + +Future _initializeTracking() async { + await AppTrackingTransparency.requestTrackingAuthorization(); +} + +Future _initializeFirebase() async { await Firebase.initializeApp(); - await NotificationService.initialize(); +} +Future _initializeNotificationService() async { + await NotificationService.initialize(); +} + +void _initializeUrlStrategy() { setUrlStrategy(const PathUrlStrategy()); +} + +void _initializeSystemSettings() { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); if (kDebugMode) { log("Aplicativo em Debug Mode, crashlytics desabilitado!"); @@ -47,17 +76,19 @@ Future initializeApp() async { FlutterError.onError = crashlyticsInstance.recordFlutterError; } } +} +Future _initializeFlutterFlow() async { await FlutterFlowTheme.initialize(); await FFLocalizations.initialize(); GoRouter.optionURLReflectsImperativeAPIs = true; usePathUrlStrategy(); } -Future foregroundHandleMessage(RemoteMessage message) async { +Future _foregroundHandleMessage(RemoteMessage message) async { if (message.data['click_action'] == 'enroll_cond') { - AppState().haveLocal = true; - AppState().context!.go('/homePage'); + StorageUtil().haveLocal = true; + StorageUtil().context?.go('/homePage'); } if (!Platform.isIOS) { NotificationService.show( @@ -69,20 +100,17 @@ Future foregroundHandleMessage(RemoteMessage message) async { Future _backgroundHandleMessage(RemoteMessage message) async { if (message.data['click_action'] == 'enroll_cond') { - AppState().haveLocal = true; - AppState().context!.go('/homePage'); + StorageUtil().haveLocal = true; + StorageUtil().context?.go('/homePage'); } } -void main() async { - await initializeApp(); - runApp(const App()); -} - class App extends StatefulWidget { const App({super.key}); + @override State createState() => _AppState(); + static _AppState of(BuildContext context) => context.findAncestorStateOfType<_AppState>()!; } @@ -94,30 +122,86 @@ class _AppState extends State { late GoRouter _router; bool displaySplashImage = true; + final ThemeData _darkTheme = ThemeData( + brightness: Brightness.dark, + scrollbarTheme: ScrollbarThemeData( + thumbVisibility: WidgetStateProperty.all(false), + interactive: false, + thumbColor: WidgetStateProperty.resolveWith((states) { + if (states.contains(WidgetState.dragged)) { + return const Color(0xff1aab5f); + } + if (states.contains(WidgetState.hovered)) { + return const Color(0xff1aab5f); + } + return const Color(0xff1aab5f); + }), + ), + ); + + final ThemeData _theme = ThemeData( + brightness: Brightness.light, + scrollbarTheme: ScrollbarThemeData( + thumbVisibility: WidgetStateProperty.all(false), + interactive: false, + thumbColor: WidgetStateProperty.resolveWith((states) { + if (states.contains(WidgetState.dragged)) { + return const Color(0xff1aab5f); + } + if (states.contains(WidgetState.hovered)) { + return const Color(0xff1aab5f); + } + return const Color(0xff1aab5f); + }), + ), + ); + + final Iterable>? localizationsDelegates = const [ + FFLocalizationsDelegate(), + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ]; + + final Iterable supportedLocales = const [ + Locale('pt'), + Locale('en'), + ]; + + Widget Function(BuildContext, Widget?)? builder = (context, widget) { + final breakpoints = [ + const Breakpoint(start: 0, end: 450, name: MOBILE), + const Breakpoint(start: 451, end: 800, name: TABLET), + const Breakpoint(start: 801, end: 1920, name: DESKTOP), + const Breakpoint(start: 1921, end: double.infinity, name: '4K'), + ]; + return ResponsiveBreakpoints.builder( + child: BouncingScrollWrapper.builder(context, widget!), + breakpoints: breakpoints, + ); + }; + + @override void initState() { super.initState(); - FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); - // WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((_) => initializeTracking()); - _appStateNotifier = AppStateNotifier.instance; _router = createRouter(_appStateNotifier); Future.delayed(const Duration(milliseconds: 1000), () => setState(() => _appStateNotifier.stopShowingSplashImage())); - - FirebaseMessaging.onMessage.listen(foregroundHandleMessage); + FirebaseMessaging.onMessage.listen(_foregroundHandleMessage); FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { onMessageReceived(message.data, message.notification!.body, message.data['click_action']); }); FirebaseMessaging.onBackgroundMessage(_backgroundHandleMessage); - FirebaseMessaging.instance.getInitialMessage().then((message) { if (message != null) { _backgroundHandleMessage(message); } }); + } void setLocale(String language) { @@ -134,67 +218,16 @@ class _AppState extends State { @override Widget build(BuildContext context) { - return MultiProvider( - providers: [ - ChangeNotifierProvider(create: (_) => AppState()), - ], - child: MaterialApp.router( - title: 'FRE ACCESS HUB', - builder: (context, widget) => ResponsiveBreakpoints.builder( - child: BouncingScrollWrapper.builder(context, widget!), - breakpoints: [ - const Breakpoint(start: 0, end: 450, name: MOBILE), - const Breakpoint(start: 451, end: 800, name: TABLET), - const Breakpoint(start: 801, end: 1920, name: DESKTOP), - const Breakpoint(start: 1921, end: double.infinity, name: '4K'), - ], - ), - localizationsDelegates: const [ - FFLocalizationsDelegate(), - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - ], - locale: _locale, - supportedLocales: const [ - Locale('pt'), - Locale('en'), - ], - theme: ThemeData( - brightness: Brightness.light, - scrollbarTheme: ScrollbarThemeData( - thumbVisibility: WidgetStateProperty.all(false), - interactive: false, - thumbColor: WidgetStateProperty.resolveWith((states) { - if (states.contains(WidgetState.dragged)) { - return const Color(0xff1aab5f); - } - if (states.contains(WidgetState.hovered)) { - return const Color(0xff1aab5f); - } - return const Color(0xff1aab5f); - }), - ), - ), - darkTheme: ThemeData( - brightness: Brightness.dark, - scrollbarTheme: ScrollbarThemeData( - thumbVisibility: WidgetStateProperty.all(false), - interactive: false, - thumbColor: WidgetStateProperty.resolveWith((states) { - if (states.contains(WidgetState.dragged)) { - return const Color(0xff1aab5f); - } - if (states.contains(WidgetState.hovered)) { - return const Color(0xff1aab5f); - } - return const Color(0xff1aab5f); - }), - ), - ), - themeMode: _themeMode, - routerConfig: _router, - ), + return MaterialApp.router( + title: 'FRE ACCESS HUB', + builder: builder, + localizationsDelegates: localizationsDelegates, + locale: _locale, + supportedLocales: supportedLocales, + theme: _theme, + darkTheme: _darkTheme, + themeMode: _themeMode, + routerConfig: _router, ); } } diff --git a/lib/pages/acess_history_page/acess_history_page_model.dart b/lib/pages/acess_history_page/acess_history_page_model.dart index ca9a17ad..89ca0b9d 100644 --- a/lib/pages/acess_history_page/acess_history_page_model.dart +++ b/lib/pages/acess_history_page/acess_history_page_model.dart @@ -4,10 +4,10 @@ import 'package:hub/components/molecular_components/message_opt_modal/opt_modal_ import 'package:hub/flutter_flow/flutter_flow_model.dart'; import 'package:hub/flutter_flow/request_manager.dart'; import 'package:hub/pages/acess_history_page/acess_history_page_widget.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; class AcessHistoryPageModel extends FlutterFlowModel { - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -34,15 +34,9 @@ class AcessHistoryPageModel extends FlutterFlowModel { } Future initDatabase() async { - devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliUUID; } @override diff --git a/lib/pages/acess_history_page/acess_history_page_widget.dart b/lib/pages/acess_history_page/acess_history_page_widget.dart index 854d8eb6..b9234979 100644 --- a/lib/pages/acess_history_page/acess_history_page_widget.dart +++ b/lib/pages/acess_history_page/acess_history_page_widget.dart @@ -199,7 +199,7 @@ class _AccessHistoryState extends State { return personTypeMatches; }).toList(); - if (filteredAccess != null && filteredAccess.isNotEmpty) { + if (filteredAccess.isNotEmpty) { setState(() { _accessWrap.addAll(filteredAccess); _hasData = true; @@ -221,6 +221,7 @@ class _AccessHistoryState extends State { _loading = false; }); } + return null; } void _showNoMoreDataSnackbar(BuildContext context) { diff --git a/lib/pages/delivery_schedule_page/delivery_schedule_widget.dart b/lib/pages/delivery_schedule_page/delivery_schedule_widget.dart index cfe5ef5e..46d3c440 100644 --- a/lib/pages/delivery_schedule_page/delivery_schedule_widget.dart +++ b/lib/pages/delivery_schedule_page/delivery_schedule_widget.dart @@ -1,11 +1,9 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; -import 'package:hub/components/templates_components/provisional_schedule_template/provisional_schedule_template_model.dart'; import 'package:hub/components/templates_components/provisional_schedule_template/provisional_shcedule_template_widget.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/nav/nav.dart'; -import 'package:provider/provider.dart'; import '/flutter_flow/flutter_flow_util.dart'; @@ -31,7 +29,6 @@ class _DeliveryScheduleState extends State { @override Widget build(BuildContext context) { - context.watch(); return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, diff --git a/lib/pages/fast_pass_page/fast_pass_page_widget.dart b/lib/pages/fast_pass_page/fast_pass_page_widget.dart index cd489288..03878c06 100644 --- a/lib/pages/fast_pass_page/fast_pass_page_widget.dart +++ b/lib/pages/fast_pass_page/fast_pass_page_widget.dart @@ -6,12 +6,16 @@ import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:hub/app_state.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:hub/shared/utils/webview_util.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:webview_flutter/webview_flutter.dart'; class FastPassPageWidget extends StatefulWidget { + const FastPassPageWidget({super.key}); + @override _FastPassPageWidgetState createState() => _FastPassPageWidgetState(); } @@ -19,32 +23,17 @@ class FastPassPageWidget extends StatefulWidget { class _FastPassPageWidgetState extends State { late InAppWebViewController _controllerIOS; late WebViewController _controllerAll; - final DatabaseHelper db = DatabaseHelper(); Future> initVariables() async { - final email = AppState().email; - final name = await db - .get(key: 'userName', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); - final createdAt = await db - .get(key: 'devUUID', field: 'createdAt') - .then((value) => value.toString()); + final email = StorageUtil().email; + final name = StorageUtil().userName; + final userUUID = StorageUtil().userUUID; + final devUUID = StorageUtil().devUUID; + final cliUUID = StorageUtil().cliUUID; + const createdAt = '0000-00-00 00:00:00'; final url = 'https://hub.freaccess.com.br/hub/fast-pass/$cliUUID'; - final freUserData = "{\"name\": \"$name\", " + - "\"email\": \"$email\"," + - "\"dev_id\": \"$devUUID\"," + - "\"created_at\": \"$createdAt\"," + - "\"updated_at\": \"0000-00-00 00:00:00\"," + - "\"status\": \"A\" }"; + final freUserData = + "{\"name\": \"$name\", \"email\": \"$email\",\"dev_id\": \"$devUUID\",\"created_at\":\"$createdAt\",\"updated_at\": \"0000-00-00 00:00:00\",\"status\": \"A\" }"; return { 'url': url, @@ -158,7 +147,7 @@ class _FastPassPageWidgetState extends State { ..loadRequest(Uri.parse(url)), ); } else { - return Center(child: Text('Unexpected error')); + return const Center(child: Text('Unexpected error')); } }, ), diff --git a/lib/pages/home_page/home_page_model.dart b/lib/pages/home_page/home_page_model.dart index 1f989aa3..11baa3ae 100644 --- a/lib/pages/home_page/home_page_model.dart +++ b/lib/pages/home_page/home_page_model.dart @@ -1,15 +1,15 @@ import 'package:flutter/material.dart'; -import 'package:hub/app_state.dart'; import 'package:hub/components/organism_components/local_profile_component/local_profile_component_model.dart'; import 'package:hub/components/organism_components/menu_component/menu_component_model.dart'; 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/db_helper.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; class HomePageModel extends FlutterFlowModel { bool isGrid = false; - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String cliUUID; late final String userUUID; @@ -25,19 +25,11 @@ class HomePageModel extends FlutterFlowModel { late MessageWellComponentModel messageWellComponentModel; Future _initVariable() async { - devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); - userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - userName = await db - .get(key: 'userName', field: 'value') - .then((value) => value.toString()); - userEmail = AppState().email; + devUUID = StorageUtil().devUUID; + cliUUID = StorageUtil().cliUUID; + userUUID = StorageUtil().userUUID; + userName = StorageUtil().cliName; + userEmail = StorageUtil().email; } @override diff --git a/lib/pages/home_page/home_page_widget.dart b/lib/pages/home_page/home_page_widget.dart index be2f828b..d0824e48 100644 --- a/lib/pages/home_page/home_page_widget.dart +++ b/lib/pages/home_page/home_page_widget.dart @@ -11,11 +11,13 @@ 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'; import 'package:hub/pages/home_page/home_page_model.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:hub/shared/widgets/drawer_widget/drawer_widget.dart'; class HomePageWidget extends StatefulWidget { - const HomePageWidget({Key? key}) : super(key: key); + const HomePageWidget({super.key}); @override State createState() => _HomePageWidgetState(); @@ -25,7 +27,6 @@ class _HomePageWidgetState extends State { late HomePageModel _model; final scaffoldKey = GlobalKey(); late LocalProfileComponentWidget _localProfileComponentWidget; - final DatabaseHelper db = DatabaseHelper(); _HomePageWidgetState() { _localProfileComponentWidget = LocalProfileComponentWidget(); @@ -52,7 +53,7 @@ class _HomePageWidgetState extends State { @override Widget build(BuildContext context) { - AppState().context = context; + StorageUtil().context = context; return GestureDetector( onTap: () => _model.unfocusNode.canRequestFocus ? FocusScope.of(context).requestFocus(_model.unfocusNode) diff --git a/lib/pages/liberation_history/liberation_history_model.dart b/lib/pages/liberation_history/liberation_history_model.dart index 493b34e9..bc339f98 100644 --- a/lib/pages/liberation_history/liberation_history_model.dart +++ b/lib/pages/liberation_history/liberation_history_model.dart @@ -1,14 +1,13 @@ import 'package:hub/backend/api_requests/api_calls.dart'; -import 'package:hub/backend/api_requests/api_manager.dart'; import 'package:hub/flutter_flow/flutter_flow_model.dart'; import 'package:hub/flutter_flow/request_manager.dart'; import 'package:flutter/material.dart'; import 'package:hub/pages/liberation_history/liberation_history_widget.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; class LiberationHistoryModel extends FlutterFlowModel { - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -39,15 +38,9 @@ class LiberationHistoryModel extends FlutterFlowModel { } Future init() async { - devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliName; } Future answersRequest( diff --git a/lib/pages/liberation_history/liberation_history_widget.dart b/lib/pages/liberation_history/liberation_history_widget.dart index 42bda80d..953a102f 100644 --- a/lib/pages/liberation_history/liberation_history_widget.dart +++ b/lib/pages/liberation_history/liberation_history_widget.dart @@ -90,7 +90,6 @@ class _LiberationHistoryWidgetState extends State { @override Widget build(BuildContext context) { - context.watch(); return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, @@ -332,7 +331,7 @@ class _LiberationHistoryWidgetState extends State { final List requests = response.jsonBody['solicitacoes'] ?? []; - if (requests != null && requests.isNotEmpty) { + if (requests.isNotEmpty) { setState(() { _requestWrap.addAll(requests); _hasData = true; @@ -359,6 +358,7 @@ class _LiberationHistoryWidgetState extends State { _loading = false; }); } + return null; } void _showNoMoreDataSnackBar(BuildContext context) { diff --git a/lib/pages/message_history_page/message_history_page_model.dart b/lib/pages/message_history_page/message_history_page_model.dart index 8c410e87..66f17cc2 100644 --- a/lib/pages/message_history_page/message_history_page_model.dart +++ b/lib/pages/message_history_page/message_history_page_model.dart @@ -1,15 +1,14 @@ -import 'package:flutter_spinkit/flutter_spinkit.dart'; import 'package:hub/backend/api_requests/api_manager.dart'; import 'package:hub/flutter_flow/flutter_flow_model.dart'; import 'package:hub/flutter_flow/request_manager.dart'; import 'package:flutter/material.dart'; import 'package:hub/pages/message_history_page/message_history_page_widget.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; class MessageHistoryPageModel extends FlutterFlowModel { - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -44,15 +43,9 @@ class MessageHistoryPageModel } Future init() async { - devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliUUID; } @override diff --git a/lib/pages/message_history_page/message_history_page_widget.dart b/lib/pages/message_history_page/message_history_page_widget.dart index 12407eed..8a149975 100644 --- a/lib/pages/message_history_page/message_history_page_widget.dart +++ b/lib/pages/message_history_page/message_history_page_widget.dart @@ -85,7 +85,6 @@ class _MessageHistoryPageWidgetState extends State @override Widget build(BuildContext context) { - context.watch(); return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, @@ -106,7 +105,7 @@ class _MessageHistoryPageWidgetState extends State final List messages = response.jsonBody['mensagens'] ?? []; - if (messages != null && messages.isNotEmpty) { + if (messages.isNotEmpty) { setState(() { _messageWrap.addAll(messages); _hasData = true; @@ -132,6 +131,7 @@ class _MessageHistoryPageWidgetState extends State _loading = false; }); } + return null; } void _loadMore() { diff --git a/lib/pages/package_order_page/package_order_page.dart b/lib/pages/package_order_page/package_order_page.dart index b9746a13..527ccbeb 100644 --- a/lib/pages/package_order_page/package_order_page.dart +++ b/lib/pages/package_order_page/package_order_page.dart @@ -9,9 +9,10 @@ import 'package:hub/components/templates_components/details_component/details_co 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'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/log_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:hub/shared/utils/validator_util.dart'; import 'package:rxdart/rxdart.dart'; @@ -28,7 +29,6 @@ class _PackageOrderPage extends State { final int _pageSize = 10; bool _hasData = false; bool _loading = false; - final DatabaseHelper db = DatabaseHelper(); late final String cliUUID; late Future _orderFuture; @@ -64,9 +64,7 @@ class _PackageOrderPage extends State { } Future initDatabase() async { - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + cliUUID = StorageUtil().cliUUID; } @override @@ -102,7 +100,7 @@ class _PackageOrderPage extends State { final List orders = response.jsonBody['value']['list'] ?? []; - if (orders != null && orders.isNotEmpty) { + if (orders.isNotEmpty) { setState(() { _orderList.addAll(orders); _hasData = true; @@ -128,6 +126,7 @@ class _PackageOrderPage extends State { _loading = false; }); } + return null; } void _loadMoreOrders() { @@ -416,7 +415,7 @@ class _PackageOrderPage extends State { FlutterFlowTheme.of(context).primary, }), ], - buttons: [], + buttons: const [], ), ); }); diff --git a/lib/pages/people_on_the_property_page/people_on_the_property_page_widget.dart b/lib/pages/people_on_the_property_page/people_on_the_property_page_widget.dart index 04097a0d..c6852f85 100644 --- a/lib/pages/people_on_the_property_page/people_on_the_property_page_widget.dart +++ b/lib/pages/people_on_the_property_page/people_on_the_property_page_widget.dart @@ -8,7 +8,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/pages/people_on_the_property_page/people_on_the_property_page_model.dart'; -import 'package:provider/provider.dart'; import '../../shared/utils/log_util.dart'; @@ -41,8 +40,6 @@ class _PeopleOnThePropertyPageWidgetState @override Widget build(BuildContext context) { - context.watch(); - return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, diff --git a/lib/pages/pets_page/pets_history_screen.dart b/lib/pages/pets_page/pets_history_screen.dart index 7ab0c732..34b7a39e 100644 --- a/lib/pages/pets_page/pets_history_screen.dart +++ b/lib/pages/pets_page/pets_history_screen.dart @@ -6,13 +6,14 @@ import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/pages/liberation_history/liberation_history_model.dart'; import 'package:hub/pages/pets_page/pets_page_model.dart'; import 'package:hub/pages/schedule_complete_visit_page/schedule_complete_visit_page_model.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/log_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:hub/shared/utils/validator_util.dart'; class PetsHistoryScreen extends StatefulWidget { - PetsHistoryScreen({Key? key, required this.model}) : super(key: key); + const PetsHistoryScreen({super.key, required this.model}); final PetsPageModel model; @@ -66,7 +67,7 @@ class _PetsHistoryScreenState extends State final List pets = response.jsonBody['pets']['list'] ?? []; safeSetState(() => count = response.jsonBody['pets']['count'] ?? 0); - if (pets != null && pets.isNotEmpty) { + if (pets.isNotEmpty) { setState(() { _petsWrap.addAll(pets); _hasData = true; @@ -93,6 +94,7 @@ class _PetsHistoryScreenState extends State _loading = false; }); } + return null; } void _loadMore() { @@ -150,7 +152,7 @@ class _PetsHistoryScreenState extends State if (index == 0) { // Add your item here return Padding( - padding: EdgeInsets.only(right: 30, top: 10), + padding: const EdgeInsets.only(right: 30, top: 10), child: Text( widget.model.petAmountRegister == '0' ? FFLocalizations.of(context).getVariableText( @@ -232,30 +234,21 @@ class _PetsHistoryScreenState extends State if (uItem['gender'] == "MAC") { FFLocalizations.of(context).getVariableText( - ptText: 'Macho', enText: 'Male'): Color(0xFF094CB0), + ptText: 'Macho', enText: 'Male'): const Color(0xFF094CB0), }, if (uItem['gender'] == "FEM") { FFLocalizations.of(context).getVariableText( ptText: 'Femêa', enText: 'Female', - ): Color(0xFFE463E7), + ): const Color(0xFFE463E7), } ], onTapCardItemAction: () async { - final DatabaseHelper db = DatabaseHelper(); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); - final cliName = await db - .get(key: 'cliName', field: 'value') - .then((value) => value.toString()); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); + final cliUUID = StorageUtil().cliUUID; + final cliName = StorageUtil().cliName; + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; await showDialog( useSafeArea: true, context: context, diff --git a/lib/pages/pets_page/pets_page_model.dart b/lib/pages/pets_page/pets_page_model.dart index 06b9806f..70885f03 100644 --- a/lib/pages/pets_page/pets_page_model.dart +++ b/lib/pages/pets_page/pets_page_model.dart @@ -12,14 +12,14 @@ import 'package:hub/flutter_flow/flutter_flow_widgets.dart'; import 'package:hub/flutter_flow/form_field_controller.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/pages/pets_page/pets_page_widget.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/image_util.dart'; import 'package:hub/shared/utils/log_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:hub/shared/utils/validator_util.dart'; class PetsPageModel extends FlutterFlowModel { - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -103,18 +103,10 @@ class PetsPageModel extends FlutterFlowModel { String? Function(BuildContext, String?)? textControllerObservationValidator; Future initAsync() async { - devUUID = await db.get(key: 'devUUID', field: 'value').then((value) { - return value.toString(); - }); - userUUID = await db.get(key: 'userUUID', field: 'value').then((value) { - return value.toString(); - }); - cliUUID = await db.get(key: 'cliUUID', field: 'value').then((value) { - return value.toString(); - }); - petAmountRegister = await db - .get(key: 'petAmountRegister', field: 'value') - .then((value) => value.toString()); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliUUID; + petAmountRegister = StorageUtil().petAmountRegister.toString(); safeSetState?.call(); } @@ -275,7 +267,7 @@ class PetsPageModel extends FlutterFlowModel { var img = await ImageUtils.convertImageFileToBase64(uploadedLocalFile!); img = "base64;jpeg,$img"; final url = - 'https://freaccess.com.br/freaccess/getImage.php?devUUID=${devUUID}&userUUID=${userUUID}&cliID=${cliUUID}&atividade=consultaFotoPet&petId=$petId'; + 'https://freaccess.com.br/freaccess/getImage.php?devUUID=$devUUID&userUUID=$userUUID&cliID=$cliUUID&atividade=consultaFotoPet&petId=$petId'; final response = await PhpGroup.updatePet.call( petID: petId, image: imgBase64, @@ -556,15 +548,15 @@ class PetsPageModel extends FlutterFlowModel { item['notes'] ?? '', }), imagePath: - 'https://freaccess.com.br/freaccess/getImage.php?devUUID=${devUUID}&userUUID=${userUUID}&cliID=${cliUUID}&atividade=consultaFotoPet&petId=${item['id'] ?? ''}', + 'https://freaccess.com.br/freaccess/getImage.php?devUUID=$devUUID&userUUID=$userUUID&cliID=$cliUUID&atividade=consultaFotoPet&petId=${item['id'] ?? ''}', statusHashMap: [ if (item['gender'] == "MAC") Map.from({ - item['name']: Color(0xFF094CB0), + item['name']: const Color(0xFF094CB0), }), if (item['gender'] == "FEM") Map.from({ - item['name']: Color(0xFFE463E7), + item['name']: const Color(0xFFE463E7), }), ], ); diff --git a/lib/pages/pets_page/pets_page_widget.dart b/lib/pages/pets_page/pets_page_widget.dart index c12af2fe..48834d3a 100644 --- a/lib/pages/pets_page/pets_page_widget.dart +++ b/lib/pages/pets_page/pets_page_widget.dart @@ -1,18 +1,12 @@ import 'dart:convert'; -import 'dart:developer'; -import 'package:easy_debounce/easy_debounce.dart'; import 'package:flutter/material.dart'; -import 'package:crypto/crypto.dart' as crypto; -import 'package:flutter/services.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:http/http.dart'; -import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/appbar.dart'; -import 'package:hub/components/atomic_components/shared_components_atoms/custom_datepicker.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/custom_input.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/custom_select.dart'; import 'package:hub/components/atomic_components/shared_components_atoms/media_upload_button.dart'; @@ -21,19 +15,14 @@ import 'package:hub/components/atomic_components/shared_components_atoms/tabview 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/flutter_flow/form_field_controller.dart'; -import 'package:hub/flutter_flow/internationalization.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/flutter_flow/upload_data.dart'; import 'package:hub/pages/pets_page/pets_history_screen.dart'; import 'package:hub/pages/pets_page/pets_page_model.dart'; -import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/image_util.dart'; import 'package:hub/shared/utils/validator_util.dart'; import 'package:material_symbols_icons/symbols.dart'; -import 'package:sqflite/sqflite.dart'; class PetsPageWidget extends StatefulWidget { dynamic pet; diff --git a/lib/pages/preferences_settings_page/preferences_settings_model.dart b/lib/pages/preferences_settings_page/preferences_settings_model.dart index 6df152e5..b119be90 100644 --- a/lib/pages/preferences_settings_page/preferences_settings_model.dart +++ b/lib/pages/preferences_settings_page/preferences_settings_model.dart @@ -4,15 +4,14 @@ 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_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; -import 'package:hub/flutter_flow/flutter_flow_widgets.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:share_plus/share_plus.dart'; -import 'package:sqflite/sqflite.dart'; class PreferencesPageModel with ChangeNotifier { final unfocusNode = FocusNode(); - final DatabaseHelper db = DatabaseHelper(); bool fingerprint = false; bool person = false; bool notify = false; @@ -24,7 +23,7 @@ class PreferencesPageModel with ChangeNotifier { } Future enablePerson(BuildContext context) async { - final String userDevUUID = await db.get(key: 'userDevUUID', field: 'value'); + final String userDevUUID = StorageUtil().userDevUUID; notifyListeners(); Share.share( FFLocalizations.of(context).getVariableText( @@ -69,7 +68,7 @@ class PreferencesPageModel with ChangeNotifier { Future toggleAccess(BuildContext context) async { onChange(String key) async { - AppState().accessPass = key; + StorageUtil().accessPass = key; await PhpGroup.changePass .call( newSenha: key, @@ -105,10 +104,10 @@ class PreferencesPageModel with ChangeNotifier { Future togglePanic(BuildContext context) async { onChange(String key) async { - AppState().panicPass = key; + StorageUtil().panicPass = key; await PhpGroup.changePanic .call( - newSenhaPanico: AppState().panicPass, + newSenhaPanico: StorageUtil().panicPass, ) .then((value) async { final String content; @@ -146,8 +145,8 @@ class PreferencesPageModel with ChangeNotifier { ); onChange(String? key) async { - if (!fingerprint) AppState().fingerprintPass = key ?? ''; - if (fingerprint) AppState().deleteFingerprintPass(); + if (!fingerprint) StorageUtil().fingerprintPass = key ?? ''; + if (fingerprint) SecureStorageHelper().delete('fingerprintPass'); fingerprint = await _toggleBoolInDb('fingerprint'); notifyListeners(); @@ -177,7 +176,7 @@ class PreferencesPageModel with ChangeNotifier { ptText: 'Conta deletada com sucesso', ); - AppState().deleteAll(); + StorageUtil.purge(); context.pop(); context.go( @@ -223,7 +222,7 @@ class PreferencesPageModel with ChangeNotifier { ptText: 'Tem certeza que deseja sair?', ); onConfirm() async { - AppState().deleteAll(); + StorageUtil.purge(); context.go( '/welcomePage', @@ -259,9 +258,9 @@ class PreferencesPageModel with ChangeNotifier { await PhpGroup.resopndeVinculo.call(tarefa: 'I').then((value) { if (value.jsonBody['error'] == false) { - db.clear('cliName'); - db.clear('cliUUID'); - db.clear('ownerUUID'); + StorageUtil().cliName = ''; + StorageUtil().cliUUID = ''; + StorageUtil().ownerUUID = ''; context.pop(); @@ -310,14 +309,15 @@ class PreferencesPageModel with ChangeNotifier { } Future _getBoolFromDb(String key) async { - final value = await db.get(key: key, field: 'value'); + final value = SQLiteStorageHelper().get(key); return value.toString() == 'true'; } Future _toggleBoolInDb(String key) async { final currentValue = await _getBoolFromDb(key); final newValue = !currentValue; - await db.update(key, newValue.toString(), 'util'); + await SQLiteStorageHelper().set(key, newValue.toString(), (v) {}); + return newValue; } diff --git a/lib/pages/preferences_settings_page/preferences_settings_widget.dart b/lib/pages/preferences_settings_page/preferences_settings_widget.dart index 47a17c81..ebd23d55 100644 --- a/lib/pages/preferences_settings_page/preferences_settings_widget.dart +++ b/lib/pages/preferences_settings_page/preferences_settings_widget.dart @@ -6,19 +6,18 @@ import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/internationalization.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/pages/preferences_settings_page/preferences_settings_model.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:provider/provider.dart'; class PreferencesPageWidget extends StatefulWidget { - PreferencesPageWidget(); + const PreferencesPageWidget({super.key}); @override _PreferencesPageWidgetState createState() => _PreferencesPageWidgetState(); } class _PreferencesPageWidgetState extends State { - final DatabaseHelper db = DatabaseHelper(); - @override void initState() { super.initState(); @@ -211,7 +210,7 @@ class _PreferencesPageWidgetState extends State { : FlutterFlowTheme.of(context).primary, ), ), - SizedBox(width: 8.0), + const SizedBox(width: 8.0), Expanded( child: Text( content, @@ -240,7 +239,7 @@ class _PreferencesPageWidgetState extends State { enText: 'Are you sure you want to logout?', ptText: 'Tem certeza', ), () async { - AppState().deleteAll(); + StorageUtil.purge(); // setState(() {}); context.go( diff --git a/lib/pages/provisional_schedule_page/provisional_schedule_widget.dart b/lib/pages/provisional_schedule_page/provisional_schedule_widget.dart index 42afd259..022822ed 100644 --- a/lib/pages/provisional_schedule_page/provisional_schedule_widget.dart +++ b/lib/pages/provisional_schedule_page/provisional_schedule_widget.dart @@ -1,11 +1,9 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; -import 'package:hub/components/templates_components/provisional_schedule_template/provisional_schedule_template_model.dart'; import 'package:hub/components/templates_components/provisional_schedule_template/provisional_shcedule_template_widget.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/nav/nav.dart'; -import 'package:provider/provider.dart'; import '/flutter_flow/flutter_flow_util.dart'; @@ -31,7 +29,6 @@ class _ProvisionalScheduleState extends State { @override Widget build(BuildContext context) { - context.watch(); return Scaffold( key: scaffoldKey, backgroundColor: FlutterFlowTheme.of(context).primaryBackground, diff --git a/lib/pages/qr_code_page/qr_code_page_model.dart b/lib/pages/qr_code_page/qr_code_page_model.dart index bfe62ece..8edbff92 100644 --- a/lib/pages/qr_code_page/qr_code_page_model.dart +++ b/lib/pages/qr_code_page/qr_code_page_model.dart @@ -3,7 +3,8 @@ import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:hub/flutter_flow/flutter_flow_model.dart'; import 'package:hub/pages/qr_code_page/qr_code_page_widget.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:qr_flutter/qr_flutter.dart'; class QrCodePageModel extends FlutterFlowModel { @@ -11,10 +12,9 @@ class QrCodePageModel extends FlutterFlowModel { bool isAccess = false; - String? key = null; + String? key; DateTime? time; - final DatabaseHelper db = DatabaseHelper(); late final bool isFingerprint; late final String userDevUUID; @@ -28,12 +28,8 @@ class QrCodePageModel extends FlutterFlowModel { } Future initVariable() async { - isFingerprint = await db - .get(key: 'fingerprint', field: 'value') - .then((value) => value.toString() == 'true'); - userDevUUID = await db - .get(key: 'userDevUUID', field: 'value') - .then((value) => value.toString()); + isFingerprint = StorageUtil().fingerprint; + userDevUUID = StorageUtil().userDevUUID; } @override diff --git a/lib/pages/qr_code_page/qr_code_page_widget.dart b/lib/pages/qr_code_page/qr_code_page_widget.dart index c2aae8b3..f5ac5a24 100644 --- a/lib/pages/qr_code_page/qr_code_page_widget.dart +++ b/lib/pages/qr_code_page/qr_code_page_widget.dart @@ -15,7 +15,10 @@ import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/flutter_flow_widgets.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/pages/qr_code_page/qr_code_page_model.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/biometric_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:percent_indicator/circular_percent_indicator.dart'; // import 'package:percent_indicator/percent_indicator.dart'; @@ -305,11 +308,11 @@ class _QrCodePageWidgetState extends State builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { - return CircularProgressIndicator(); + return const CircularProgressIndicator(); } else if (snapshot.hasError) { return Text('Error: ${snapshot.error}'); } else if (!snapshot.hasData) { - return Text('No data'); + return const Text('No data'); } else { final progress = snapshot.data!; return CircularPercentIndicator( @@ -358,9 +361,8 @@ class _QrCodePageWidgetState extends State } Future _showBiometricsAuth(BuildContext context) async { - AppState() - .checkBiometrics() - .then((value) => AppState().authenticateBiometric().then((value) { + BiometricHelper.checkBiometrics() + .then((value) => BiometricHelper.authenticateBiometric().then((value) { safeSetState(() { if (animationsMap['barcodeOnActionTriggerAnimation'] != null) { animationsMap['barcodeOnActionTriggerAnimation']! @@ -371,7 +373,7 @@ class _QrCodePageWidgetState extends State .reverse(); } _model.isAccess = !_model.isAccess; - _model.key = AppState().fingerprintPass; + _model.key = StorageUtil().fingerprintPass; }); })) .onError((error, StackTrace) { diff --git a/lib/pages/reception_page/reception_page_model.dart b/lib/pages/reception_page/reception_page_model.dart index 93bd6ae6..8104f8b2 100644 --- a/lib/pages/reception_page/reception_page_model.dart +++ b/lib/pages/reception_page/reception_page_model.dart @@ -1,21 +1,19 @@ import 'package:flutter/material.dart'; import 'package:hub/app_state.dart'; import 'package:hub/flutter_flow/internationalization.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:share_plus/share_plus.dart'; class ReceptionPageModel with ChangeNotifier { Future getIdenfifier(BuildContext context) async { - final DatabaseHelper db = DatabaseHelper(); - final String userDevUUID = await db - .get(key: 'userDevUUID', field: 'value') - .then((value) => value.toString()); + final String userDevUUID = StorageUtil().userDevUUID; notifyListeners(); Share.share( FFLocalizations.of(context).getVariableText( - ptText: 'Este é o meu identificador de acesso: ${userDevUUID}', - enText: 'This is my access identifier: ${userDevUUID}', + ptText: 'Este é o meu identificador de acesso: $userDevUUID', + enText: 'This is my access identifier: $userDevUUID', ), ); } diff --git a/lib/pages/reception_page/reception_page_widget.dart b/lib/pages/reception_page/reception_page_widget.dart index 19eef6ed..75be8092 100644 --- a/lib/pages/reception_page/reception_page_widget.dart +++ b/lib/pages/reception_page/reception_page_widget.dart @@ -8,6 +8,8 @@ import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/flutter_flow_widgets.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/pages/reception_page/reception_page_model.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:provider/provider.dart'; class ReceptionPageWidget extends StatefulWidget { @@ -26,7 +28,7 @@ class _ReceptionPageWidgetState extends State { @override Widget build(BuildContext context) { - AppState().context = context; + StorageUtil().context = context; return ChangeNotifierProvider( create: (context) => ReceptionPageModel(), child: Scaffold( @@ -151,7 +153,8 @@ class _ReceptionPageWidgetState extends State { child: FFButtonWidget( onPressed: () async { PhpGroup.unregisterDevice(); - AppState().deleteAll(); + + StorageUtil.purge(); setState(() {}); context.go( diff --git a/lib/pages/register_visitor_page/register_visitor_page_model.dart b/lib/pages/register_visitor_page/register_visitor_page_model.dart index 85e15627..9c813fc5 100644 --- a/lib/pages/register_visitor_page/register_visitor_page_model.dart +++ b/lib/pages/register_visitor_page/register_visitor_page_model.dart @@ -1,8 +1,6 @@ import 'package:hub/components/templates_components/regisiter_vistor_template_component/regisiter_vistor_template_component_widget.dart'; -import '/backend/api_requests/api_calls.dart'; import '/flutter_flow/flutter_flow_util.dart'; -import '/flutter_flow/form_field_controller.dart'; import 'register_visitor_page_widget.dart' show RegisterVisitorPageWidget; import 'package:flutter/material.dart'; diff --git a/lib/pages/register_visitor_page/register_visitor_page_widget.dart b/lib/pages/register_visitor_page/register_visitor_page_widget.dart index 6b9ec906..483364bf 100644 --- a/lib/pages/register_visitor_page/register_visitor_page_widget.dart +++ b/lib/pages/register_visitor_page/register_visitor_page_widget.dart @@ -4,7 +4,6 @@ import 'package:hub/components/templates_components/regisiter_vistor_template_co import 'package:hub/flutter_flow/flutter_flow_icon_button.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:provider/provider.dart'; import '/flutter_flow/flutter_flow_util.dart'; import 'register_visitor_page_model.dart'; @@ -39,7 +38,6 @@ class _RegisterVisitorPageWidgetState extends State { @override Widget build(BuildContext context) { - context.watch(); return Scaffold( appBar: AppBar( backgroundColor: FlutterFlowTheme.of(context).primaryBackground, diff --git a/lib/pages/reservation_page/reservation_page_widget.dart b/lib/pages/reservation_page/reservation_page_widget.dart index 9b730d0f..ffcbaec6 100644 --- a/lib/pages/reservation_page/reservation_page_widget.dart +++ b/lib/pages/reservation_page/reservation_page_widget.dart @@ -6,50 +6,37 @@ import 'package:flutter_inappwebview/flutter_inappwebview.dart'; import 'package:hub/app_state.dart'; import 'package:hub/flutter_flow/internationalization.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:hub/shared/utils/webview_util.dart'; import 'package:sqflite/sqflite.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:webview_flutter/webview_flutter.dart'; class ReservationPageWidget extends StatefulWidget { + const ReservationPageWidget({super.key}); + @override _ReservationPageWidgetState createState() => _ReservationPageWidgetState(); } class _ReservationPageWidgetState extends State { - final DatabaseHelper db = DatabaseHelper(); late InAppWebViewController _controllerIOS; late WebViewController _controllerAll; Future> initVariables() async { - final email = await db - .get(key: 'email', field: 'value') - .then((value) => value.toString()); - final name = await db - .get(key: 'userName', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final createdAt = await db - .get(key: 'devUUID', field: 'createdAt') - .then((value) => value.toString()); - final clientId = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + final email = StorageUtil().email; + final name = StorageUtil().cliName; + final userUUID = StorageUtil().userUUID; + final devUUID = StorageUtil().devUUID; + final createdAt = StorageUtil().createdAt; + final clientId = StorageUtil().cliUUID; final url = 'https://hub.freaccess.com.br/hub/reservation/$clientId'; - final freUserData = "{\"name\": \"$name\", " + - "\"email\": \"$email\"," + - "\"dev_id\": \"$devUUID\"," + - "\"created_at\": \"$createdAt\"," + - "\"updated_at\": \"0000-00-00 00:00:00\"," + - "\"status\": \"A\" }"; + final freUserData = + "{\"name\": \"$name\", \"email\": \"$email\",\"dev_id\": \"$devUUID\",\"created_at\": \"0000-00-00 00:00:00\",\"updated_at\": \"0000-00-00 00:00:00\",\"status\": \"A\" }"; return { 'url': url, @@ -163,7 +150,7 @@ class _ReservationPageWidgetState extends State { ..loadRequest(Uri.parse(url)), ); } else { - return Center(child: Text('Unexpected error')); + return const Center(child: Text('Unexpected error')); } }, ), diff --git a/lib/pages/schedule_complete_visit_page/schedule_complete_visit_page_model.dart b/lib/pages/schedule_complete_visit_page/schedule_complete_visit_page_model.dart index dadb8b1b..4467764d 100644 --- a/lib/pages/schedule_complete_visit_page/schedule_complete_visit_page_model.dart +++ b/lib/pages/schedule_complete_visit_page/schedule_complete_visit_page_model.dart @@ -1,5 +1,3 @@ -import 'dart:ffi'; - import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/backend/api_requests/api_manager.dart'; import 'package:hub/components/templates_components/details_component/details_component_widget.dart'; @@ -15,8 +13,9 @@ import 'package:hub/flutter_flow/request_manager.dart'; import 'package:flutter/material.dart'; import 'package:hub/pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart'; import 'package:hub/pages/schedule_complete_visit_page/visit_history_page_widget.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:hub/shared/mixins/status_mixin.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:hub/shared/utils/validator_util.dart'; import 'package:intl/intl.dart'; import 'package:share_plus/share_plus.dart'; @@ -26,7 +25,6 @@ class ScheduleCompleteVisitPageModel late VoidCallback safeSetState; late Function(Function) updateState; final _visitHistoryManager = FutureRequestManager(); - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String cliUUID; late final String userUUID; @@ -184,15 +182,9 @@ class ScheduleCompleteVisitPageModel } Future _initVariables() async { - devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); - userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); + devUUID = StorageUtil().devUUID; + cliUUID = StorageUtil().cliUUID; + userUUID = StorageUtil().userUUID; } @override @@ -418,7 +410,7 @@ class ScheduleCompleteVisitPageModel enText: 'Are you sure you want to block this visit?', ), () async { await changeStatusAction - ?.call( + .call( context, int.parse(item['VAW_DESTINO']), int.parse(item['VAW_ID']), @@ -520,13 +512,13 @@ class ScheduleCompleteVisitPageModel icon: const Icon(Icons.share), onPressed: () async { Share.share(''' -Olá, \*${item['VTE_NOME']}\*! Você foi convidado para \*${cliName}\*. +Olá, \*${item['VTE_NOME']}\*! Você foi convidado para \*$cliName\*. \*Validade do Convite\*: - Início: ${item['VAW_DTINICIO']} - Fim: ${item['VAW_DTFIM']} -URL do Convite: https://visita.freaccess.com.br/${item['VAW_ID']}/${cliUUID}/${item['VAW_CHAVE']} +URL do Convite: https://visita.freaccess.com.br/${item['VAW_ID']}/$cliUUID/${item['VAW_CHAVE']} '''); }, options: FFButtonOptions( @@ -560,7 +552,7 @@ URL do Convite: https://visita.freaccess.com.br/${item['VAW_ID']}/${cliUUID}/${i : '', }), imagePath: - 'https://freaccess.com.br/freaccess/getImage.php?cliID=${cliUUID}&atividade=getFoto&Documento=${item['VTE_DOCUMENTO'] ?? ''}&tipo=E', + 'https://freaccess.com.br/freaccess/getImage.php?cliID=$cliUUID&atividade=getFoto&Documento=${item['VTE_DOCUMENTO'] ?? ''}&tipo=E', statusHashMap: [ if (Status.getStatus(item['VAW_STATUS']) == StatusEnum.active) Map.from({ diff --git a/lib/pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart b/lib/pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart index 4d036e82..2579e86c 100644 --- a/lib/pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart +++ b/lib/pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart @@ -26,7 +26,7 @@ import 'package:hub/shared/utils/share_util.dart'; import 'package:provider/provider.dart'; class ScheduleComplete extends StatefulWidget { - const ScheduleComplete({Key? key}) : super(key: key); + const ScheduleComplete({super.key}); @override State createState() { @@ -35,7 +35,7 @@ class ScheduleComplete extends StatefulWidget { } class ScheduleCompleteVisitPageWidget extends ScheduleComplete { - const ScheduleCompleteVisitPageWidget(); + const ScheduleCompleteVisitPageWidget({super.key}); @override State createState() => @@ -48,8 +48,8 @@ class _ScheduleCompleteVisitPageWidgetState late ScheduleCompleteVisitPageModel _model; int _visitHistoryLoadingIdx = 0; final int _visitHistoryLoadingCount = 10; - List _visitHistoryList = []; - ScrollController _visitHistoryController = ScrollController(); + final List _visitHistoryList = []; + final ScrollController _visitHistoryController = ScrollController(); final scaffoldKey = GlobalKey(); @@ -109,8 +109,6 @@ class _ScheduleCompleteVisitPageWidgetState @override Widget build(BuildContext context) { - context.watch(); - return GestureDetector( onTap: () => _model.unfocusNode.canRequestFocus ? FocusScope.of(context).requestFocus(_model.unfocusNode) @@ -164,7 +162,7 @@ PreferredSizeWidget appBarScheduleCompleteVisit(BuildContext context) { } Widget bodyScheduleCompleteVisit(BuildContext context, - ScheduleCompleteVisitPageModel _model, Function safeSetState) { + ScheduleCompleteVisitPageModel model, Function safeSetState) { return SafeArea( top: true, child: Column( @@ -196,7 +194,7 @@ Widget bodyScheduleCompleteVisit(BuildContext context, ), ), ], - controller: _model.tabBarController, + controller: model.tabBarController, onTap: (i) async { [() async {}, () async {}][i](); }, @@ -204,12 +202,12 @@ Widget bodyScheduleCompleteVisit(BuildContext context, ), Expanded( child: TabBarView( - controller: _model.tabBarController, + controller: model.tabBarController, children: [ - scheduleVisit(context, _model, safeSetState), + scheduleVisit(context, model, safeSetState), wrapWithModel( - model: _model, - child: VisitHistoryWidget(), + model: model, + child: const VisitHistoryWidget(), updateCallback: () { safeSetState(() {}); }, @@ -223,7 +221,7 @@ Widget bodyScheduleCompleteVisit(BuildContext context, } Widget scheduleVisit(BuildContext context, - ScheduleCompleteVisitPageModel _model, Function safeSetState) { + ScheduleCompleteVisitPageModel model, Function safeSetState) { return SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.max, @@ -268,9 +266,9 @@ Widget scheduleVisit(BuildContext context, padding: const EdgeInsetsDirectional.fromSTEB( 24.0, 0.0, 24.0, 0.0), child: TextFormField( - controller: _model.textController1, + controller: model.textController1, readOnly: true, - focusNode: _model.textFieldFocusNode1, + focusNode: model.textFieldFocusNode1, autovalidateMode: AutovalidateMode.onUserInteraction, autofocus: false, @@ -355,7 +353,7 @@ Widget scheduleVisit(BuildContext context, lineHeight: 1.8, ), textAlign: TextAlign.start, - validator: _model.textController1Validator + validator: model.textController1Validator .asValidator(context)), ), Padding( @@ -470,7 +468,7 @@ Widget scheduleVisit(BuildContext context, if (datePicked1Date != null && datePicked1Time != null) { safeSetState(() { - _model.datePicked1 = DateTime( + model.datePicked1 = DateTime( datePicked1Date.year, datePicked1Date.month, datePicked1Date.day, @@ -480,15 +478,15 @@ Widget scheduleVisit(BuildContext context, }); } safeSetState(() { - _model.textController1?.text = dateTimeFormat( + model.textController1?.text = dateTimeFormat( 'dd/MM/yyyy HH:mm:ss', - _model.datePicked1, + model.datePicked1, locale: FFLocalizations.of(context) .languageCode, ); - _model.textController1?.selection = + model.textController1?.selection = TextSelection.collapsed( - offset: _model + offset: model .textController1!.text.length); }); }, @@ -519,8 +517,8 @@ Widget scheduleVisit(BuildContext context, 24.0, 0.0, 24.0, 0.0), child: TextFormField( readOnly: true, - controller: _model.textController2, - focusNode: _model.textFieldFocusNode2, + controller: model.textController2, + focusNode: model.textFieldFocusNode2, autovalidateMode: AutovalidateMode.onUserInteraction, autofocus: false, @@ -603,7 +601,7 @@ Widget scheduleVisit(BuildContext context, lineHeight: 1.8, ), textAlign: TextAlign.start, - validator: _model.textController2Validator + validator: model.textController2Validator .asValidator(context), ), ), @@ -719,7 +717,7 @@ Widget scheduleVisit(BuildContext context, if (datePicked2Date != null && datePicked2Time != null) { safeSetState(() { - _model.datePicked2 = DateTime( + model.datePicked2 = DateTime( datePicked2Date.year, datePicked2Date.month, datePicked2Date.day, @@ -729,15 +727,15 @@ Widget scheduleVisit(BuildContext context, }); } safeSetState(() { - _model.textController2?.text = dateTimeFormat( + model.textController2?.text = dateTimeFormat( 'dd/MM/yyyy HH:mm:ss', - _model.datePicked2, + model.datePicked2, locale: FFLocalizations.of(context) .languageCode, ); - _model.textController2?.selection = + model.textController2?.selection = TextSelection.collapsed( - offset: _model + offset: model .textController2!.text.length); }); }, @@ -781,11 +779,11 @@ Widget scheduleVisit(BuildContext context, ), ), ), - if (_model.visitorJsonList.isNotEmpty) + if (model.visitorJsonList.isNotEmpty) Builder( builder: (context) { final visitorListView = - _model.visitorJsonList.map((e) => e).toList(); + model.visitorJsonList.map((e) => e).toList(); return ListView.separated( padding: const EdgeInsets.fromLTRB( 0, @@ -828,7 +826,7 @@ Widget scheduleVisit(BuildContext context, fadeOutDuration: const Duration(milliseconds: 500), imageUrl: - "https://freaccess.com.br/freaccess/getImage.php?devUUID=${_model.devUUID}&userUUID=${_model.userUUID}&cliID=${_model.cliUUID}&atividade=getFoto&Documento=${getJsonField(visitorListViewItem, r'''$.VTE_DOCUMENTO''').toString()}&tipo=E", + "https://freaccess.com.br/freaccess/getImage.php?devUUID=${model.devUUID}&userUUID=${model.userUUID}&cliID=${model.cliUUID}&atividade=getFoto&Documento=${getJsonField(visitorListViewItem, r'''$.VTE_DOCUMENTO''').toString()}&tipo=E", fit: BoxFit.cover, ), ), @@ -860,7 +858,7 @@ Widget scheduleVisit(BuildContext context, ), IconButton( onPressed: () async { - _model.removeFromVisitorJsonList( + model.removeFromVisitorJsonList( visitorListViewItem); safeSetState(() {}); }, @@ -892,10 +890,10 @@ Widget scheduleVisit(BuildContext context, context: context, builder: (context) { return GestureDetector( - onTap: () => _model + onTap: () => model .unfocusNode.canRequestFocus ? FocusScope.of(context) - .requestFocus(_model.unfocusNode) + .requestFocus(model.unfocusNode) : FocusScope.of(context).unfocus(), child: SizedBox( height: @@ -908,14 +906,14 @@ Widget scheduleVisit(BuildContext context, child: VisitorSearchModalTemplateComponentWidget( getVisitors: (visitorsParam) async { - _model.visitorJsonList = + model.visitorJsonList = visitorsParam! .toList() .cast(); safeSetState(() {}); }, getDocs: (docsParam) async { - _model.visitorStrList = + model.visitorStrList = strListToStr( docsParam!.toList()); safeSetState(() {}); @@ -1065,17 +1063,17 @@ Widget scheduleVisit(BuildContext context, .reasonsMotDescStrList( snapshot.data!.jsonBody); - _model.processDropDown1(reasonsJsonList!); + model.processDropDown1(reasonsJsonList!); return FlutterFlowDropDown( fillColor: FlutterFlowTheme.of(context) .primaryBackground, controller: - _model.dropDownValueController1, - options: _model.reasonsDropDown1, + model.dropDownValueController1, + options: model.reasonsDropDown1, optionLabels: reasonsOptionLabels, onChanged: (val) => safeSetState( - () => _model.dropDownValue1 = val), + () => model.dropDownValue1 = val), width: double.infinity, height: double.infinity, textStyle: FlutterFlowTheme.of(context) @@ -1120,7 +1118,7 @@ Widget scheduleVisit(BuildContext context, ), ], ), - if (_model.dropDownValue1 == '') + if (model.dropDownValue1 == '') Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.start, @@ -1178,15 +1176,15 @@ Widget scheduleVisit(BuildContext context, .getDadosCall .levelNACDescricaoStrList( snapshot.data!.jsonBody); - _model.processDropDown2(lavelsJsonList!); + model.processDropDown2(lavelsJsonList!); return FlutterFlowDropDown( controller: - _model.dropDownValueController2, - options: _model.lavelsDropDown2, + model.dropDownValueController2, + options: model.lavelsDropDown2, optionLabels: lavelsOptionLabels, onChanged: (val) => safeSetState( - () => _model.dropDownValue2 = val), + () => model.dropDownValue2 = val), width: double.infinity, height: double.infinity, textStyle: FlutterFlowTheme.of(context) @@ -1233,7 +1231,7 @@ Widget scheduleVisit(BuildContext context, ), ], ), - if (_model.dropDownValue2 == '') + if (model.dropDownValue2 == '') Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.start, @@ -1314,9 +1312,9 @@ Widget scheduleVisit(BuildContext context, ), ), Switch( - value: _model.switchValue!, + value: model.switchValue!, onChanged: (newValue) async { - safeSetState(() => _model.switchValue = newValue); + safeSetState(() => model.switchValue = newValue); }, focusColor: FlutterFlowTheme.of(context).primary, trackColor: WidgetStateProperty.resolveWith( @@ -1391,8 +1389,8 @@ Widget scheduleVisit(BuildContext context, child: SizedBox( width: double.infinity, child: TextFormField( - controller: _model.textController3, - focusNode: _model.textFieldFocusNode3, + controller: model.textController3, + focusNode: model.textFieldFocusNode3, autofocus: false, cursorColor: FlutterFlowTheme.of(context).primary, textInputAction: TextInputAction.next, @@ -1472,7 +1470,7 @@ Widget scheduleVisit(BuildContext context, textAlign: TextAlign.start, maxLines: null, maxLength: 80, - validator: _model.textController3Validator + validator: model.textController3Validator .asValidator(context), ), ), @@ -1492,21 +1490,21 @@ Widget scheduleVisit(BuildContext context, enText: 'Schedule', ptText: 'Agendar', ), - onPressed: _model.isValid() + onPressed: model.isValid() ? () async { Future scheduleVisit() async { await PhpGroup.postScheduleVisitCall .call( - devDesc: _model.textController3.text, - idVisitante: _model.visitorStrList, - dtInicio: _model - .convertDateFormat(_model.textController1.text ?? ''), - dtFim: _model - .convertDateFormat(_model.textController2.text ?? ''), - unica: _model.switchValue == true ? 'Sim' : 'Não', - idMotivo: extractIdToStr(_model.dropDownValue1!), - idNAC: extractIdToStr(_model.dropDownValue2!), - obs: _model.textController3.text, + devDesc: model.textController3.text, + idVisitante: model.visitorStrList, + dtInicio: model + .convertDateFormat(model.textController1.text ?? ''), + dtFim: model + .convertDateFormat(model.textController2.text ?? ''), + unica: model.switchValue == true ? 'Sim' : 'Não', + idMotivo: extractIdToStr(model.dropDownValue1!), + idNAC: extractIdToStr(model.dropDownValue2!), + obs: model.textController3.text, ) .catchError((e) async { await DialogUtil.errorDefault(context); @@ -1517,14 +1515,14 @@ Widget scheduleVisit(BuildContext context, false) { context.pop(); - _model.dropDownValue1 = null; - _model.dropDownValue2 = null; - _model.dropDownValueController1 = + model.dropDownValue1 = null; + model.dropDownValue2 = null; + model.dropDownValueController1 = FormFieldController(''); - _model.dropDownValueController2 = + model.dropDownValueController2 = FormFieldController(''); - _model.visitorStrList = ''; - _model.visitorJsonList = []; + model.visitorStrList = ''; + model.visitorJsonList = []; ToastUtil.showToast( message: FFLocalizations.of(context) @@ -1545,16 +1543,16 @@ Widget scheduleVisit(BuildContext context, safeSetState(() {}); } - if (_model.visitorJsonList.length > 1) { + if (model.visitorJsonList.length > 1) { final title = FFLocalizations.of(context).getVariableText( ptText: 'Cadastrar Múltiplos Visitantes', enText: 'Register Multiple Visitors', ); final content = FFLocalizations.of(context).getVariableText( ptText: - 'Você deseja agendar uma visita para ${_model.visitorJsonList.length} visitantes?', + 'Você deseja agendar uma visita para ${model.visitorJsonList.length} visitantes?', enText: - 'Do you want to schedule a visit for ${_model.visitorJsonList.length} visitors?', + 'Do you want to schedule a visit for ${model.visitorJsonList.length} visitors?', ); showAlertDialog(context, title, content, scheduleVisit); @@ -1563,9 +1561,9 @@ Widget scheduleVisit(BuildContext context, context: context, builder: (context) { return GestureDetector( - onTap: () => _model.unfocusNode.canRequestFocus + onTap: () => model.unfocusNode.canRequestFocus ? FocusScope.of(context) - .requestFocus(_model.unfocusNode) + .requestFocus(model.unfocusNode) : FocusScope.of(context).unfocus(), child: Dialog( alignment: Alignment.topCenter, @@ -1599,28 +1597,28 @@ Widget scheduleVisit(BuildContext context, ), ], imagePath: - 'https://freaccess.com.br/freaccess/getImage.php?cliID=${_model.cliUUID}&atividade=getFoto&Documento=${_model.visitorJsonList[0]['VTE_DOCUMENTO'] ?? ''}&tipo=E', + 'https://freaccess.com.br/freaccess/getImage.php?cliID=${model.cliUUID}&atividade=getFoto&Documento=${model.visitorJsonList[0]['VTE_DOCUMENTO'] ?? ''}&tipo=E', labelsHashMap: { - 'Nome': _model.visitorJsonList[0]['VTE_NOME'], - 'Start': _model.textController1.text, - 'End': _model.textController2.text ?? '', + 'Nome': model.visitorJsonList[0]['VTE_NOME'], + 'Start': model.textController1.text, + 'End': model.textController2.text ?? '', 'Reason': (RegExp(r'MOT_DESCRICAO:\s*([^,]+)') .firstMatch( - _model.dropDownValue1.toString()) + model.dropDownValue1.toString()) ?.group(1) .toString()) ?? '', 'Level': (RegExp(r'NAC_DESCRICAO:\s*([^,]+)') .firstMatch( - _model.dropDownValue2.toString()) + model.dropDownValue2.toString()) ?.group(1) .toString()) ?? '', - 'Single Visit': _model.switchValue == true + 'Single Visit': model.switchValue == true ? 'Sim' : 'Não', - if (_model.textController3.text.isNotEmpty) - 'Observation': _model.textController3.text, + if (model.textController3.text.isNotEmpty) + 'Observation': model.textController3.text, }, statusHashMap: [ Map.from({ diff --git a/lib/pages/schedule_complete_visit_page/visit_history_page_widget.dart b/lib/pages/schedule_complete_visit_page/visit_history_page_widget.dart index 208d701d..c90bd2f3 100644 --- a/lib/pages/schedule_complete_visit_page/visit_history_page_widget.dart +++ b/lib/pages/schedule_complete_visit_page/visit_history_page_widget.dart @@ -5,14 +5,15 @@ import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/pages/schedule_complete_visit_page/schedule_complete_visit_page_model.dart'; import 'package:hub/pages/schedule_complete_visit_page/schedule_complete_visit_page_widget.dart'; -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; import 'package:hub/shared/mixins/status_mixin.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'package:hub/shared/utils/log_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:hub/shared/utils/validator_util.dart'; class VisitHistoryWidget extends ScheduleComplete { - const VisitHistoryWidget(); + const VisitHistoryWidget({super.key}); @override _VisitHistoryWidgetState createState() => _VisitHistoryWidgetState(); @@ -20,7 +21,6 @@ class VisitHistoryWidget extends ScheduleComplete { class _VisitHistoryWidgetState extends State with TickerProviderStateMixin, Status { - final DatabaseHelper db = DatabaseHelper(); late final String devUUID; late final String userUUID; late final String cliUUID; @@ -35,15 +35,9 @@ class _VisitHistoryWidgetState extends State List _visitWrap = []; Future _initVariables() async { - devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); - cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + devUUID = StorageUtil().devUUID; + userUUID = StorageUtil().userUUID; + cliUUID = StorageUtil().cliUUID; } @override @@ -82,7 +76,7 @@ class _VisitHistoryWidgetState extends State final List visits = response.jsonBody['visitas'] ?? []; - if (visits != null && visits.isNotEmpty) { + if (visits.isNotEmpty) { setState(() { _visitWrap.addAll(visits); _hasData = true; @@ -109,6 +103,7 @@ class _VisitHistoryWidgetState extends State _loading = false; }); } + return null; } void _loadMore() { @@ -252,19 +247,11 @@ class _VisitHistoryWidgetState extends State }, ], onTapCardItemAction: () async { - final DatabaseHelper db = DatabaseHelper(); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); - final cliName = await db - .get(key: 'cliName', field: 'value') - .then((value) => value.toString()); - final devUUID = await db - .get(key: 'devUUID', field: 'value') - .then((value) => value.toString()); - final userUUID = await db - .get(key: 'userUUID', field: 'value') - .then((value) => value.toString()); + final cliUUID = StorageUtil().cliUUID; + final cliName = StorageUtil().cliName; + final devUUID = StorageUtil().devUUID; + final userUUID = StorageUtil().userUUID; + await showDialog( useSafeArea: true, context: context, diff --git a/lib/pages/welcome_page/welcome_page_widget.dart b/lib/pages/welcome_page/welcome_page_widget.dart index 6b74a753..8a4be699 100644 --- a/lib/pages/welcome_page/welcome_page_widget.dart +++ b/lib/pages/welcome_page/welcome_page_widget.dart @@ -1,11 +1,12 @@ +import 'package:hub/shared/helpers/secure_storage_helper.dart'; import 'package:hub/shared/mixins/switcher_mixin.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import '/components/templates_components/welcome_template_component/welcome_template_component_widget.dart'; import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_util.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; -import 'package:provider/provider.dart'; import 'welcome_page_model.dart'; export 'welcome_page_model.dart'; @@ -29,13 +30,13 @@ class _WelcomePageWidgetState extends State { // On page load action. SchedulerBinding.instance.addPostFrameCallback((_) async { if (isAndroid == true) { - AppState().deviceType = 'Android'; + StorageUtil().deviceType = 'Android'; setState(() {}); } else if (isiOS == true) { - AppState().deviceType = 'iOS'; + StorageUtil().deviceType = 'iOS'; setState(() {}); } else { - AppState().deviceType = 'Web'; + StorageUtil().deviceType = 'Web'; setState(() {}); } }); @@ -50,8 +51,6 @@ class _WelcomePageWidgetState extends State { @override Widget build(BuildContext context) { - context.watch(); - return GestureDetector( onTap: () => _model.unfocusNode.canRequestFocus ? FocusScope.of(context).requestFocus(_model.unfocusNode) diff --git a/lib/shared/extensions/flutter_secure_storage_extensions.dart b/lib/shared/extensions/flutter_secure_storage_extensions.dart new file mode 100644 index 00000000..8bba2507 --- /dev/null +++ b/lib/shared/extensions/flutter_secure_storage_extensions.dart @@ -0,0 +1,56 @@ +import 'package:csv/csv.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:synchronized/synchronized.dart'; + +extension FlutterSecureStorageExtensions on FlutterSecureStorage { + static final _lock = Lock(); + + Future writeSync({required String key, String? value}) async => + await _lock.synchronized(() async { + await write(key: key, value: value); + }); + + void remove(String key) => delete(key: key); + + Future getString(String key) async => await read(key: key); + Future setString(String key, String value) async => + await writeSync(key: key, value: value); + + Future getBool(String key) async => (await read(key: key)) == 'true'; + Future setBool(String key, bool? value) async => + await writeSync(key: key, value: value.toString()); + + Future getInt(String key) async => + int.tryParse(await read(key: key) ?? ''); + Future setInt(String key, int value) async => + await writeSync(key: key, value: value.toString()); + + Future getDouble(String key) async => + double.tryParse(await read(key: key) ?? ''); + Future setDouble(String key, double value) async => + await writeSync(key: key, value: value.toString()); + + Future getObject(String key) async { + final value = await read(key: key); + if (value == null || value.isEmpty) { + return null; + } + return value as BuildContext; + } + + Future?> getStringList(String key) async => + await read(key: key).then((result) { + if (result == null || result.isEmpty) { + return null; + } + return const CsvToListConverter() + .convert(result) + .first + .map((e) => e.toString()) + .toList(); + }); + Future setStringList(String key, List value) async => + await writeSync( + key: key, value: const ListToCsvConverter().convert([value])); +} diff --git a/lib/shared/helpers/db_helper.dart b/lib/shared/helpers/db_helper.dart deleted file mode 100644 index 3e82a013..00000000 --- a/lib/shared/helpers/db_helper.dart +++ /dev/null @@ -1,240 +0,0 @@ -import 'dart:developer'; -import 'package:flutter/foundation.dart'; -import 'package:path/path.dart'; -import 'package:sqflite/sqflite.dart'; - -class DatabaseConfig { - static const String dbName = 'database.db'; - static const int dbVersion = 1; - - static const String tableKeychain = 'keychain'; - static const String columnKey = 'key'; - static const String columnValue = 'value'; - static const String columnType = 'type'; - static const String columnUpdateAt = 'updateAt'; - static const String columnResolvedAt = 'resolvedAt'; - static const String columnCreatedAt = 'createdAt'; -} - -class DatabaseHelper { - static final DatabaseHelper _instance = DatabaseHelper._internal(); - static Database? _database; - - factory DatabaseHelper() => _instance; - - DatabaseHelper._internal(); - - Future get database async { - if (_database != null) return _database!; - _database = await _initDatabase(); - return _database!; - } - - Future _initDatabase() async { - final path = await _getDatabasePath(); - log('Database path: $path'); - return await openDatabase( - path, - version: DatabaseConfig.dbVersion, - onCreate: _onCreate, - onOpen: _onOpen, - onUpgrade: _onUpgrade, - onDowngrade: _onDowngrade, - onConfigure: _onConfigure, - ).catchError((error) { - throw error; - }).whenComplete(() => log('Database initialized')); - } - - Future _getDatabasePath() async { - final databasesPath = await getDatabasesPath(); - final path = join(databasesPath, DatabaseConfig.dbName); - log('Database path: $path'); - return path; - } - - Future _onCreate(Database db, int version) async { - log('Creating tables...'); - await db.execute(''' - CREATE TABLE ${DatabaseConfig.tableKeychain} ( - ${DatabaseConfig.columnKey} TEXT UNIQUE, - ${DatabaseConfig.columnValue} TEXT, - ${DatabaseConfig.columnType} TEXT, - ${DatabaseConfig.columnUpdateAt} TEXT, - ${DatabaseConfig.columnResolvedAt} TEXT, - ${DatabaseConfig.columnCreatedAt} TEXT - ); - '''); - await _insertInitialData(db); - log('Tables created'); - } - - Future _insertInitialData(Database db) async { - final initialData = [ - {'key': 'devUUID', 'value': '', 'type': 'user'}, - {'key': 'userUUID', 'value': '', 'type': 'user'}, - {'key': 'userDevUUID', 'value': '', 'type': 'user'}, - {'key': 'status', 'value': '', 'type': 'user'}, - {'key': 'userName', 'value': '', 'type': 'user'}, - {'key': 'cliUUID', 'value': '', 'type': 'local'}, - {'key': 'ownerUUID', 'value': '', 'type': 'local'}, - {'key': 'cliName', 'value': '', 'type': 'local'}, - {'key': 'whatsapp', 'value': 'false', 'type': 'util'}, - {'key': 'provisional', 'value': 'false', 'type': 'util'}, - {'key': 'pets', 'value': 'false', 'type': 'util'}, - {'key': 'local', 'value': 'false', 'type': 'util'}, - {'key': 'notify', 'value': 'false', 'type': 'util'}, - {'key': 'fingerprint', 'value': 'false', 'type': 'util'}, - {'key': 'access', 'value': 'false', 'type': 'util'}, - {'key': 'panic', 'value': 'false', 'type': 'util'}, - {'key': 'person', 'value': 'false', 'type': 'util'}, - {'key': 'requestOSnotification', 'value': 'false', 'type': 'util'}, - {'key': 'petAmountRegister', 'value': '', 'type': 'local'}, - ]; - - for (var data in initialData) { - await db.insert(DatabaseConfig.tableKeychain, data); - } - } - - Future _onOpen(Database db) async { - log('Checking existing data...'); - await _checkExistingData(db); - } - - Future _onUpgrade(Database db, int oldVersion, int newVersion) async { - log('Upgrading database from version $oldVersion to $newVersion'); - } - - Future _onDowngrade(Database db, int oldVersion, int newVersion) async { - log('Downgrading database from version $oldVersion to $newVersion'); - } - - Future _onConfigure(Database db) async { - log('Configuring database...'); - } - - Future _checkExistingData(Database db) async { - try { - final maps = await db.query(DatabaseConfig.tableKeychain); - log('Existing data: $maps'); - } catch (error) { - log('Error checking existing data: $error'); - } - } - - Future deleteDatabaseDB() async { - final path = await _getDatabasePath(); - await deleteDatabase(path); - log('Database deleted'); - _database = null; - } - - Future get({String? key, String? field}) async { - try { - final db = await database; - List> queryResult; - - if (field != null && key != null) { - queryResult = await db.query( - DatabaseConfig.tableKeychain, - columns: [field], - where: '${DatabaseConfig.columnKey} = ?', - whereArgs: [key], - ); - } else if (field != null) { - queryResult = await db.query( - DatabaseConfig.tableKeychain, - columns: [field], - ); - } else if (key != null) { - field = DatabaseConfig.columnValue; - queryResult = await db.query( - DatabaseConfig.tableKeychain, - columns: [field], - where: '${DatabaseConfig.columnKey} = ?', - whereArgs: [key], - ); - } else { - queryResult = await db.query(DatabaseConfig.tableKeychain); - } - - log('Query result for key: $key, field: $field -> $queryResult'); - - if (queryResult.isNotEmpty) { - return queryResult.first[field]; - } else { - return null; - } - } catch (error) { - log('Error getting: $error'); - return null; - } - } - - Future insert(String key, dynamic value, String? type) async { - final db = await database; - - final Map data = { - DatabaseConfig.columnKey: key, - DatabaseConfig.columnValue: value.toString(), - DatabaseConfig.columnType: type, - DatabaseConfig.columnUpdateAt: DateTime.now().toIso8601String(), - DatabaseConfig.columnResolvedAt: null, - DatabaseConfig.columnCreatedAt: DateTime.now().toIso8601String(), - }; - - log('Inserting: $data'); - return await db.insert(DatabaseConfig.tableKeychain, data); - } - - Future update(String key, dynamic value, String? type) async { - final db = await database; - - final Map data = { - DatabaseConfig.columnKey: key, - if (value != null) DatabaseConfig.columnValue: value.toString(), - if (type != null) DatabaseConfig.columnType: type, - DatabaseConfig.columnUpdateAt: DateTime.now().toIso8601String(), - DatabaseConfig.columnResolvedAt: null, - DatabaseConfig.columnCreatedAt: DateTime.now().toIso8601String(), - }; - - log('Updating: $data'); - return await db.update( - DatabaseConfig.tableKeychain, - data, - where: '${DatabaseConfig.columnKey} = ?', - whereArgs: [key], - ); - } - - Future clear(String key) async { - final db = await database; - - log('Setting value of key: $key to empty string'); - return await db.update( - DatabaseConfig.tableKeychain, - {DatabaseConfig.columnValue: ''}, - where: '${DatabaseConfig.columnKey} = ?', - whereArgs: [key], - ); - } - - Future delete(String key) async { - final db = await database; - - log('Deleting key: $key'); - return await db.delete( - DatabaseConfig.tableKeychain, - where: '${DatabaseConfig.columnKey} = ?', - whereArgs: [key], - ); - } - - Future purge() async { - await deleteDatabaseDB(); - await database; - log('Purge'); - } -} diff --git a/lib/shared/helpers/secure_storage_helper.dart b/lib/shared/helpers/secure_storage_helper.dart new file mode 100644 index 00000000..5a996810 --- /dev/null +++ b/lib/shared/helpers/secure_storage_helper.dart @@ -0,0 +1,111 @@ +import 'dart:developer'; +import 'package:flutter/material.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:hub/shared/utils/storage_util.dart'; +import 'package:hub/shared/utils/cache_util.dart'; + +class SecureStorageHelper extends ChangeNotifier implements Storage { + static final SecureStorageHelper _instance = SecureStorageHelper._internal(); + final FlutterSecureStorage _secureStorage = const FlutterSecureStorage(); + + factory SecureStorageHelper() => _instance; + + SecureStorageHelper._internal(); + + static SecureStorageHelper get instance => _instance; + + + + + Future setAndCacheString(String key, String value, Function(String) cacheSetter) async { + log('setAndCacheString value for key: $key to $value'); + await _secureStorage.write(key: key, value: value); + CacheUtil.instance.set(key, value); + cacheSetter(value); + } + + Future setAndCacheBool(String key, bool value, Function(bool) cacheSetter) async { + log('setAndCacheBool value for key: $key to $value'); + await _secureStorage.write(key: key, value: value.toString()); + CacheUtil.instance.set(key, value); + cacheSetter(value); + } + + Future setAndCacheObject(String key, String value, Function(String) cacheSetter) async { + log('setAndCacheObject value for key: $key to $value'); + await _secureStorage.write(key: key, value: value); + CacheUtil.instance.set(key, value); + cacheSetter(value); + } + + Future getString(String key) async { + log('getString value for key: $key'); + var value = CacheUtil.instance.get(key); + if (value == null) { + value = await _secureStorage.read(key: key); + CacheUtil.instance.set(key, value); + } + return value; + } + + Future getBool(String key) async { + log('getBool value for key: $key'); + var value = CacheUtil.instance.get(key); + if (value == null) { + value = await _secureStorage.read(key: key); + CacheUtil.instance.set(key, value == 'true'); + } + return value == 'true'; + } + + Future getObject(String key) async { + log('getObject value for key: $key'); + var value = CacheUtil.instance.get(key); + if (value == null) { + value = await _secureStorage.read(key: key); + CacheUtil.instance.set(key, value); + } + return value as BuildContext?; + } + + @override + Future set(String key, dynamic value, Function(dynamic) cacheSetter) async { + if (value is String) { + await setAndCacheString(key, value, cacheSetter); + } else if (value is bool) { + await setAndCacheBool(key, value, cacheSetter); + } else if (value is BuildContext) { + await setAndCacheObject(key, value.toString(), cacheSetter); + } + } + + @override + Future get(String key) async { + log('get value for key: $key'); + var stringValue = await getString(key); + if (stringValue != null) return stringValue; + + var boolValue = await getBool(key); + if (boolValue != null) return boolValue; + + var objectValue = await getObject(key); + if (objectValue != null) return objectValue; + + return null; + } + + @override + Future delete(String key) async { + log('delete value for key: $key'); + await _secureStorage.delete(key: key); + CacheUtil.instance.delete(key); + } + + Future purge() async { + log('purge values'); + await _secureStorage.deleteAll(); + CacheUtil.instance.clear(); + } + + +} \ No newline at end of file diff --git a/lib/shared/helpers/shared_preferences_storage_helper.dart b/lib/shared/helpers/shared_preferences_storage_helper.dart new file mode 100644 index 00000000..422b8675 --- /dev/null +++ b/lib/shared/helpers/shared_preferences_storage_helper.dart @@ -0,0 +1,99 @@ +import 'dart:developer'; + +import 'package:hub/shared/utils/storage_util.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:hub/shared/utils/cache_util.dart'; + +class SharedPreferencesStorageHelper implements Storage { + static final SharedPreferencesStorageHelper _instance = SharedPreferencesStorageHelper._internal(); + SharedPreferences? _prefs; + SharedPreferences? get prefs => _prefs; + set prefs(SharedPreferences? value) => _prefs = value; + + factory SharedPreferencesStorageHelper() => _instance; + + SharedPreferencesStorageHelper._internal(); + + static SharedPreferencesStorageHelper get instance => _instance; + + bool _isFirstRun = true; + bool get isFirstRun => _isFirstRun; + set isFirstRun(bool value) => _setAndCacheBool('first_run', value, (v) => _isFirstRun = v); + + + + Future _setAndCache(String key, T value, Function(T) cacheSetter, Future Function(String, T) setFunc) async { + log('setAndCache value for key: $key to $value'); + await setFunc(key, value); + CacheUtil.instance.set(key, value); + cacheSetter(value); + } + + Future _setAndCacheString(String key, String value, Function(String) cacheSetter) async { + log('setAndCacheString value for key: $key to $value'); + await _setAndCache(key, value, cacheSetter, _prefs!.setString); + } + + Future _setAndCacheBool(String key, bool value, Function(bool) cacheSetter) async { + log('setAndCacheBool value for key: $key to $value'); + await _setAndCache(key, value, cacheSetter, _prefs!.setBool); + } + + Future _setAndCacheInt(String key, int value, Function(int) cacheSetter) async { + log('setAndCacheInt value for key: $key to $value'); + await _setAndCache(key, value, cacheSetter, _prefs!.setInt); + } + + Future _setAndCacheDouble(String key, double value, Function(double) cacheSetter) async { + log('setAndCacheDouble value for key: $key to $value'); + await _setAndCache(key, value, cacheSetter, _prefs!.setDouble); + } + + Future _setAndCacheStringList(String key, List value, Function(List) cacheSetter) async { + log('setAndCacheStringList value for key: $key to $value'); + await _setAndCache(key, value, cacheSetter, _prefs!.setStringList); + } + + @override + Future set(String key, dynamic value, Function(dynamic) cacheSetter) async { + + if (value is bool) { + await _prefs?.setBool(key, value); + } else if (value is String) { + await _prefs?.setString(key, value); + } else if (value is int) { + await _prefs?.setInt(key, value); + } else if (value is double) { + await _prefs?.setDouble(key, value); + } else if (value is List) { + await _prefs?.setStringList(key, value); + } + CacheUtil.instance.set(key, value); + } + + @override + Future get(String key) async { + log('Getting value for key: $key'); + var value = CacheUtil.instance.get(key); + if (value == null) { + value = _prefs?.get(key); + CacheUtil.instance.set(key, value); + } + return value; + } + + @override + Future delete(String key) async { + log('Deleting value for key: $key'); + await _prefs?.remove(key); + CacheUtil.instance.delete(key); + } + + @override + Future purge() async { + log('Purging shared preferences'); + await _prefs?.clear(); + CacheUtil.instance.clear(); + + } +} \ No newline at end of file diff --git a/lib/shared/helpers/sqlite_storage_helper.dart b/lib/shared/helpers/sqlite_storage_helper.dart new file mode 100644 index 00000000..d008d7ed --- /dev/null +++ b/lib/shared/helpers/sqlite_storage_helper.dart @@ -0,0 +1,293 @@ +import 'package:hub/shared/utils/cache_util.dart'; +import 'package:hub/shared/utils/storage_util.dart'; +import 'package:sqflite/sqflite.dart'; +import 'dart:developer'; +import 'package:path/path.dart'; + +class DatabaseConfig { + static const String dbName = 'database.db'; + static const int dbVersion = 1; + + static const String tableKeychain = 'keychain'; + static const String columnKey = 'key'; + static const String columnValue = 'value'; + static const String columnType = 'type'; + static const String columnUpdateAt = 'updateAt'; + static const String columnResolvedAt = 'resolvedAt'; + static const String columnCreatedAt = 'createdAt'; + + static const List> initialData = [ + {'key': 'devUUID', 'value': '', 'type': 'user'}, + {'key': 'userUUID', 'value': '', 'type': 'user'}, + {'key': 'userDevUUID', 'value': '', 'type': 'user'}, + {'key': 'status', 'value': '', 'type': 'user'}, + {'key': 'userName', 'value': '', 'type': 'user'}, + {'key': 'cliUUID', 'value': '', 'type': 'local'}, + {'key': 'ownerUUID', 'value': '', 'type': 'local'}, + {'key': 'cliName', 'value': '', 'type': 'local'}, + {'key': 'whatsapp', 'value': 'false', 'type': 'util'}, + {'key': 'provisional', 'value': 'false', 'type': 'util'}, + {'key': 'pets', 'value': 'false', 'type': 'util'}, + {'key': 'local', 'value': 'false', 'type': 'util'}, + {'key': 'notify', 'value': 'false', 'type': 'util'}, + {'key': 'fingerprint', 'value': 'false', 'type': 'util'}, + {'key': 'access', 'value': 'false', 'type': 'util'}, + {'key': 'panic', 'value': 'false', 'type': 'util'}, + {'key': 'person', 'value': 'false', 'type': 'util'}, + {'key': 'requestOSnotification', 'value': 'false', 'type': 'util'}, + {'key': 'petAmountRegister', 'value': '', 'type': 'local'}, + ]; +} + +class SQLiteStorageHelper implements Storage { + static final SQLiteStorageHelper _instance = SQLiteStorageHelper._internal(); + static Database? _database; + static String? _databasePath; + + factory SQLiteStorageHelper() => _instance; + + SQLiteStorageHelper._internal(); + + static SQLiteStorageHelper get instance => _instance; + + + + Future get database async { + log('Getting database instance'); + if (_database != null) return _database!; + _database = await _initDatabase(); + return _database!; + } + + Future _getDatabasePath() async { + log('Getting database path'); + if (_databasePath != null) return _databasePath!; + final databasesPath = await getDatabasesPath(); + _databasePath = join(databasesPath, DatabaseConfig.dbName); + log('Database path: $_databasePath'); + return _databasePath!; + } + + Future _initDatabase() async { + log('Initializing database'); + final path = await _getDatabasePath(); + return await openDatabase( + path, + version: DatabaseConfig.dbVersion, + onCreate: _onCreate, + onOpen: _onOpen, + onUpgrade: _onUpgrade, + onDowngrade: _onDowngrade, + onConfigure: _onConfigure, + ).catchError((error) { + log('Error initializing database: $error'); + throw error; + }).whenComplete(() async { + log('Database initialization complete'); + await setupLocalVariables(); + }); + } + + Future _onCreate(Database db, int version) async { + log('Creating tables...'); + await db.execute(''' + CREATE TABLE ${DatabaseConfig.tableKeychain} ( + ${DatabaseConfig.columnKey} TEXT UNIQUE, + ${DatabaseConfig.columnValue} TEXT, + ${DatabaseConfig.columnType} TEXT, + ${DatabaseConfig.columnUpdateAt} TEXT, + ${DatabaseConfig.columnResolvedAt} TEXT, + ${DatabaseConfig.columnCreatedAt} TEXT + ); + '''); + await _insertInitialData(db); + log('Tables created'); + } + + Future _insertInitialData(Database db) async { + log('Inserting initial data'); + final batch = db.batch(); + for (var data in DatabaseConfig.initialData) { + batch.insert(DatabaseConfig.tableKeychain, data); + } + await batch.commit(noResult: true); + log('Initial data inserted'); + } + + Future _onOpen(Database db) async { + log('Opening database'); + await _checkExistingData(db); + } + + Future _onUpgrade(Database db, int oldVersion, int newVersion) async { + log('Upgrading database from version $oldVersion to $newVersion'); + } + + Future _onDowngrade(Database db, int oldVersion, int newVersion) async { + log('Downgrading database from version $oldVersion to $newVersion'); + } + + Future _onConfigure(Database db) async { + log('Configuring database'); + } + + Future _checkExistingData(Database db) async { + log('Checking existing data'); + try { + final maps = await db.query(DatabaseConfig.tableKeychain); + log('Existing data: $maps'); + } catch (error) { + log('Error checking existing data: $error'); + } + } + + + Future setupLocalVariables() async { + log('Setting up local variables'); + try { + await _database?.transaction((txn) async { + final keys = [ + 'devUUID', + 'userUUID', + 'userDevUUID', + 'status', + 'userName', + 'cliUUID', + 'ownerUUID', + 'cliName', + 'petAmountRegister', + 'whatsapp', + 'provisional', + 'pets', + 'local', + 'notify', + 'fingerprint', + 'access', + 'panic', + 'person', + 'requestOSnotification' + ]; + + for (var key in keys) { + log('Fetching value for key: $key'); + final result = await txn.query( + DatabaseConfig.tableKeychain, + where: '${DatabaseConfig.columnKey} = ?', + whereArgs: [key], + ); + log('Result for key $key: $result'); + } + }); + log('Local variables setup complete'); + } catch (error) { + log('Error setting up local variables: $error'); + } + } + + Future getBoolean(String key) async { + log('Getting boolean value for key: $key'); + final value = await get(key); + return value == 'true'; + } + + + + @override + Future get(String key) async { + log('Getting value for key: $key'); + final cachedValue = CacheUtil().get(key); + if (cachedValue != null) { + log('Found cached value for key: $key'); + return cachedValue; + } + + try { + final db = await database; + final result = await db.query( + DatabaseConfig.tableKeychain, + columns: [DatabaseConfig.columnValue], + where: '${DatabaseConfig.columnKey} = ?', + whereArgs: [key], + ); + + if (result.isNotEmpty) { + final value = result.first[DatabaseConfig.columnValue]; + CacheUtil().set(key, value); + log('Value for key $key: $value'); + return value; + } + log('No value found for key: $key'); + return null; + } catch (error) { + log('Error getting value for key $key: $error'); + return null; + } + } + + @override + Future set(String key, dynamic value, Function(dynamic) cacheSetter) async { + log('Setting value for key: $key to $value'); + CacheUtil().set(key, value); + final db = await database; + final data = { + DatabaseConfig.columnKey: key, + DatabaseConfig.columnValue: value.toString(), + DatabaseConfig.columnUpdateAt: DateTime.now().toIso8601String(), + DatabaseConfig.columnCreatedAt: DateTime.now().toIso8601String(), + }; + + final result = await db.insert( + DatabaseConfig.tableKeychain, + data, + conflictAlgorithm: ConflictAlgorithm.replace, + ); + log('Value $value set for key: $key'); + return result; + } + + @override + Future delete(String key) async { + log('Deleting value for key: $key'); + final db = await database; + final result = await db.transaction((txn) async { + return await txn.delete( + DatabaseConfig.tableKeychain, + where: '${DatabaseConfig.columnKey} = ?', + whereArgs: [key], + ); + }); + log('Value deleted for key: $key'); + return result; + } + + @override + Future purge() async { + log('Purging database'); + await deleteDatabaseDB(); + await database; + log('Database purged'); + } + + Future deleteDatabaseDB() async { + log('Deleting database'); + final path = await _getDatabasePath(); + await deleteDatabase(path); + log('Database deleted'); + _database = null; + } + +} + + +class SqliteStorageDelegate {} + + + + + + + + + + + diff --git a/lib/shared/utils/biometric_util.dart b/lib/shared/utils/biometric_util.dart new file mode 100644 index 00000000..fcb67c53 --- /dev/null +++ b/lib/shared/utils/biometric_util.dart @@ -0,0 +1,31 @@ +import 'package:local_auth/local_auth.dart'; + +class BiometricHelper { + static final LocalAuthentication auth = LocalAuthentication(); + + static Future checkBiometrics() async { + try { + return await auth.canCheckBiometrics; + } catch (e) { + // Log or handle the error + return false; + } + } + + static Future authenticateBiometric() async { + try { + return await auth.authenticate( + localizedReason: 'Scan your fingerprint to authenticate', + options: const AuthenticationOptions( + biometricOnly: true, + stickyAuth: true, + useErrorDialogs: true, + sensitiveTransaction: true, + ), + ); + } catch (e) { + // Log or handle the error + return false; + } + } +} diff --git a/lib/shared/utils/cache_util.dart b/lib/shared/utils/cache_util.dart new file mode 100644 index 00000000..4baf2128 --- /dev/null +++ b/lib/shared/utils/cache_util.dart @@ -0,0 +1,34 @@ +class CacheUtil { + static final CacheUtil _instance = CacheUtil._internal(); + static final Map _cache = {}; + + CacheUtil._internal(); + + factory CacheUtil() => _instance; + + static CacheUtil get instance => _instance; + + void set(String key, dynamic value) { + _cache[key] = value; + } + + dynamic get(String key) { + return _cache[key]; + } + + bool containsKey(String key) { + return _cache.containsKey(key); + } + + dynamic getOrElse(String key, dynamic fallback) { + return _cache.containsKey(key) ? _cache[key] : fallback; + } + + void delete(String key) { + _cache.remove(key); + } + + void clear() { + _cache.clear(); + } +} \ No newline at end of file diff --git a/lib/shared/utils/device_util.dart b/lib/shared/utils/device_util.dart index 76fb92d2..42519099 100644 --- a/lib/shared/utils/device_util.dart +++ b/lib/shared/utils/device_util.dart @@ -19,6 +19,7 @@ class DeviceUtil { var androidDeviceInfo = await deviceInfo.androidInfo; return androidDeviceInfo.id; // unique ID on Android } + return null; } static Future getSerialNumber() async { @@ -31,5 +32,6 @@ class DeviceUtil { var androidDeviceInfo = await deviceInfo.androidInfo; return androidDeviceInfo.serialNumber; // unique ID on Android } + return null; } } diff --git a/lib/shared/utils/image_util.dart b/lib/shared/utils/image_util.dart index 25c56281..fe728e0d 100644 --- a/lib/shared/utils/image_util.dart +++ b/lib/shared/utils/image_util.dart @@ -17,6 +17,7 @@ class ImageUtils { String base64Image = base64Encode(imageBytes); return base64Image; } + return null; } static Future convertToUploadFile(String img) async { diff --git a/lib/shared/utils/log_util.dart b/lib/shared/utils/log_util.dart index 11aa8b27..519cedee 100644 --- a/lib/shared/utils/log_util.dart +++ b/lib/shared/utils/log_util.dart @@ -1,6 +1,5 @@ import 'dart:developer'; -import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:hub/backend/api_requests/api_calls.dart'; class LogUtil { diff --git a/lib/shared/utils/share_util.dart b/lib/shared/utils/share_util.dart index bfcb1cec..842c5102 100644 --- a/lib/shared/utils/share_util.dart +++ b/lib/shared/utils/share_util.dart @@ -1,15 +1,11 @@ -import 'package:hub/shared/helpers/db_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/storage_util.dart'; import 'package:share_plus/share_plus.dart'; class ShareUtil { static Future showShare(payload) async { - final DatabaseHelper db = DatabaseHelper(); - final cliName = await db - .get(key: 'cliName', field: 'value') - .then((value) => value.toString()); - final cliUUID = await db - .get(key: 'cliUUID', field: 'value') - .then((value) => value.toString()); + final cliName = StorageUtil().cliName; + final cliUUID = StorageUtil().cliUUID; for (var i = 0; i < payload['convites'].length; i++) { await Share.share(''' @@ -20,7 +16,7 @@ Olá, \*${payload['convites'][i]['VTE_NOME']}\*! Você foi convidado para \*$cli - Fim: ${payload['convites'][i]['VAW_DTFIM']} URL do Convite: https://visita.freaccess.com.br/${payload['convites'][i]['VAW_ID']}/$cliUUID/${payload['convites'][i]['VAW_CHAVE']} - '''); +'''); } } } diff --git a/lib/shared/utils/storage_util.dart b/lib/shared/utils/storage_util.dart new file mode 100644 index 00000000..e1e6067c --- /dev/null +++ b/lib/shared/utils/storage_util.dart @@ -0,0 +1,394 @@ +import 'dart:developer'; + +import 'package:flutter/material.dart'; +import 'package:hub/shared/helpers/secure_storage_helper.dart'; +import 'package:hub/shared/helpers/shared_preferences_storage_helper.dart'; +import 'package:hub/shared/helpers/sqlite_storage_helper.dart'; +import 'package:hub/shared/utils/cache_util.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +enum StorageType { SecureStorage, SharedPreferences, SQLite3 } + +abstract class Storage { + Future set(String key, dynamic value, Function(dynamic) cacheSetter); + Future get(String key); + Future delete(String key); + Future purge(); +} + +class StorageData { + final String key; + final dynamic value; + final StorageType type; + + StorageData(this.key, this.value, this.type); +} + +class StorageUtil { + static final StorageUtil _instance = StorageUtil._internal(); + + factory StorageUtil() { + return _instance; + } + + StorageUtil._internal(); + + final SQLiteStorageHelper _sqliteStorage = SQLiteStorageHelper(); + final SecureStorageHelper _secureStorage = SecureStorageHelper(); + final SharedPreferencesStorageHelper _sharedPreferences = + SharedPreferencesStorageHelper(); + + static Future set(StorageData data) async { + try { + var currentValue = CacheUtil().get(data.key); + if (currentValue != null && currentValue == data.value) { + log('Value for key ${data.key} is already set to ${data.value}, skipping update.'); + return; + } + + switch (data.type) { + case StorageType.SecureStorage: + await SecureStorageHelper().set(data.key, data.value, (v) {}); + break; + case StorageType.SharedPreferences: + await SharedPreferencesStorageHelper() + .set(data.key, data.value, (v) {}); + break; + case StorageType.SQLite3: + await SQLiteStorageHelper().set(data.key, data.value, (v) {}); + break; + } + CacheUtil().set(data.key, data.value); + } catch (e) { + log('Error setting data: $e'); + } + } + + static Future get(StorageData data) async { + try { + var value = CacheUtil().get(data.key); + if (value == null) { + switch (data.type) { + case StorageType.SecureStorage: + value = await SecureStorageHelper().get(data.key); + break; + case StorageType.SharedPreferences: + value = await SharedPreferencesStorageHelper().get(data.key); + break; + case StorageType.SQLite3: + value = await SQLiteStorageHelper().get(data.key); + break; + } + CacheUtil().set(data.key, value); + } + return value; + } catch (e) { + log('Error getting data: $e'); + return null; + } + } + + static Future delete(StorageData data) async { + try { + CacheUtil().delete(data.key); + switch (data.type) { + case StorageType.SecureStorage: + await SecureStorageHelper().delete(data.key); + break; + case StorageType.SharedPreferences: + await SharedPreferencesStorageHelper().delete(data.key); + break; + case StorageType.SQLite3: + await SQLiteStorageHelper().delete(data.key); + break; + } + } catch (e) { + log('Error deleting data: $e'); + } + } + + static Future purge() async { + try { + await SecureStorageHelper().purge(); + await SharedPreferencesStorageHelper().purge(); + await SQLiteStorageHelper().purge(); + } catch (e) { + log('Error purging data: $e'); + } + } + + Future ensureInitialization() async { + await initSharedPreferences(); + await initSecureStorage(); + await initSQLiteStorage(); + } + + Future initSharedPreferences() async { + if (_sharedPreferences.prefs == null) { + _sharedPreferences.prefs = await SharedPreferences.getInstance(); + _sharedPreferences.isFirstRun = + _sharedPreferences.prefs?.getBool('first_run') ?? true; + } + if (_sharedPreferences.isFirstRun) { + _sharedPreferences.isFirstRun = false; + _sharedPreferences.purge(); + } + } + + Future initSecureStorage() async { + log('SecureStorageHelper: Starting initialization'); + try { + _email = await _secureStorage.getString('ff_email'); + _passwd = await _secureStorage.getString('ff_passwd'); + _deviceType = await _secureStorage.getString('ff_deviceType'); + _isLogged = await _secureStorage.getBool('ff_isLogged'); + _tokenAPNS = await _secureStorage.getString('ff_tokenAPNS'); + _accessPass = await _secureStorage.getString('accessPass'); + _panicPass = await _secureStorage.getString('panicPass'); + _fingerprintPass = await _secureStorage.getString('fingerprintPass'); + _haveLocal = await _secureStorage.getBool('ff_have_local'); + _deviceDescription = await _secureStorage.getString('deviceDescription'); + } catch (e) { + log('SecureStorageHelper: Error during initialization: $e'); + } + log('SecureStorageHelper: Initialization complete'); + } + + Future initSQLiteStorage() async { + log('SQLiteStorageHelper: Starting initialization'); + try { + await _sqliteStorage.database; + } catch (e) { + log('SQLiteStorageHelper: Error during initialization: $e'); + } + log('SQLiteStorageHelper: Initialization complete'); + } + + bool _isFirstRun = true; + bool get isFirstRun => _isFirstRun; + set isFirstRun(bool value) { + _isFirstRun = value; + _sharedPreferences.set('first_run', value, (v) => _isFirstRun = v); + } + + String? _deviceDescription; + String get deviceDescription => _deviceDescription ?? ''; + set deviceDescription(String value) { + _deviceDescription = value; + _secureStorage.set( + 'deviceDescription', value, (v) => _deviceDescription = v); + } + + BuildContext? _context; + BuildContext? get context => _context; + set context(BuildContext? value) { + _context = value; + _secureStorage.set('ff_context', value.toString(), (v) => _context = value); + } + + bool? _haveLocal; + bool? get haveLocal => _haveLocal; + set haveLocal(bool? value) { + _haveLocal = value; + _secureStorage.set( + 'ff_have_local', value ?? false, (v) => _haveLocal = value); + } + + String? _fingerprintPass; + String get fingerprintPass => _fingerprintPass ?? ''; + set fingerprintPass(String value) { + _fingerprintPass = value; + _secureStorage.set('fingerprintPass', value, (v) => _fingerprintPass = v); + } + + String? _accessPass; + String get accessPass => _accessPass ?? ''; + set accessPass(String value) { + _accessPass = value; + _secureStorage.set('accessPass', value, (v) => _accessPass = v); + } + + String? _panicPass; + String get panicPass => _panicPass ?? ''; + set panicPass(String value) { + _panicPass = value; + _secureStorage.set('panicPass', value, (v) => _panicPass = v); + } + + String? _tokenAPNS; + String? get tokenAPNS => _tokenAPNS; + set tokenAPNS(String? value) { + _tokenAPNS = value; + _secureStorage.set('ff_tokenAPNS', value ?? '', (v) => _tokenAPNS = v); + } + + String? _email; + String get email => _email ?? ''; + set email(String value) { + _email = value; + _secureStorage.set('ff_email', value, (v) => _email = v); + } + + String? _passwd; + String get passwd => _passwd ?? ''; + set passwd(String value) { + _passwd = value; + _secureStorage.set('ff_passwd', value, (v) => _passwd = v); + } + + String? _deviceType; + String get deviceType => _deviceType ?? ''; + set deviceType(String value) { + _deviceType = value; + _secureStorage.set('ff_deviceType', value, (v) => _deviceType = v); + } + + bool? _isLogged; + bool get isLogged => _isLogged ?? false; + set isLogged(bool value) { + _isLogged = value; + _secureStorage.set('ff_isLogged', value, (v) => _isLogged = v); + } + + String? _token; + String get token => _token ?? ''; + set token(String value) { + _token = value; + _secureStorage.set('ff_token', value, (v) => _token = v); + } + + String _devUUID = ''; + String get devUUID => _devUUID; + set devUUID(String value) { + _devUUID = value; + _sqliteStorage.set('devUUID', value, (v) {}); + } + + String _userUUID = ''; + String get userUUID => _userUUID; + set userUUID(String value) { + _userUUID = value; + _sqliteStorage.set('userUUID', value, (v) {}); + } + + String _userDevUUID = ''; + String get userDevUUID => _userDevUUID; + set userDevUUID(String value) { + _userDevUUID = value; + _sqliteStorage.set('userDevUUID', value, (v) {}); + } + + String _status = ''; + String get status => _status; + set status(String value) { + _status = value; + _sqliteStorage.set('status', value, (v) {}); + } + + String _userName = ''; + String get userName => _userName; + set userName(String value) { + _userName = value; + _sqliteStorage.set('userName', value, (v) {}); + } + + String _cliUUID = ''; + String get cliUUID => _cliUUID; + set cliUUID(String value) { + _cliUUID = value; + _sqliteStorage.set('cliUUID', value, (v) {}); + } + + String _ownerUUID = ''; + String get ownerUUID => _ownerUUID; + set ownerUUID(String value) { + _ownerUUID = value; + _sqliteStorage.set('ownerUUID', value, (v) {}); + } + + String _cliName = ''; + String get cliName => _cliName; + set cliName(String value) { + _cliName = value; + _sqliteStorage.set('cliName', value, (v) {}); + } + + String _petAmountRegister = ''; + String get petAmountRegister => _petAmountRegister; + set petAmountRegister(String value) { + _petAmountRegister = value; + _sqliteStorage.set('petAmountRegister', value, (v) {}); + } + + bool _whatsapp = false; + bool get whatsapp => _whatsapp; + set whatsapp(bool value) { + _whatsapp = value; + _sqliteStorage.set('whatsapp', value, (v) {}); + } + + bool _provisional = false; + bool get provisional => _provisional; + set provisional(bool value) { + _provisional = value; + _sqliteStorage.set('provisional', value, (v) {}); + } + + bool _pets = false; + bool get pets => _pets; + set pets(bool value) { + _pets = value; + _sqliteStorage.set('pets', value, (v) {}); + } + + bool _local = false; + bool get local => _local; + set local(bool value) { + _local = value; + _sqliteStorage.set('local', value, (v) {}); + } + + bool _notify = false; + bool get notify => _notify; + set notify(bool value) { + _notify = value; + _sqliteStorage.set('notify', value, (v) {}); + } + + bool _fingerprint = false; + bool get fingerprint => _fingerprint; + set fingerprint(bool value) { + _fingerprint = value; + _sqliteStorage.set('fingerprint', value, (v) {}); + } + + bool _access = false; + bool get access => _access; + set access(bool value) { + _access = value; + _sqliteStorage.set('access', value, (v) {}); + } + + bool _panic = false; + bool get panic => _panic; + set panic(bool value) { + _panic = value; + _sqliteStorage.set('panic', value, (v) {}); + } + + bool _person = false; + bool get person => _person; + set person(bool value) { + _person = value; + _sqliteStorage.set('person', value, (v) {}); + } + + bool _requestOSnotification = false; + bool get requestOSnotification => _requestOSnotification; + set requestOSnotification(bool value) { + _requestOSnotification = value; + _sqliteStorage.set('requestOSnotification', value, (v) {}); + } + + String get createdAt => '0000-00-00 00:00:00'; +} diff --git a/lib/shared/utils/validator_util.dart b/lib/shared/utils/validator_util.dart index f1550827..18424821 100644 --- a/lib/shared/utils/validator_util.dart +++ b/lib/shared/utils/validator_util.dart @@ -23,14 +23,14 @@ class ValidatorUtil { DateFormat dateFormat = DateFormat(format); DateTime dateTime = dateFormat.parse(value); - return dateTime.toIso8601String() + 'Z'; + return '${dateTime.toIso8601String()}Z'; } static String toISO8601USA(String format, String value) { DateFormat dateFormat = DateFormat(format); DateTime dateTime = dateFormat.parse(value); - String date = dateTime.toIso8601String() + 'Z'; - date = date.substring(0, 11) + '03:00:00.000Z'; + String date = '${dateTime.toIso8601String()}Z'; + date = '${date.substring(0, 11)}03:00:00.000Z'; return date; } diff --git a/lib/shared/widgets/drawer_widget/drawer_widget.dart b/lib/shared/widgets/drawer_widget/drawer_widget.dart index 0a4ad55a..80af1bf1 100644 --- a/lib/shared/widgets/drawer_widget/drawer_widget.dart +++ b/lib/shared/widgets/drawer_widget/drawer_widget.dart @@ -52,7 +52,7 @@ class CustomDrawer extends StatelessWidget { width: 50.0, height: 50.0, clipBehavior: Clip.antiAlias, - decoration: BoxDecoration( + decoration: const BoxDecoration( shape: BoxShape.circle, ), child: CachedNetworkImage(