add new FFAppStates

This commit is contained in:
FlutterFlow 2024-06-14 12:48:09 +00:00
parent c51d8621e6
commit 3f0dc9a034
7 changed files with 183 additions and 125 deletions

View File

@ -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>";

View File

@ -151,8 +151,12 @@ Future singInActionApp(
},
);
FFAppState().deleteEmail();
FFAppState().email = '';
FFAppState().deletePasswd();
FFAppState().passwd = '';
FFAppState().update(() {});
}
} else {

View File

@ -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]));
}

View File

@ -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,
);

View File

@ -1,4 +1,3 @@
export '/backend/schema/util/schema_util.dart';
export 'action_struct.dart';
export 'device_struct.dart';

View File

@ -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 = '';
}
}

View File

@ -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