flutter-freaccess-hub/lib/app_state.dart

475 lines
12 KiB
Dart

import 'dart:ffi';
import 'package:f_r_e_hub/flutter_flow/permissions_util.dart';
import 'package:flutter/material.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:csv/csv.dart';
import 'package:local_auth/local_auth.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:synchronized/synchronized.dart';
class FFAppState 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<bool> checkBiometrics() async {
try {
return await auth.canCheckBiometrics;
} catch (e) {
clearBiometricAuthentication();
debugPrint('Error checking biometrics: $e');
return false;
}
}
// Solicita autenticação biométrica
Future<void> 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();
// Salvar o estado de autenticação biométrica, se necessário
}
} catch (e) {
print(e);
debugPrint('Error authenticating: $e');
clearBiometricAuthentication();
}
}
// 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 FFAppState _instance = FFAppState._internal();
factory FFAppState() {
return _instance;
}
FFAppState._internal();
static void reset() {
_instance = FFAppState._internal();
}
Future initializePersistedState() async {
secureStorage = const FlutterSecureStorage();
await _safeInitAsync(() async {
_cliUUID = await secureStorage.getString('ff_cliUUID') ?? _cliUUID;
});
await _safeInitAsync(() async {
_ownerUUID = await secureStorage.getString('ff_ownerUUID') ?? _ownerUUID;
});
await _safeInitAsync(() async {
_userUUID = await secureStorage.getString('ff_userUUID') ?? _userUUID;
});
await _safeInitAsync(() async {
_devUUID = await secureStorage.getString('ff_devUUID') ?? _devUUID;
});
await _safeInitAsync(() async {
_email = await secureStorage.getString('ff_email') ?? _email;
});
await _safeInitAsync(() async {
_passwd = await secureStorage.getString('ff_passwd') ?? _passwd;
});
await _safeInitAsync(() async {
_device = await secureStorage.getString('ff_device') ?? _device;
});
await _safeInitAsync(() async {
_isLogged = await secureStorage.getBool('ff_isLogged') ?? _isLogged;
});
await _safeInitAsync(() async {
_local = await secureStorage.getString('ff_local') ?? _local;
});
await _safeInitAsync(() async {
_token = await secureStorage.getString('ff_token') ?? _token;
});
await _safeInitAsync(() async {
_createdAt = await secureStorage.getString('ff_createdAt') ?? _createdAt;
});
await _safeInitAsync(() async {
_updatedAt = await secureStorage.getString('ff_updatedAt') ?? _updatedAt;
});
await _safeInitAsync(() async {
_status = await secureStorage.getString('ff_status') ?? _status;
});
await _safeInitAsync(() async {
_name = await secureStorage.getString('ff_name') ?? _name;
});
await _safeInitAsync(() async {
_tokenAPNS = await secureStorage.getString('ff_tokenAPNS') ?? _tokenAPNS;
});
await _safeInitAsync(() async {
_userDevUUID = await secureStorage.getString('ff_user_dev_id') ?? _userDevUUID;
});
await _safeInitAsync(() async {
_serialNumber = await secureStorage.getString('ff_serialNumber') ?? _serialNumber;
});
await _safeInitAsync(() async {
_fingerprintOPT = await secureStorage.getBool('fingerprint') ?? _fingerprintOPT;
});
await _safeInitAsync(() async {
_personOPT = await secureStorage.getBool('person') ?? _personOPT;
});
await _safeInitAsync(() async {
_passOPT = await secureStorage.getBool('pass') ?? _passOPT;
});
await _safeInitAsync(() async {
_notifyOPT = await secureStorage.getBool('notify') ?? _notifyOPT;
});
await _safeInitAsync(() async {
_accessPass = await secureStorage.getString('accessPass') ?? _accessPass;
});
await _safeInitAsync(() async {
_panicPass = await secureStorage.getString('panicPass') ?? _panicPass;
});
}
void update(VoidCallback callback) {
callback();
notifyListeners();
}
late FlutterSecureStorage secureStorage;
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');
}
bool _notifyOPT = false;
bool get notify => _notifyOPT;
set notify(bool value) {
_notifyOPT = value;
secureStorage.setBool('notify', value);
}
bool _passOPT = false;
bool get pass => _passOPT;
set pass(bool value) {
_passOPT =
value;
secureStorage.setBool('pass', value);
}
void deletePass() {
secureStorage.delete(key: 'pass');
}
bool _personOPT = false;
bool get person => _personOPT;
set person(bool value) {
_personOPT = value;
secureStorage.setBool('person', value);
}
void deletePerson() {
secureStorage.delete(key: 'person');
}
bool _fingerprintOPT = false;
bool get fingerprint => _fingerprintOPT;
set fingerprint(bool value) {
_fingerprintOPT = value;
secureStorage.setBool('fingerprint', value);
}
void deleteFingerprint() {
secureStorage.delete(key: 'fingerprint');
}
String _serialNumber = '';
String get serialNumber => _serialNumber;
set serialNumber(String value) {
_serialNumber = value;
secureStorage.setString('ff_serialNumber', value);
}
void deleteSerialNumber() {
secureStorage.delete(key: 'ff_serialNumber');
}
String _cliUUID = '';
String get cliUUID => _cliUUID;
set cliUUID(String value) {
_cliUUID = value;
secureStorage.setString('ff_cliUUID', value);
}
void deleteCliUUID() {
secureStorage.delete(key: 'ff_cliUUID');
}
String _userDevUUID = '';
String get userDevUUID => _userDevUUID;
set userDevUUID(String value) {
_userDevUUID = value;
secureStorage.setString('ff_user_dev_id', value);
}
void deleteRemoteId() {
secureStorage.delete(key: 'ff_user_dev_id');
}
String? _tokenAPNS = '';
String? get tokenAPNS => _tokenAPNS;
set tokenAPNS(String? value) {
_tokenAPNS = value;
// Verifica se o valor é nulo antes de tentar salvar no secureStorage
if (value != null) {
secureStorage.setString('ff_tokenAPNS', value);
} else {
secureStorage.delete(key: 'ff_tokenAPNS');
}
}
void deleteTokenAPNS() {
secureStorage.delete(key: 'ff_tokenAPNS');
}
String _ownerUUID = '';
String get ownerUUID => _ownerUUID;
set ownerUUID(String value) {
_ownerUUID = value;
secureStorage.setString('ff_ownerUUID', value);
}
void deleteOwnerUUID() {
secureStorage.delete(key: 'ff_ownerUUID');
}
String _userUUID = '';
String get userUUID => _userUUID;
set userUUID(String value) {
_userUUID = value;
secureStorage.setString('ff_userUUID', value);
}
void deleteUserUUID() {
secureStorage.delete(key: 'ff_userUUID');
}
String _devUUID = '';
String get devUUID => _devUUID;
set devUUID(String value) {
_devUUID = value;
secureStorage.setString('ff_devUUID', value);
}
void deleteDevUUID() {
secureStorage.delete(key: 'ff_devUUID');
}
String _email = '';
String get email => _email;
set email(String value) {
_email = value;
secureStorage.setString('ff_email', value);
}
void deleteEmail() {
secureStorage.delete(key: 'ff_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');
}
String _device = '';
String get device => _device;
set device(String value) {
_device = value;
secureStorage.setString('ff_device', value);
}
void deleteDevice() {
secureStorage.delete(key: 'ff_device');
}
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 _local = '';
String get local => _local;
set local(String value) {
_local = value;
secureStorage.setString('ff_local', value);
}
void deleteLocal() {
secureStorage.delete(key: 'ff_local');
}
String _token = '';
String get token => _token;
set token(String value) {
_token = value;
secureStorage.setString('ff_token', value);
}
void deleteToken() {
secureStorage.delete(key: 'ff_token');
}
String _createdAt = '';
String get createdAt => _createdAt;
set createdAt(String value) {
_createdAt = value;
secureStorage.setString('ff_createdAt', value);
}
void deleteCreatedAt() {
secureStorage.delete(key: 'ff_createdAt');
}
String _updatedAt = '';
String get updatedAt => _updatedAt;
set updatedAt(String value) {
_updatedAt = value;
secureStorage.setString('ff_updatedAt', value);
}
void deleteUpdatedAt() {
secureStorage.delete(key: 'ff_updatedAt');
}
String _status = '';
String get status => _status;
set status(String value) {
_status = value;
secureStorage.setString('ff_status', value);
}
void deleteStatus() {
secureStorage.delete(key: 'ff_status');
}
String _name = '';
String get name => _name;
set name(String value) {
_name = value;
secureStorage.setString('ff_name', value);
}
void deleteName() {
secureStorage.delete(key: 'ff_name');
}
void deleteAll() {
secureStorage.deleteAll();
}
}
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<void> 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<String?> getString(String key) async => await read(key: key);
Future<void> setString(String key, String value) async =>
await writeSync(key: key, value: value);
Future<bool?> getBool(String key) async => (await read(key: key)) == 'true';
Future<void> setBool(String key, bool value) async =>
await writeSync(key: key, value: value.toString());
Future<int?> getInt(String key) async =>
int.tryParse(await read(key: key) ?? '');
Future<void> setInt(String key, int value) async =>
await writeSync(key: key, value: value.toString());
Future<double?> getDouble(String key) async =>
double.tryParse(await read(key: key) ?? '');
Future<void> setDouble(String key, double value) async =>
await writeSync(key: key, value: value.toString());
Future<List<String>?> 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<void> setStringList(String key, List<String> value) async =>
await writeSync(
key: key, value: const ListToCsvConverter().convert([value]));
}