add new FFAppStates
This commit is contained in:
parent
c51d8621e6
commit
3f0dc9a034
|
@ -44,8 +44,8 @@
|
|||
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
6436409C27A31CD200820AF7 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
6436409D27A31CD100820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
6436409327A31CD100820AF7 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
6436409927A31CD000820AF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
|
@ -225,8 +225,8 @@
|
|||
6436409C27A31CD800820AF7 /* InfoPlist.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
6436409C27A31CD200820AF7 /* pt */,
|
||||
6436409D27A31CD100820AF7 /* en */,
|
||||
6436409327A31CD100820AF7 /* pt */,
|
||||
6436409927A31CD000820AF7 /* en */,
|
||||
);
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
|
|
|
@ -151,8 +151,12 @@ Future singInActionApp(
|
|||
},
|
||||
);
|
||||
|
||||
FFAppState().deleteEmail();
|
||||
FFAppState().email = '';
|
||||
|
||||
FFAppState().deletePasswd();
|
||||
FFAppState().passwd = '';
|
||||
|
||||
FFAppState().update(() {});
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:csv/csv.dart';
|
||||
import 'package:synchronized/synchronized.dart';
|
||||
|
||||
class FFAppState extends ChangeNotifier {
|
||||
static FFAppState _instance = FFAppState._internal();
|
||||
|
@ -15,36 +17,45 @@ class FFAppState extends ChangeNotifier {
|
|||
}
|
||||
|
||||
Future initializePersistedState() async {
|
||||
prefs = await SharedPreferences.getInstance();
|
||||
_safeInit(() {
|
||||
_cliUUID = prefs.getString('ff_cliUUID') ?? _cliUUID;
|
||||
secureStorage = const FlutterSecureStorage();
|
||||
await _safeInitAsync(() async {
|
||||
_cliUUID = await secureStorage.getString('ff_cliUUID') ?? _cliUUID;
|
||||
});
|
||||
_safeInit(() {
|
||||
_ownerUUID = prefs.getString('ff_ownerUUID') ?? _ownerUUID;
|
||||
await _safeInitAsync(() async {
|
||||
_ownerUUID = await secureStorage.getString('ff_ownerUUID') ?? _ownerUUID;
|
||||
});
|
||||
_safeInit(() {
|
||||
_userUUID = prefs.getString('ff_userUUID') ?? _userUUID;
|
||||
await _safeInitAsync(() async {
|
||||
_userUUID = await secureStorage.getString('ff_userUUID') ?? _userUUID;
|
||||
});
|
||||
_safeInit(() {
|
||||
_devUUID = prefs.getString('ff_devUUID') ?? _devUUID;
|
||||
await _safeInitAsync(() async {
|
||||
_devUUID = await secureStorage.getString('ff_devUUID') ?? _devUUID;
|
||||
});
|
||||
_safeInit(() {
|
||||
_email = prefs.getString('ff_email') ?? _email;
|
||||
await _safeInitAsync(() async {
|
||||
_email = await secureStorage.getString('ff_email') ?? _email;
|
||||
});
|
||||
_safeInit(() {
|
||||
_passwd = prefs.getString('ff_passwd') ?? _passwd;
|
||||
await _safeInitAsync(() async {
|
||||
_passwd = await secureStorage.getString('ff_passwd') ?? _passwd;
|
||||
});
|
||||
_safeInit(() {
|
||||
_device = prefs.getString('ff_device') ?? _device;
|
||||
await _safeInitAsync(() async {
|
||||
_device = await secureStorage.getString('ff_device') ?? _device;
|
||||
});
|
||||
_safeInit(() {
|
||||
_isLogged = prefs.getBool('ff_isLogged') ?? _isLogged;
|
||||
await _safeInitAsync(() async {
|
||||
_isLogged = await secureStorage.getBool('ff_isLogged') ?? _isLogged;
|
||||
});
|
||||
_safeInit(() {
|
||||
_local = prefs.getString('ff_local') ?? _local;
|
||||
await _safeInitAsync(() async {
|
||||
_local = await secureStorage.getString('ff_local') ?? _local;
|
||||
});
|
||||
_safeInit(() {
|
||||
_token = prefs.getString('ff_token') ?? _token;
|
||||
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;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -53,76 +64,149 @@ class FFAppState extends ChangeNotifier {
|
|||
notifyListeners();
|
||||
}
|
||||
|
||||
late SharedPreferences prefs;
|
||||
late FlutterSecureStorage secureStorage;
|
||||
|
||||
String _cliUUID = '';
|
||||
String get cliUUID => _cliUUID;
|
||||
set cliUUID(String value) {
|
||||
_cliUUID = value;
|
||||
prefs.setString('ff_cliUUID', value);
|
||||
secureStorage.setString('ff_cliUUID', value);
|
||||
}
|
||||
|
||||
void deleteCliUUID() {
|
||||
secureStorage.delete(key: 'ff_cliUUID');
|
||||
}
|
||||
|
||||
String _ownerUUID = '';
|
||||
String get ownerUUID => _ownerUUID;
|
||||
set ownerUUID(String value) {
|
||||
_ownerUUID = value;
|
||||
prefs.setString('ff_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;
|
||||
prefs.setString('ff_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;
|
||||
prefs.setString('ff_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;
|
||||
prefs.setString('ff_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;
|
||||
prefs.setString('ff_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;
|
||||
prefs.setString('ff_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;
|
||||
prefs.setBool('ff_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;
|
||||
prefs.setString('ff_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;
|
||||
prefs.setString('ff_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');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -137,3 +221,46 @@ Future _safeInitAsync(Function() initializeField) async {
|
|||
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]));
|
||||
}
|
||||
|
|
|
@ -1,87 +0,0 @@
|
|||
// ignore_for_file: unnecessary_getters_setters
|
||||
|
||||
import '/backend/schema/util/schema_util.dart';
|
||||
|
||||
import 'index.dart';
|
||||
import '/flutter_flow/flutter_flow_util.dart';
|
||||
|
||||
class ActionStruct extends BaseStruct {
|
||||
ActionStruct({
|
||||
String? title,
|
||||
String? icon,
|
||||
}) : _title = title,
|
||||
_icon = icon;
|
||||
|
||||
// "title" field.
|
||||
String? _title;
|
||||
String get title => _title ?? '';
|
||||
set title(String? val) => _title = val;
|
||||
|
||||
bool hasTitle() => _title != null;
|
||||
|
||||
// "icon" field.
|
||||
String? _icon;
|
||||
String get icon => _icon ?? '';
|
||||
set icon(String? val) => _icon = val;
|
||||
|
||||
bool hasIcon() => _icon != null;
|
||||
|
||||
static ActionStruct fromMap(Map<String, dynamic> data) => ActionStruct(
|
||||
title: data['title'] as String?,
|
||||
icon: data['icon'] as String?,
|
||||
);
|
||||
|
||||
static ActionStruct? maybeFromMap(dynamic data) =>
|
||||
data is Map ? ActionStruct.fromMap(data.cast<String, dynamic>()) : null;
|
||||
|
||||
Map<String, dynamic> toMap() => {
|
||||
'title': _title,
|
||||
'icon': _icon,
|
||||
}.withoutNulls;
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toSerializableMap() => {
|
||||
'title': serializeParam(
|
||||
_title,
|
||||
ParamType.String,
|
||||
),
|
||||
'icon': serializeParam(
|
||||
_icon,
|
||||
ParamType.String,
|
||||
),
|
||||
}.withoutNulls;
|
||||
|
||||
static ActionStruct fromSerializableMap(Map<String, dynamic> data) =>
|
||||
ActionStruct(
|
||||
title: deserializeParam(
|
||||
data['title'],
|
||||
ParamType.String,
|
||||
false,
|
||||
),
|
||||
icon: deserializeParam(
|
||||
data['icon'],
|
||||
ParamType.String,
|
||||
false,
|
||||
),
|
||||
);
|
||||
|
||||
@override
|
||||
String toString() => 'ActionStruct(${toMap()})';
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is ActionStruct && title == other.title && icon == other.icon;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => const ListEquality().hash([title, icon]);
|
||||
}
|
||||
|
||||
ActionStruct createActionStruct({
|
||||
String? title,
|
||||
String? icon,
|
||||
}) =>
|
||||
ActionStruct(
|
||||
title: title,
|
||||
icon: icon,
|
||||
);
|
|
@ -1,4 +1,3 @@
|
|||
export '/backend/schema/util/schema_util.dart';
|
||||
|
||||
export 'action_struct.dart';
|
||||
export 'device_struct.dart';
|
||||
|
|
|
@ -101,12 +101,19 @@ class LoginPageModel extends FlutterFlowModel<LoginPageWidget> {
|
|||
},
|
||||
);
|
||||
|
||||
FFAppState().deleteEmail();
|
||||
FFAppState().email = '';
|
||||
|
||||
FFAppState().deletePasswd();
|
||||
FFAppState().passwd = '';
|
||||
|
||||
FFAppState().update(() {});
|
||||
}
|
||||
} else {
|
||||
FFAppState().deleteEmail();
|
||||
FFAppState().email = '';
|
||||
|
||||
FFAppState().deletePasswd();
|
||||
FFAppState().passwd = '';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ dependencies:
|
|||
cached_network_image: 3.3.1
|
||||
collection: 1.18.0
|
||||
crop_your_image: 1.0.0
|
||||
csv: 5.0.1
|
||||
device_info_plus: 9.1.2
|
||||
dropdown_button2: 2.3.9
|
||||
easy_debounce: 2.0.1
|
||||
|
@ -37,6 +38,12 @@ dependencies:
|
|||
flutter_animate: 4.1.1+1
|
||||
flutter_cache_manager: 3.3.1
|
||||
flutter_plugin_android_lifecycle: 2.0.17
|
||||
flutter_secure_storage: 8.0.0
|
||||
flutter_secure_storage_linux: 1.2.0
|
||||
flutter_secure_storage_macos: 3.0.1
|
||||
flutter_secure_storage_platform_interface: 1.0.2
|
||||
flutter_secure_storage_web: 1.1.2
|
||||
flutter_secure_storage_windows: 2.1.1
|
||||
flutter_spinkit: 5.2.0
|
||||
flutter_staggered_grid_view: 0.7.0
|
||||
flutter_svg: 2.0.9
|
||||
|
@ -66,6 +73,7 @@ dependencies:
|
|||
shared_preferences_platform_interface: 2.3.1
|
||||
shared_preferences_web: 2.2.1
|
||||
sqflite: 2.2.6
|
||||
synchronized: 3.1.0
|
||||
timeago: 3.2.2
|
||||
url_launcher: 6.2.5
|
||||
url_launcher_android: 6.3.0
|
||||
|
|
Loading…
Reference in New Issue