Merge branch 'develop' into feature/fd-466

This commit is contained in:
J. A. Messias 2024-11-08 10:26:45 -03:00
commit 83f7b0aeff
8 changed files with 29 additions and 59 deletions

View File

@ -37,7 +37,7 @@ class _LocalProfileComponentWidgetState extends State<LocalProfileComponentWidge
// //
// WidgetsBinding.instance // WidgetsBinding.instance
// .addPostFrameCallback((_) async => await LocalizationService.processLocals(context).then((value) => value == true ? onUpdate() : null)); // .addPostFrameCallback((_) async => await LocalizationService.processLocals(context).then((value) => value == true ? onUpdate() : null));
LocalizationService.processLocals(context).then((value) => value == true ? onUpdate() : null); // LocalizationService.processLocals(context).then((value) => value == true ? onUpdate() : null);
} }
@override @override

View File

@ -24,6 +24,8 @@ import 'package:hub/shared/services/localization/localization_service.dart';
import 'package:hub/shared/utils/device_util.dart'; import 'package:hub/shared/utils/device_util.dart';
import 'package:responsive_framework/responsive_framework.dart'; import 'package:responsive_framework/responsive_framework.dart';
import 'backend/notifications/firebase_messaging_service.dart';
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>(); final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
void main() async { void main() async {
@ -250,7 +252,6 @@ class _AppState extends State<App> with WidgetsBindingObserver {
super.initState(); super.initState();
WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addObserver(this);
log('DeviceUtil: ${DeviceUtil.getDeviceOSVersion()}');
FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
_appStateNotifier = AppStateNotifier.instance; _appStateNotifier = AppStateNotifier.instance;
@ -271,7 +272,10 @@ class _AppState extends State<App> with WidgetsBindingObserver {
@override @override
void didChangeAppLifecycleState(AppLifecycleState state) async { void didChangeAppLifecycleState(AppLifecycleState state) async {
if(state == AppLifecycleState.resumed) await LocalizationService.processLocals(context); if(state == AppLifecycleState.detached) {
await LocalizationService.processLocals(context);
FirebaseMessagingService().updateDeviceToken();
}
} }
@override @override

View File

@ -41,7 +41,7 @@ class _HomePageWidgetState extends State<HomePageWidget> {
_model = createModel(context, () => HomePageModel(safeSetState: () => safeSetState((){}))); _model = createModel(context, () => HomePageModel(safeSetState: () => safeSetState((){})));
FirebaseMessagingService().updateDeviceToken();
_model.textController ??= TextEditingController(); _model.textController ??= TextEditingController();
_model.textFieldFocusNode ??= FocusNode(); _model.textFieldFocusNode ??= FocusNode();

View File

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:hub/shared/helpers/base_storage.dart'; import 'package:hub/shared/helpers/base_storage.dart';
class SecureStorage extends ChangeNotifier implements BaseStorage { class SecureStorage implements BaseStorage {
SecureStorage._(); SecureStorage._();
static final SecureStorage instance = SecureStorage._(); static final SecureStorage instance = SecureStorage._();
@ -22,18 +22,15 @@ class SecureStorage extends ChangeNotifier implements BaseStorage {
@override @override
Future<void> set(String key, String value) async { Future<void> set(String key, String value) async {
await _secureStorage.write(key: key, value: value); await _secureStorage.write(key: key, value: value);
notifyListeners();
} }
@override @override
Future<void> delete(String key) async { Future<void> delete(String key) async {
await _secureStorage.delete(key: key); await _secureStorage.delete(key: key);
notifyListeners();
} }
@override @override
Future<void> clearAll() async { Future<void> clearAll() async {
await _secureStorage.deleteAll(); await _secureStorage.deleteAll();
notifyListeners();
} }
} }

View File

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:hub/shared/helpers/base_storage.dart'; import 'package:hub/shared/helpers/base_storage.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
class SharedPreferencesStorage extends ChangeNotifier implements BaseStorage { class SharedPreferencesStorage implements BaseStorage {
SharedPreferencesStorage._(); SharedPreferencesStorage._();
static final SharedPreferencesStorage instance = SharedPreferencesStorage._(); static final SharedPreferencesStorage instance = SharedPreferencesStorage._();
@ -22,18 +22,15 @@ class SharedPreferencesStorage extends ChangeNotifier implements BaseStorage {
@override @override
Future<void> set(String key, String value) async { Future<void> set(String key, String value) async {
await _prefs.setString(key, value); await _prefs.setString(key, value);
notifyListeners();
} }
@override @override
Future<void> delete(String key) async { Future<void> delete(String key) async {
await _prefs.remove(key); await _prefs.remove(key);
notifyListeners();
} }
@override @override
Future<void> clearAll() async { Future<void> clearAll() async {
await _prefs.clear(); await _prefs.clear();
notifyListeners();
} }
} }

View File

@ -1,21 +1,21 @@
import 'package:flutter/material.dart';
import 'package:hub/shared/helpers/base_storage.dart'; import 'package:hub/shared/helpers/base_storage.dart';
import 'package:sqflite/sqflite.dart'; import 'package:sqflite/sqflite.dart';
import 'package:sqflite/sqlite_api.dart'; import 'package:sqflite/sqlite_api.dart';
import 'package:path/path.dart'; import 'package:path/path.dart';
class SQLiteStorage extends ChangeNotifier implements BaseStorage { class SQLiteStorage implements BaseStorage {
SQLiteStorage._(); SQLiteStorage._();
final String _dbName = 'database.db'; static final String _dbName = 'database.db';
final int _dbVersion = 1; static final int _dbVersion = 1;
static const String tableKeychain = 'keychain';
static final SQLiteStorage instance = SQLiteStorage._(); static final SQLiteStorage instance = SQLiteStorage._();
late final _database; late final _database;
@override @override Future<void> init() async {
Future<void> init() async {
_database = await openDatabase( _database = await openDatabase(
join(await getDatabasesPath(), _dbName), join(await getDatabasesPath(), _dbName),
version: _dbVersion, version: _dbVersion,
@ -23,30 +23,15 @@ class SQLiteStorage extends ChangeNotifier implements BaseStorage {
onUpgrade: _onUpdate, onUpgrade: _onUpdate,
onDowngrade: _onDowngrade, onDowngrade: _onDowngrade,
); );
// await _onInitLocalVariables(_database);
await _onInitLocalVariables(_database);
} }
_onCreate(Database database, int version) async { _onCreate(Database database, int version) async {
await database.execute(_tableKeychain); await database.execute(_tableKeychain);
} }
_onUpdate(Database database, int oldVersion, int newVersion) async {} _onUpdate(Database database, int oldVersion, int newVersion) async {}
_onDowngrade(Database database, int oldVersion, int newVersion) async {} _onDowngrade(Database database, int oldVersion, int newVersion) async {}
_onInitLocalVariables(Database database) async {
// TODO: Talvez precise colocar um transaction aqui como o
// database.batch() para melhorar a performance
for (var variable in _localVariables) {
var isConfig = await database.query('keychain', where: 'key = ?', whereArgs: [variable['key']]);
if (isConfig.isEmpty) {
await database.insert('keychain', variable);
}
}
}
String get _tableKeychain => ''' String get _tableKeychain => '''
CREATE TABLE keychain ( CREATE TABLE keychain (
@ -81,22 +66,18 @@ class SQLiteStorage extends ChangeNotifier implements BaseStorage {
{'key': SQLiteStorageKey.petAmount.value, 'value': '', 'type': 'local'}, {'key': SQLiteStorageKey.petAmount.value, 'value': '', 'type': 'local'},
]; ];
@override @override Future<String?> get(String key) async {
Future<String?> get(String key) async {
var response = await _database.query('keychain', where: 'key = ?', whereArgs: [key]); var response = await _database.query('keychain', where: 'key = ?', whereArgs: [key]);
if (response.isEmpty) { if (response.isEmpty) {
return null; return null;
} }
return response.first['value']; return response.first['value'];
} }
@override @override Future<void> set(String key, String value) async {
Future<void> set(String key, String value) async {
var date = DateTime.now().toIso8601String(); var date = DateTime.now().toIso8601String();
await _database.insert( await _database.insert(
'keychain', tableKeychain,
{ {
'key': key, 'key': key,
'value': value, 'value': value,
@ -105,24 +86,15 @@ class SQLiteStorage extends ChangeNotifier implements BaseStorage {
'resolvedAt': date, 'resolvedAt': date,
'createdAt': date, 'createdAt': date,
}, },
conflictAlgorithm: ConflictAlgorithm.replace); conflictAlgorithm: ConflictAlgorithm.replace
notifyListeners(); );
} }
@override @override Future<void> delete(String key) async {
Future<void> delete(String key) async {
var isConfig = await _database.query('keychain', where: 'key = ?', whereArgs: [key]);
if (isConfig.isNotEmpty) {
await _database.delete('keychain', where: 'key = ?', whereArgs: [key]); await _database.delete('keychain', where: 'key = ?', whereArgs: [key]);
} }
notifyListeners(); @override Future<void> clearAll() async {
}
@override
Future<void> clearAll() async {
await _database.delete('keychain'); await _database.delete('keychain');
notifyListeners();
} }
} }

View File

@ -6,8 +6,6 @@ import 'package:hub/shared/helpers/sqlite_storage.dart';
class StorageHelper { class StorageHelper {
static final StorageHelper _instance = StorageHelper._internal(); static final StorageHelper _instance = StorageHelper._internal();
factory StorageHelper() => _instance; factory StorageHelper() => _instance;
StorageHelper._internal(); StorageHelper._internal();

View File

@ -210,16 +210,18 @@ class LocalizationService {
enText: 'Error getting authentication credentials', enText: 'Error getting authentication credentials',
); );
await DialogUtil.error(context, errorMsg); await DialogUtil.error(context, errorMsg);
return;
// await DialogUtil.error(context, errorMsg).whenComplete(() async => await AuthenticationService.signOut(context)); // await DialogUtil.error(context, errorMsg).whenComplete(() async => await AuthenticationService.signOut(context));
} }
else if (isAuthenticated && !isDevLinked) { if (!isDevLinked) {
errorMsg = FFLocalizations.of(context).getVariableText( errorMsg = FFLocalizations.of(context).getVariableText(
ptText: 'Não foi possível vincular o dispositivo, tente novamente.', ptText: 'Não foi possível vincular o dispositivo, tente novamente.',
enText: 'Unable to link device, try again', enText: 'Unable to link device, try again',
); );
await DialogUtil.warning(context, errorMsg); await DialogUtil.warning(context, errorMsg);
return;
} }
else if (isAuthenticated && isDevLinked) await DialogUtil.error(context, errorMsg).whenComplete(() async => await selectLocal(context)); await DialogUtil.error(context, errorMsg).whenComplete(() async => await selectLocal(context));
} }