diff --git a/lib/main.dart b/lib/main.dart index 0b1c69a2..e5456c2b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -14,7 +14,6 @@ import 'package:vrouter/vrouter.dart'; import 'package:fluffychat/config/routes.dart'; import 'package:fluffychat/utils/client_manager.dart'; -import 'package:fluffychat/utils/famedlysdk_store.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/sentry_controller.dart'; import 'config/app_config.dart'; @@ -50,8 +49,6 @@ void main() async { .addAll(Uri.parse(html.window.location.href).queryParameters); } - await Store.init(); - runZonedGuarded( () => runApp(PlatformInfos.isMobile ? AppLock( diff --git a/lib/utils/famedlysdk_store.dart b/lib/utils/famedlysdk_store.dart index ea149a15..2f16b596 100644 --- a/lib/utils/famedlysdk_store.dart +++ b/lib/utils/famedlysdk_store.dart @@ -1,122 +1,43 @@ -import 'dart:async'; import 'dart:core'; -import 'package:device_info_plus/device_info_plus.dart'; -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import 'package:localstorage/localstorage.dart'; -import 'package:path_provider/path_provider.dart'; - -import 'package:fluffychat/utils/platform_infos.dart'; - -// import 'package:flutter_secure_storage/flutter_secure_storage.dart'; - -// see https://github.com/mogol/flutter_secure_storage/issues/161#issuecomment-704578453 -class AsyncMutex { - Completer? _completer; - - Future lock() async { - while (_completer != null) { - await _completer!.future; - } - - _completer = Completer(); - } - - void unlock() { - assert(_completer != null); - final completer = _completer!; - _completer = null; - completer.complete(); - } -} +import 'package:shared_preferences/shared_preferences.dart'; class Store { - static FlutterSecureStorage? secureStorage; - - static FutureOr init() { - if (PlatformInfos.isMobile) { - if (PlatformInfos.isAndroid) { - return DeviceInfoPlugin().androidInfo.then((info) { - if ((info.version.sdkInt ?? 16) >= 19) { - secureStorage = const FlutterSecureStorage(); - } - }); - } else { - secureStorage = const FlutterSecureStorage(); - } - } - } - - LocalStorage? storage; - static final _mutex = AsyncMutex(); + SharedPreferences? _prefs; Future _setupLocalStorage() async { - if (storage == null) { - final directory = PlatformInfos.isBetaDesktop - ? await getApplicationSupportDirectory() - : (PlatformInfos.isWeb - ? null - : await getApplicationDocumentsDirectory()); - storage = LocalStorage('LocalStorage', directory?.path); - await storage!.ready; - } + _prefs ??= await SharedPreferences.getInstance(); } Future getItem(String key) async { - if (!PlatformInfos.isMobile) { - await _setupLocalStorage(); - try { - return storage!.getItem(key)?.toString(); - } catch (_) { - return null; - } - } - try { - await _mutex.lock(); - return await secureStorage!.read(key: key); - } catch (_) { - return null; - } finally { - _mutex.unlock(); - } + await _setupLocalStorage(); + return _prefs!.getString(key); } Future getItemBool(String key, [bool? defaultValue]) async { - final value = await getItem(key); - if (value == null) { - return defaultValue ?? false; - } - // we also check for '1' for legacy reasons, some booleans were stored that way - return value == '1' || value.toLowerCase() == 'true'; + await _setupLocalStorage(); + return _prefs!.getBool(key) ?? defaultValue ?? true; } Future setItem(String key, String? value) async { - if (!PlatformInfos.isMobile) { - await _setupLocalStorage(); - return await storage!.setItem(key, value); - } - try { - await _mutex.lock(); - return await secureStorage!.write(key: key, value: value); - } finally { - _mutex.unlock(); + await _setupLocalStorage(); + if (value == null) { + await _prefs!.remove(key); + return; } + await _prefs!.setString(key, value); + return; } Future setItemBool(String key, bool value) async { - await setItem(key, value.toString()); + await _setupLocalStorage(); + await _prefs!.setBool(key, value); + return; } Future deleteItem(String key) async { - if (!PlatformInfos.isMobile) { - await _setupLocalStorage(); - return await storage!.deleteItem(key); - } - try { - await _mutex.lock(); - return await secureStorage!.delete(key: key); - } finally { - _mutex.unlock(); - } + await _setupLocalStorage(); + await _prefs!.remove(key); + return; } } diff --git a/pubspec.lock b/pubspec.lock index a6f9f035..93b7c91b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -903,13 +903,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.1" - localstorage: - dependency: "direct main" - description: - name: localstorage - url: "https://pub.dartlang.org" - source: hosted - version: "4.0.0+1" logging: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 73b9eca2..189ff2a1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -54,7 +54,6 @@ dependencies: image: ^3.1.1 image_picker: ^0.8.4+8 intl: any - localstorage: ^4.0.0+1 lottie: ^1.2.2 matrix: ^0.8.9 matrix_link_text: ^1.0.2