import 'package:flutter/material.dart'; import '/backend/schema/structs/index.dart'; import '/backend/api_requests/api_manager.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:csv/csv.dart'; import 'package:synchronized/synchronized.dart'; import 'flutter_flow/flutter_flow_util.dart'; class FFAppState extends ChangeNotifier { static FFAppState _instance = FFAppState._internal(); factory FFAppState() { return _instance; } FFAppState._internal(); static void reset() { _instance = FFAppState._internal(); } Future initializePersistedState() async { secureStorage = FlutterSecureStorage(); await _safeInitAsync(() async { _userCsrftoken = await secureStorage.getString('ff_userCsrftoken') ?? _userCsrftoken; }); await _safeInitAsync(() async { _userSessionid = await secureStorage.getString('ff_userSessionid') ?? _userSessionid; }); await _safeInitAsync(() async { _userSessionname = await secureStorage.getString('ff_userSessionname') ?? _userSessionname; }); await _safeInitAsync(() async { _userName = await secureStorage.getString('ff_userName') ?? _userName; }); await _safeInitAsync(() async { _userUid = await secureStorage.getInt('ff_userUid') ?? _userUid; }); await _safeInitAsync(() async { _provincielijst = LoggableList( (await secureStorage.getStringList('ff_provincielijst')) ?.map((x) { try { return ProvincieModelStruct.fromSerializableMap( jsonDecode(x)); } catch (e) { print("Can't decode persisted data type. Error: $e."); return null; } }) .withoutNulls .toList() ?? _provincielijst, ); }); await _safeInitAsync(() async { _provincieSelectId = await secureStorage.getString('ff_provincieSelectId') ?? _provincieSelectId; }); await _safeInitAsync(() async { _gemeentelijst = LoggableList( (await secureStorage.getStringList('ff_gemeentelijst')) ?.map((x) { try { return GemeenteModelStruct.fromSerializableMap( jsonDecode(x)); } catch (e) { print("Can't decode persisted data type. Error: $e."); return null; } }) .withoutNulls .toList() ?? _gemeentelijst, ); }); await _safeInitAsync(() async { _gemeenteSelectId = await secureStorage.getString('ff_gemeenteSelectId') ?? _gemeenteSelectId; }); await _safeInitAsync(() async { _provincieSelectNaam = await secureStorage.getString('ff_provincieSelectNaam') ?? _provincieSelectNaam; }); await _safeInitAsync(() async { _gemeenteSelectNaam = await secureStorage.getString('ff_gemeenteSelectNaam') ?? _gemeenteSelectNaam; }); } void update(VoidCallback callback) { callback(); notifyListeners(); } late FlutterSecureStorage secureStorage; /// csrftoken String _userCsrftoken = ''; String get userCsrftoken => _userCsrftoken; set userCsrftoken(String value) { _userCsrftoken = value; secureStorage.setString('ff_userCsrftoken', value); debugLogAppState(this); } void deleteUserCsrftoken() { secureStorage.delete(key: 'ff_userCsrftoken'); } String _userSessionid = ''; String get userSessionid => _userSessionid; set userSessionid(String value) { _userSessionid = value; secureStorage.setString('ff_userSessionid', value); debugLogAppState(this); } void deleteUserSessionid() { secureStorage.delete(key: 'ff_userSessionid'); } String _userSessionname = ''; String get userSessionname => _userSessionname; set userSessionname(String value) { _userSessionname = value; secureStorage.setString('ff_userSessionname', value); debugLogAppState(this); } void deleteUserSessionname() { secureStorage.delete(key: 'ff_userSessionname'); } String _userName = ''; String get userName => _userName; set userName(String value) { _userName = value; secureStorage.setString('ff_userName', value); debugLogAppState(this); } void deleteUserName() { secureStorage.delete(key: 'ff_userName'); } int _userUid = 0; int get userUid => _userUid; set userUid(int value) { _userUid = value; secureStorage.setInt('ff_userUid', value); debugLogAppState(this); } void deleteUserUid() { secureStorage.delete(key: 'ff_userUid'); } late LoggableList _provincielijst = LoggableList([ ProvincieModelStruct.fromSerializableMap(jsonDecode( '{\"provinciename\":\"Hello World\",\"provincieid\":\"Hello World\",\"municipality\":\"[\\\"{\\\\\\\"municipalityname\\\\\\\":\\\\\\\"Hello World\\\\\\\",\\\\\\\"municipalityid\\\\\\\":\\\\\\\"Hello World\\\\\\\"}\\\"]\"}')) ]); List get provincielijst => _provincielijst?..logger = () => debugLogAppState(this); set provincielijst(List value) { if (value != null) { _provincielijst = LoggableList(value); } secureStorage.setStringList( 'ff_provincielijst', value.map((x) => x.serialize()).toList()); debugLogAppState(this); } void deleteProvincielijst() { secureStorage.delete(key: 'ff_provincielijst'); } void addToProvincielijst(ProvincieModelStruct value) { provincielijst.add(value); secureStorage.setStringList('ff_provincielijst', _provincielijst.map((x) => x.serialize()).toList()); } void removeFromProvincielijst(ProvincieModelStruct value) { provincielijst.remove(value); secureStorage.setStringList('ff_provincielijst', _provincielijst.map((x) => x.serialize()).toList()); } void removeAtIndexFromProvincielijst(int index) { provincielijst.removeAt(index); secureStorage.setStringList('ff_provincielijst', _provincielijst.map((x) => x.serialize()).toList()); } void updateProvincielijstAtIndex( int index, ProvincieModelStruct Function(ProvincieModelStruct) updateFn, ) { provincielijst[index] = updateFn(_provincielijst[index]); secureStorage.setStringList('ff_provincielijst', _provincielijst.map((x) => x.serialize()).toList()); } void insertAtIndexInProvincielijst(int index, ProvincieModelStruct value) { provincielijst.insert(index, value); secureStorage.setStringList('ff_provincielijst', _provincielijst.map((x) => x.serialize()).toList()); } String _provincieSelectId = '28666'; String get provincieSelectId => _provincieSelectId; set provincieSelectId(String value) { _provincieSelectId = value; secureStorage.setString('ff_provincieSelectId', value); debugLogAppState(this); } void deleteProvincieSelectId() { secureStorage.delete(key: 'ff_provincieSelectId'); } late LoggableList _gemeentelijst = LoggableList([]); List get gemeentelijst => _gemeentelijst?..logger = () => debugLogAppState(this); set gemeentelijst(List value) { if (value != null) { _gemeentelijst = LoggableList(value); } secureStorage.setStringList( 'ff_gemeentelijst', value.map((x) => x.serialize()).toList()); debugLogAppState(this); } void deleteGemeentelijst() { secureStorage.delete(key: 'ff_gemeentelijst'); } void addToGemeentelijst(GemeenteModelStruct value) { gemeentelijst.add(value); secureStorage.setStringList( 'ff_gemeentelijst', _gemeentelijst.map((x) => x.serialize()).toList()); } void removeFromGemeentelijst(GemeenteModelStruct value) { gemeentelijst.remove(value); secureStorage.setStringList( 'ff_gemeentelijst', _gemeentelijst.map((x) => x.serialize()).toList()); } void removeAtIndexFromGemeentelijst(int index) { gemeentelijst.removeAt(index); secureStorage.setStringList( 'ff_gemeentelijst', _gemeentelijst.map((x) => x.serialize()).toList()); } void updateGemeentelijstAtIndex( int index, GemeenteModelStruct Function(GemeenteModelStruct) updateFn, ) { gemeentelijst[index] = updateFn(_gemeentelijst[index]); secureStorage.setStringList( 'ff_gemeentelijst', _gemeentelijst.map((x) => x.serialize()).toList()); } void insertAtIndexInGemeentelijst(int index, GemeenteModelStruct value) { gemeentelijst.insert(index, value); secureStorage.setStringList( 'ff_gemeentelijst', _gemeentelijst.map((x) => x.serialize()).toList()); } String _gemeenteSelectId = '28694'; String get gemeenteSelectId => _gemeenteSelectId; set gemeenteSelectId(String value) { _gemeenteSelectId = value; secureStorage.setString('ff_gemeenteSelectId', value); debugLogAppState(this); } void deleteGemeenteSelectId() { secureStorage.delete(key: 'ff_gemeenteSelectId'); } String _provincieSelectNaam = ''; String get provincieSelectNaam => _provincieSelectNaam; set provincieSelectNaam(String value) { _provincieSelectNaam = value; secureStorage.setString('ff_provincieSelectNaam', value); debugLogAppState(this); } void deleteProvincieSelectNaam() { secureStorage.delete(key: 'ff_provincieSelectNaam'); } String _gemeenteSelectNaam = ''; String get gemeenteSelectNaam => _gemeenteSelectNaam; set gemeenteSelectNaam(String value) { _gemeenteSelectNaam = value; secureStorage.setString('ff_gemeenteSelectNaam', value); debugLogAppState(this); } void deleteGemeenteSelectNaam() { secureStorage.delete(key: 'ff_gemeenteSelectNaam'); } String _currentHorcat = ''; String get currentHorcat => _currentHorcat; set currentHorcat(String value) { _currentHorcat = value; debugLogAppState(this); } late LoggableList _currentOriginalLijst = LoggableList([]); List get currentOriginalLijst => _currentOriginalLijst?..logger = () => debugLogAppState(this); set currentOriginalLijst(List value) { if (value != null) { _currentOriginalLijst = LoggableList(value); } debugLogAppState(this); } void addToCurrentOriginalLijst(String value) { currentOriginalLijst.add(value); } void removeFromCurrentOriginalLijst(String value) { currentOriginalLijst.remove(value); } void removeAtIndexFromCurrentOriginalLijst(int index) { currentOriginalLijst.removeAt(index); } void updateCurrentOriginalLijstAtIndex( int index, String Function(String) updateFn, ) { currentOriginalLijst[index] = updateFn(_currentOriginalLijst[index]); } void insertAtIndexInCurrentOriginalLijst(int index, String value) { currentOriginalLijst.insert(index, value); } late LoggableList _currentFilteredLijst = LoggableList([]); List get currentFilteredLijst => _currentFilteredLijst?..logger = () => debugLogAppState(this); set currentFilteredLijst(List value) { if (value != null) { _currentFilteredLijst = LoggableList(value); } debugLogAppState(this); } void addToCurrentFilteredLijst(String value) { currentFilteredLijst.add(value); } void removeFromCurrentFilteredLijst(String value) { currentFilteredLijst.remove(value); } void removeAtIndexFromCurrentFilteredLijst(int index) { currentFilteredLijst.removeAt(index); } void updateCurrentFilteredLijstAtIndex( int index, String Function(String) updateFn, ) { currentFilteredLijst[index] = updateFn(_currentFilteredLijst[index]); } void insertAtIndexInCurrentFilteredLijst(int index, String value) { currentFilteredLijst.insert(index, value); } late LoggableList _currentUniqueCategorieen = LoggableList([]); List get currentUniqueCategorieen => _currentUniqueCategorieen?..logger = () => debugLogAppState(this); set currentUniqueCategorieen(List value) { if (value != null) { _currentUniqueCategorieen = LoggableList(value); } debugLogAppState(this); } void addToCurrentUniqueCategorieen(String value) { currentUniqueCategorieen.add(value); } void removeFromCurrentUniqueCategorieen(String value) { currentUniqueCategorieen.remove(value); } void removeAtIndexFromCurrentUniqueCategorieen(int index) { currentUniqueCategorieen.removeAt(index); } void updateCurrentUniqueCategorieenAtIndex( int index, String Function(String) updateFn, ) { currentUniqueCategorieen[index] = updateFn(_currentUniqueCategorieen[index]); } void insertAtIndexInCurrentUniqueCategorieen(int index, String value) { currentUniqueCategorieen.insert(index, value); } String _currentSelectedCategorie = ''; String get currentSelectedCategorie => _currentSelectedCategorie; set currentSelectedCategorie(String value) { _currentSelectedCategorie = value; debugLogAppState(this); } bool _isLoading = false; bool get isLoading => _isLoading; set isLoading(bool value) { _isLoading = value; debugLogAppState(this); } Map toDebugSerializableMap() => { 'userCsrftoken': debugSerializeParam( userCsrftoken, ParamType.String, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CioKGQoNdXNlckNzcmZ0b2tlbhIIcm1vaGxvcWpyAggDegljc3JmdG9rZW5aDXVzZXJDc3JmdG9rZW4=', name: 'String', nullable: false, ), 'userSessionid': debugSerializeParam( userSessionid, ParamType.String, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CiEKGQoNdXNlclNlc3Npb25pZBIIZHBuYzVmYXdyAggDegBaDXVzZXJTZXNzaW9uaWQ=', name: 'String', nullable: false, ), 'userSessionname': debugSerializeParam( userSessionname, ParamType.String, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CiMKGwoPdXNlclNlc3Npb25uYW1lEgg5ZHp5cG1sMXICCAN6AFoPdXNlclNlc3Npb25uYW1l', name: 'String', nullable: false, ), 'userName': debugSerializeParam( userName, ParamType.String, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=ChwKFAoIdXNlck5hbWUSCGF6MHRqNTkycgIIA3oAWgh1c2VyTmFtZQ==', name: 'String', nullable: false, ), 'userUid': debugSerializeParam( userUid, ParamType.int, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=ChsKEwoHdXNlclVpZBIIcHFhcTJlNG9yAggBegBaB3VzZXJVaWQ=', name: 'int', nullable: false, ), 'provincielijst': debugSerializeParam( provincielijst, ParamType.DataStruct, isList: true, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CjoKGgoOcHJvdmluY2llbGlqc3QSCHlza2E1Z3o2choSAggUKhQSEgoJUHJvdmluY2llEgVnY3l5anoAWg5wcm92aW5jaWVsaWpzdA==', name: 'ProvincieModel', nullable: false, ), 'provincieSelectId': debugSerializeParam( provincieSelectId, ParamType.String, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CiUKHQoRcHJvdmluY2llU2VsZWN0SWQSCGl0amt2azNrcgIIA3oAWhFwcm92aW5jaWVTZWxlY3RJZA==', name: 'String', nullable: false, ), 'gemeentelijst': debugSerializeParam( gemeentelijst, ParamType.DataStruct, isList: true, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=Cj0KGQoNZ2VtZWVudGVsaWpzdBIIeTlnaDFnYTRyHhICCBQqGBIWCg1HZW1lZW50ZU1vZGVsEgU4MnU3dXoAWg1nZW1lZW50ZWxpanN0', name: 'GemeenteModel', nullable: false, ), 'gemeenteSelectId': debugSerializeParam( gemeenteSelectId, ParamType.String, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CiQKHAoQZ2VtZWVudGVTZWxlY3RJZBIIandnYjA5Z25yAggDegBaEGdlbWVlbnRlU2VsZWN0SWQ=', name: 'String', nullable: false, ), 'provincieSelectNaam': debugSerializeParam( provincieSelectNaam, ParamType.String, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CicKHwoTcHJvdmluY2llU2VsZWN0TmFhbRIIaGdrOWFiMGVyAggDegBaE3Byb3ZpbmNpZVNlbGVjdE5hYW0=', name: 'String', nullable: false, ), 'gemeenteSelectNaam': debugSerializeParam( gemeenteSelectNaam, ParamType.String, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CiYKHgoSZ2VtZWVudGVTZWxlY3ROYWFtEgh3MXprNXNmYXICCAN6AFoSZ2VtZWVudGVTZWxlY3ROYWFt', name: 'String', nullable: false, ), 'currentHorcat': debugSerializeParam( currentHorcat, ParamType.String, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CiEKGQoNY3VycmVudEhvcmNhdBIIeHJ1M29kNmFyAggDegBaDWN1cnJlbnRIb3JjYXQ=', name: 'String', nullable: false, ), 'currentOriginalLijst': debugSerializeParam( currentOriginalLijst, ParamType.String, isList: true, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CioKIAoUY3VycmVudE9yaWdpbmFsTGlqc3QSCGlmaGd6ODZpcgQSAggDegBaFGN1cnJlbnRPcmlnaW5hbExpanN0', name: 'String', nullable: false, ), 'currentFilteredLijst': debugSerializeParam( currentFilteredLijst, ParamType.String, isList: true, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CioKIAoUY3VycmVudEZpbHRlcmVkTGlqc3QSCDRjZTkycnFkcgQSAggDegBaFGN1cnJlbnRGaWx0ZXJlZExpanN0', name: 'String', nullable: false, ), 'currentUniqueCategorieen': debugSerializeParam( currentUniqueCategorieen, ParamType.String, isList: true, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=Ci4KJAoYY3VycmVudFVuaXF1ZUNhdGVnb3JpZWVuEghrcGdlejEyOXIEEgIIA3oAWhhjdXJyZW50VW5pcXVlQ2F0ZWdvcmllZW4=', name: 'String', nullable: false, ), 'currentSelectedCategorie': debugSerializeParam( currentSelectedCategorie, ParamType.String, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=CiwKJAoYY3VycmVudFNlbGVjdGVkQ2F0ZWdvcmllEgh0MXl3dDNydnICCAN6AFoYY3VycmVudFNlbGVjdGVkQ2F0ZWdvcmll', name: 'String', nullable: false, ), 'isLoading': debugSerializeParam( isLoading, ParamType.bool, link: 'https://app.flutterflow.io/project/uitgaanskrant-1qhvtd?tab=appValues&appValuesTab=state', searchReference: 'reference=Ch0KFQoJaXNMb2FkaW5nEgg4eWlsMnFua3ICCAV6AFoJaXNMb2FkaW5n', name: 'bool', nullable: false, ) }; } 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?> getStringList(String key) async => await read(key: key).then((result) { if (result == null || result.isEmpty) { return null; } return CsvToListConverter() .convert(result) .first .map((e) => e.toString()) .toList(); }); Future setStringList(String key, List value) async => await writeSync(key: key, value: ListToCsvConverter().convert([value])); }