From 99ff12d57378c4402b4f8058bed55f6b7adac563 Mon Sep 17 00:00:00 2001 From: Vitaliy Zarubin Date: Fri, 12 May 2023 16:14:15 +0300 Subject: [PATCH] [shared_pref] done implementation --- .vscode/settings.json | 4 +- ...ample.path_provider_aurora_example.desktop | 2 +- .../shared_preferences_aurora/README.md | 20 +- .../shared_preferences_aurora_plugin.h | 26 +- .../shared_preferences_aurora_plugin.cpp | 249 ++++++++++++------ .../data/preview.png | Bin 0 -> 92814 bytes .../example/lib/main.dart | 120 ++++----- .../example/pubspec.lock | 117 ++++++++ .../example/pubspec.yaml | 2 +- .../lib/shared_preferences_aurora.dart | 71 +++-- ...red_preferences_aurora_method_channel.dart | 71 ++--- ...preferences_aurora_platform_interface.dart | 32 +-- 12 files changed, 455 insertions(+), 259 deletions(-) create mode 100644 packages/shared_preferences/shared_preferences_aurora/data/preview.png diff --git a/.vscode/settings.json b/.vscode/settings.json index 21cf8df..31a6f17 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -61,6 +61,8 @@ "typeinfo": "cpp", "variant": "cpp", "qstring": "cpp", - "qvariant": "cpp" + "qvariant": "cpp", + "qmetatype": "cpp", + "qdebug": "cpp" } } \ No newline at end of file diff --git a/packages/path_provider/path_provider_aurora/example/aurora/desktop/com.example.path_provider_aurora_example.desktop b/packages/path_provider/path_provider_aurora/example/aurora/desktop/com.example.path_provider_aurora_example.desktop index 39b28d4..69eeffc 100644 --- a/packages/path_provider/path_provider_aurora/example/aurora/desktop/com.example.path_provider_aurora_example.desktop +++ b/packages/path_provider/path_provider_aurora/example/aurora/desktop/com.example.path_provider_aurora_example.desktop @@ -7,6 +7,6 @@ Exec=/usr/bin/com.example.path_provider_aurora_example X-Nemo-Application-Type=silica-qt5 [X-Application] -Permissions= +Permissions=UserDirs OrganizationName=com.example ApplicationName=path_provider_aurora_example diff --git a/packages/shared_preferences/shared_preferences_aurora/README.md b/packages/shared_preferences/shared_preferences_aurora/README.md index 036dbb7..da8b050 100644 --- a/packages/shared_preferences/shared_preferences_aurora/README.md +++ b/packages/shared_preferences/shared_preferences_aurora/README.md @@ -1,15 +1,17 @@ # shared_preferences_aurora -A new Flutter plugin project. +The Aurora implementation of [`shared_preferences`][https://pub.dev/packages/shared_preferences]. -## Getting Started +## Usage +This package is not an _endorsed_ implementation of `shared_preferences`. +Therefore, you have to include `path_provider_aurora` alongside `shared_preferences` as dependencies in your `pubspec.yaml` file. -This project is a starting point for a Flutter -[plug-in package](https://flutter.dev/developing-packages/), -a specialized package that includes platform-specific implementation code for -Android and/or iOS. +```yaml +dependencies: + shared_preferences: ^2.1.1 + shared_preferences_aurora: ^0.0.0 # @todo Not published +``` -For help getting started with Flutter development, view the -[online documentation](https://flutter.dev/docs), which offers tutorials, -samples, guidance on mobile development, and a full API reference. +### Preview example +![preview.png](data%2Fpreview.png) \ No newline at end of file diff --git a/packages/shared_preferences/shared_preferences_aurora/aurora/include/shared_preferences_aurora/shared_preferences_aurora_plugin.h b/packages/shared_preferences/shared_preferences_aurora/aurora/include/shared_preferences_aurora/shared_preferences_aurora_plugin.h index c4a5afc..3f4e6d8 100644 --- a/packages/shared_preferences/shared_preferences_aurora/aurora/include/shared_preferences_aurora/shared_preferences_aurora_plugin.h +++ b/packages/shared_preferences/shared_preferences_aurora/aurora/include/shared_preferences_aurora/shared_preferences_aurora_plugin.h @@ -20,38 +20,44 @@ public: struct ARGS { + QString prefix; QString key; Encodable value; }; + enum Types + { + Int, + Bool, + Double, + String, + List + }; + enum Methods { - getInt, setInt, - getBool, setBool, - getDouble, setDouble, - getString, setString, - getStringList, setStringList, + clearWithPrefix, + remove, + getAllWithPrefix, }; private: void onMethodCall(const MethodCall &call); void unimplemented(const MethodCall &call); ARGS getArguments(const MethodCall &call); - void onGetInt(const MethodCall &call); void onSetInt(const MethodCall &call); - void onGetBool(const MethodCall &call); void onSetBool(const MethodCall &call); - void onGetDouble(const MethodCall &call); void onSetDouble(const MethodCall &call); - void onGetString(const MethodCall &call); void onSetString(const MethodCall &call); - void onGetStringList(const MethodCall &call); void onSetStringList(const MethodCall &call); + void onClearWithPrefix(const MethodCall &call); + void onRemove(const MethodCall &call); + void onGetAllWithPrefix(const MethodCall &call); QSettings settings; std::map mapping; diff --git a/packages/shared_preferences/shared_preferences_aurora/aurora/shared_preferences_aurora_plugin.cpp b/packages/shared_preferences/shared_preferences_aurora/aurora/shared_preferences_aurora_plugin.cpp index dd7f3c5..348cf72 100644 --- a/packages/shared_preferences/shared_preferences_aurora/aurora/shared_preferences_aurora_plugin.cpp +++ b/packages/shared_preferences/shared_preferences_aurora/aurora/shared_preferences_aurora_plugin.cpp @@ -2,25 +2,37 @@ #include #include #include -#include #include +#include + +namespace { + +QString defaultSettingsFile() +{ + const auto [orgname, appname] = Application::GetID(); + + return QStringLiteral("%1/.local/share/%2/%3/.flutter_shared_preferences.conf") + .arg(QDir::homePath()) + .arg(QString::fromStdString(orgname)) + .arg(QString::fromStdString(appname)); +} + +} /* namespace */ SharedPreferencesAuroraPlugin::SharedPreferencesAuroraPlugin(): settings( - QString::fromStdString(Application::GetID().orgname), - QString::fromStdString(Application::GetID().appname) + defaultSettingsFile(), + QSettings::NativeFormat ) { // map methods this->mapping = std::map ({ - {"getInt", Methods::getInt}, {"setInt", Methods::setInt}, - {"getBool", Methods::getBool}, {"setBool", Methods::setBool}, - {"getDouble", Methods::getDouble}, {"setDouble", Methods::setDouble}, - {"getString", Methods::getString}, {"setString", Methods::setString}, - {"getStringList", Methods::getStringList}, {"setStringList", Methods::setStringList}, + {"clearWithPrefix", Methods::clearWithPrefix}, + {"remove", Methods::remove}, + {"getAllWithPrefix", Methods::getAllWithPrefix}, }); } @@ -33,9 +45,14 @@ void SharedPreferencesAuroraPlugin::RegisterWithRegistrar(PluginRegistrar ®is SharedPreferencesAuroraPlugin::ARGS SharedPreferencesAuroraPlugin::getArguments(const MethodCall &call) { + QString key = QString::fromStdString(call.GetArguments()["key"].GetString()); + Encodable value = call.GetArguments()["value"]; ARGS args; - args.key = QString::fromStdString(call.GetArguments()["key"].GetString()); - args.value = call.GetArguments()["value"]; + + args.prefix = key.split('.').first(); + args.key = key.mid(args.prefix.length() + 1, key.length()); + args.value = value; + return args; } @@ -43,113 +60,197 @@ void SharedPreferencesAuroraPlugin::onMethodCall(const MethodCall &call) { const auto &method = call.GetMethod(); - switch (this->mapping[method]) { - case Methods::getInt: onGetInt(call); return; - case Methods::setInt: onSetInt(call); return; - case Methods::getBool: onGetBool(call); return; - case Methods::setBool: onSetBool(call); return; - case Methods::getDouble: onGetDouble(call); return; - case Methods::setDouble: onSetDouble(call); return; - case Methods::getString: onGetString(call); return; - case Methods::setString: onSetString(call); return; - case Methods::getStringList: onGetStringList(call); return; - case Methods::setStringList: onSetStringList(call); return; + switch (this->mapping[method]) + { + case Methods::setInt: + onSetInt(call); + return; + case Methods::setBool: + onSetBool(call); + return; + case Methods::setDouble: + onSetDouble(call); + return; + case Methods::setString: + onSetString(call); + return; + case Methods::setStringList: + onSetStringList(call); + return; + case Methods::clearWithPrefix: + onClearWithPrefix(call); + return; + case Methods::remove: + onRemove(call); + return; + case Methods::getAllWithPrefix: + onGetAllWithPrefix(call); + return; } unimplemented(call); } -void SharedPreferencesAuroraPlugin::onGetInt(const MethodCall &call) -{ - const auto [key, value] = this->getArguments(call); - call.SendSuccessResponse(settings.value(key, value.GetInt()).toInt()); -} - void SharedPreferencesAuroraPlugin::onSetInt(const MethodCall &call) { - const auto [key, value] = this->getArguments(call); - settings.setValue(key, value.GetInt()); - call.SendSuccessResponse(true); -} + const auto [prefix, key, value] = this->getArguments(call); -void SharedPreferencesAuroraPlugin::onGetBool(const MethodCall &call) -{ - const auto [key, value] = this->getArguments(call); - call.SendSuccessResponse(settings.value(key, value.GetBoolean()).toBool()); + settings.beginGroup(prefix); + settings.setValue( + QStringLiteral("%1:").arg(Types::Int) + key, + value.GetInt() + ); + settings.sync(); + settings.endGroup(); + + call.SendSuccessResponse(true); } void SharedPreferencesAuroraPlugin::onSetBool(const MethodCall &call) { - const auto [key, value] = this->getArguments(call); - settings.setValue(key, value.GetBoolean()); + const auto [prefix, key, value] = this->getArguments(call); + + settings.beginGroup(prefix); + settings.setValue( + QStringLiteral("%1:").arg(Types::Bool) + key, + value.GetBoolean() + ); + settings.sync(); + settings.endGroup(); + call.SendSuccessResponse(true); } -void SharedPreferencesAuroraPlugin::onGetDouble(const MethodCall &call) +void SharedPreferencesAuroraPlugin::onSetDouble(const MethodCall &call) { - const auto [key, value] = this->getArguments(call); - call.SendSuccessResponse(settings.value(key, value.GetFloat()).toDouble()); + const auto [prefix, key, value] = this->getArguments(call); + + settings.beginGroup(prefix); + settings.setValue( + QStringLiteral("%1:").arg(Types::Double) + key, + value.GetFloat() + ); + settings.sync(); + settings.endGroup(); + + call.SendSuccessResponse(true); } -void SharedPreferencesAuroraPlugin::onSetDouble(const MethodCall &call) +void SharedPreferencesAuroraPlugin::onSetString(const MethodCall &call) { - const auto [key, value] = this->getArguments(call); - settings.setValue(key, value.GetFloat()); + const auto [prefix, key, value] = this->getArguments(call); + + settings.beginGroup(prefix); + settings.setValue( + QStringLiteral("%1:").arg(Types::String) + key, + QString::fromStdString(value.GetString()) + ); + settings.sync(); + settings.endGroup(); + call.SendSuccessResponse(true); } -void SharedPreferencesAuroraPlugin::onGetString(const MethodCall &call) +void SharedPreferencesAuroraPlugin::onSetStringList(const MethodCall &call) { - const auto [key, value] = this->getArguments(call); - call.SendSuccessResponse(settings.value( - key, - QString::fromStdString(value.GetString())).toString().toStdString() + const auto [prefix, key, value] = this->getArguments(call); + const auto vec = value.GetList(); + + QStringList strings; + + for (const auto& item : vec) + { + strings.append(QString::fromStdString(item.GetString())); + } + + settings.beginGroup(prefix); + settings.setValue( + QStringLiteral("%1:").arg(Types::List) + key, + strings ); + settings.sync(); + settings.endGroup(); + call.SendSuccessResponse(true); } -void SharedPreferencesAuroraPlugin::onSetString(const MethodCall &call) +void SharedPreferencesAuroraPlugin::onClearWithPrefix(const MethodCall &call) { - const auto [key, value] = this->getArguments(call); - settings.setValue(key, QString::fromStdString(value.GetString())); + const auto prefix = QString::fromStdString(call.GetArguments()["prefix"].GetString()) + .replace(".", ""); + + settings.beginGroup(prefix); + settings.remove(""); + settings.sync(); + settings.endGroup(); + call.SendSuccessResponse(true); } -void SharedPreferencesAuroraPlugin::onGetStringList(const MethodCall &call) +void SharedPreferencesAuroraPlugin::onRemove(const MethodCall &call) { - const auto [key, value] = this->getArguments(call); + QString raw = QString::fromStdString(call.GetArguments()["key"].GetString()); + + const auto prefix = raw.split('.').first(); + const auto key = raw.mid(prefix.length() + 1, raw.length()); - std::vector vec; - QStringList list = settings.value(key, {}).toStringList(); + settings.beginGroup(prefix); + settings.remove(QStringLiteral("%1:").arg(Types::Int) + key); + settings.remove(QStringLiteral("%1:").arg(Types::Bool) + key); + settings.remove(QStringLiteral("%1:").arg(Types::Double) + key); + settings.remove(QStringLiteral("%1:").arg(Types::String) + key); + settings.remove(QStringLiteral("%1:").arg(Types::List) + key); + settings.sync(); + settings.endGroup(); - for (const auto& item : list) - { - vec.push_back(Encodable(item.toStdString())); - } - - if (vec.size() > 0) { - call.SendSuccessResponse(vec); - } else { - call.SendSuccessResponse(value.GetList()); - } + call.SendSuccessResponse(true); } -void SharedPreferencesAuroraPlugin::onSetStringList(const MethodCall &call) +void SharedPreferencesAuroraPlugin::onGetAllWithPrefix(const MethodCall &call) { - const auto [key, value] = this->getArguments(call); - const auto vec = value.GetList(); + const auto prefix = QString::fromStdString(call.GetArguments()["prefix"].GetString()) + .replace(".", ""); - QStringList strings; + std::map map; - for (const auto& item : vec) + settings.beginGroup(prefix); + + for (const auto& item : settings.allKeys()) { - strings.append(QString::fromStdString(item.GetString())); + const auto type = item.split(":").first(); + const auto key = prefix + "." + item.mid(type.length() + 1, item.length()); + const auto variant = settings.value(item); + + switch (type.toInt()) + { + case Types::Int: + map[key.toStdString()] = Encodable(variant.toInt()); + break; + case Types::Bool: + map[key.toStdString()] = Encodable(variant.toBool()); + break; + case Types::Double: + map[key.toStdString()] = Encodable(variant.toDouble()); + break; + case Types::String: + map[key.toStdString()] = Encodable(variant.toString().toStdString()); + break; + case Types::List: + std::vector vec; + QStringList list = variant.toStringList(); + for (const auto& item : list) + { + vec.push_back(item.toStdString()); + } + map[key.toStdString()] = vec; + } } - settings.setValue(key, strings); - call.SendSuccessResponse(true); + settings.endGroup(); + + call.SendSuccessResponse(map); } void SharedPreferencesAuroraPlugin::unimplemented(const MethodCall &call) { call.SendSuccessResponse(nullptr); -} +} \ No newline at end of file diff --git a/packages/shared_preferences/shared_preferences_aurora/data/preview.png b/packages/shared_preferences/shared_preferences_aurora/data/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f070875934044e131660ef38377814da65da22 GIT binary patch literal 92814 zcmagFRZt~O)Fp}>;NTqG-QAtW< zE>7y`>|kzXYX$*9o9LG)Br_yJIAWmkT~deelJp>p+HE6{augIgN=cJ{tnYgRf%g7 z$C;TSr;WF2ncrqNxsO$KUOlZt-UR?=G={f|Oi+@BQPYfEs7y2_7k`6C{i;7yNd8W( z0TV-rSS}iN^gQsj=h0^F2!z6S_o5*g~rj8Fu8LCKHr|dQa zTtvTSRO719&i3Z^W}n5z#|K2%uyZZgvzq6>&jM@wU0MR->wm6-p0ecs5O_x!Ef)v~ zM2!D2NQkT)-2Xs0SFoHU+zAX4G7^P&1!2H{5T2`~rmMJvot>GzD}=bSnUSlRDXE8* zt0k#4SWZzR2n7cMf)oNQA*$-RaoKG#uQ%p(@^az&8`(jEQUuKq3Y=gFl}t+wR%JC? zFE!OlTl8$bZ0OmcbMP93o4dYT^4+M}cB-%rz9fpjBBIe6NUPZcQAJ~pkisUAia-G% z$w7BBPdgX_mk}LkX ze=9#Ifj68#ZH1$M?*43582q~ZivPkEjq&0CR0je{o$P#Q(MZKMS!ggx6L=+nH{;UH zjg~jiG=HA)O@ZTkXn^iV03{^Xj>6DLUb8Z8pUs>syYG6vG0B(c?;oiF7O_1X_BYegL4BN0p6P-CmQ0`X z?Fc(uSImE34zm0$w-O*_u2;4dB76FE!q2E9&1A%#H^iW*i0HFyoOy$|=V*Rwp ztyVlFWIADcvdwjh%FVklo2`W^)}Vc*tClJ<-cVJ|lSE+7!;+|>TWB&HnM@2Su129m z>|ZJ|NzFP--F`&yJUq8dv1(}Ppyy9`Vi15#rWkq zrB;Q>R0nEMh{q;D5{O8_&$b*|>V}~pM+T;&r-)f0_lm;˥T@GZE?_OPULl#5-# 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 rrKO { - int _valueInt = -1; - bool _valueBool = false; - double _valueDouble = 0.0; - String _valueString = ""; - List _valueStringList = []; - + int? _counter; + bool? _repeat; + double? _decimal; + String? _action; + List? _items; String? _error; - final _sharedPreferences = SharedPreferencesAurora(); - @override void initState() { super.initState(); @@ -33,60 +30,43 @@ class _MyAppState extends State { } Future initPlatformState() async { - int valueInt = -1; - bool valueBool = false; - double valueDouble = 0.0; - String valueString = ""; - List valueStringList = []; - String error = ""; - try { - await _sharedPreferences.setInt('_valueInt', 77); - await _sharedPreferences.setBool('_valueBool', true); - await _sharedPreferences.setDouble('_valueDouble', 0.77); - await _sharedPreferences.setString('_valueString', "String"); - await _sharedPreferences.setStringList('_valueStringList', [ - "Item 1", - "Item 2", - ]); - - valueInt = await _sharedPreferences.getInt( - '_valueInt', - _valueInt, - ); - valueBool = await _sharedPreferences.getBool( - '_valueBool', - _valueBool, - ); - valueDouble = await _sharedPreferences.getDouble( - '_valueDouble', - _valueDouble, - ); - valueString = await _sharedPreferences.getString( - '_valueString', - _valueString, - ); - valueStringList = await _sharedPreferences.getStringList( - '_valueStringList', - _valueStringList, - ); + final SharedPreferences prefs = await SharedPreferences.getInstance(); + + // Save an integer value to 'counter' key. + await prefs.setInt('counter', 10); + // Save an boolean value to 'repeat' key. + await prefs.setBool('repeat', true); + // Save an double value to 'decimal' key. + await prefs.setDouble('decimal', 1.5); + // Save an String value to 'action' key. + await prefs.setString('action', 'Start'); + // Save an list of strings to 'items' key. + await prefs.setStringList('items', ['Earth', 'Moon', 'Sun']); + + // Try reading data from the 'counter' key. If it doesn't exist, returns null. + final int? counter = prefs.getInt('counter'); + // Try reading data from the 'repeat' key. If it doesn't exist, returns null. + final bool? repeat = prefs.getBool('repeat'); + // Try reading data from the 'decimal' key. If it doesn't exist, returns null. + final double? decimal = prefs.getDouble('decimal'); + // Try reading data from the 'action' key. If it doesn't exist, returns null. + final String? action = prefs.getString('action'); + // Try reading data from the 'items' key. If it doesn't exist, returns null. + final List? items = prefs.getStringList('items'); + + setState(() { + _counter = counter; + _repeat = repeat; + _decimal = decimal; + _action = action; + _items = items; + }); } on PlatformException { - error = 'Platform exception'; + setState(() { + _error = 'Platform exception'; + }); } - - if (!mounted) return; - - setState(() { - if (error.isEmpty) { - _valueInt = valueInt; - _valueBool = valueBool; - _valueDouble = valueDouble; - _valueString = valueString; - _valueStringList = valueStringList; - } else { - _error = error; - } - }); } @override @@ -151,56 +131,56 @@ class _MyAppState extends State { const SizedBox(height: 30), const Text( - 'setInt/getInt', + 'Counter / int', style: textStyleTitle, ), spaceSmall, Text( - _valueInt.toString(), + _counter.toString(), style: textStylePath, ), spaceMedium, const Text( - 'setBool/getBool', + 'Repeat / bool', style: textStyleTitle, ), spaceSmall, Text( - _valueBool.toString(), + _repeat.toString(), style: textStylePath, ), spaceMedium, const Text( - 'setDouble/getDouble', + 'Decimal / double', style: textStyleTitle, ), spaceSmall, Text( - _valueDouble.toString(), + _decimal.toString(), style: textStylePath, ), spaceMedium, const Text( - 'setString/getString', + 'Action / String', style: textStyleTitle, ), spaceSmall, Text( - _valueString, + _action.toString(), style: textStylePath, ), spaceMedium, const Text( - 'setStringList/getStringList', + 'Items / String List', style: textStyleTitle, ), spaceSmall, Text( - _valueStringList.toString(), + _items.toString(), style: textStylePath, ), ], diff --git a/packages/shared_preferences/shared_preferences_aurora/example/pubspec.lock b/packages/shared_preferences/shared_preferences_aurora/example/pubspec.lock index c782233..5dc00eb 100644 --- a/packages/shared_preferences/shared_preferences_aurora/example/pubspec.lock +++ b/packages/shared_preferences/shared_preferences_aurora/example/pubspec.lock @@ -50,6 +50,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.4" flutter: dependency: "direct main" description: flutter @@ -67,6 +81,18 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.4" lints: dependency: transitive description: @@ -102,6 +128,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.2" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.10" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.6" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.6" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" plugin_platform_interface: dependency: transitive description: @@ -109,6 +163,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.4" + process: + dependency: transitive + description: + name: process + url: "https://pub.dartlang.org" + source: hosted + version: "4.2.4" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" shared_preferences_aurora: dependency: "direct main" description: @@ -116,6 +191,20 @@ packages: relative: true source: path version: "0.0.1" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.2" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" shared_preferences_platform_interface: dependency: transitive description: @@ -123,6 +212,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.2.0" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0" sky_engine: dependency: transitive description: flutter @@ -177,6 +280,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.2" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "4.1.4" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" sdks: dart: ">=2.18.6 <3.0.0" flutter: ">=3.0.0" diff --git a/packages/shared_preferences/shared_preferences_aurora/example/pubspec.yaml b/packages/shared_preferences/shared_preferences_aurora/example/pubspec.yaml index ceb093e..b3e56b3 100644 --- a/packages/shared_preferences/shared_preferences_aurora/example/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_aurora/example/pubspec.yaml @@ -17,7 +17,7 @@ environment: dependencies: flutter: sdk: flutter - + shared_preferences: ^2.1.1 shared_preferences_aurora: # When depending on this package from a real application you should use: # shared_preferences_aurora: ^x.y.z diff --git a/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora.dart b/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora.dart index 62c2652..6d1de90 100644 --- a/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora.dart +++ b/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora.dart @@ -1,45 +1,64 @@ import 'shared_preferences_aurora_platform_interface.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; +import 'package:shared_preferences_platform_interface/shared_preferences_platform_interface.dart'; -class SharedPreferencesAurora { - static void registerWith() {} +class SharedPreferencesAurora extends SharedPreferencesStorePlatform { + SharedPreferencesAurora({ + @visibleForTesting SharedPreferencesAuroraPlatform? api, + }) : _api = api ?? SharedPreferencesAuroraPlatform.instance; - Future getInt(String key, int value) { - return SharedPreferencesAuroraPlatform.instance.getInt(key, value); - } - - Future setInt(String key, int value) { - return SharedPreferencesAuroraPlatform.instance.setInt(key, value); - } + late final SharedPreferencesAuroraPlatform _api; - Future getBool(String key, bool value) { - return SharedPreferencesAuroraPlatform.instance.getBool(key, value); + /// Registers this class as the default instance of [SharedPreferencesStorePlatform]. + static void registerWith() { + SharedPreferencesStorePlatform.instance = SharedPreferencesAurora(); } - Future setBool(String key, bool value) { - return SharedPreferencesAuroraPlatform.instance.setBool(key, value); - } + static const String _defaultPrefix = 'flutter.'; - Future getDouble(String key, double value) { - return SharedPreferencesAuroraPlatform.instance.getDouble(key, value); + @override + Future remove(String key) async { + return _api.remove(key); } - Future setDouble(String key, double value) { - return SharedPreferencesAuroraPlatform.instance.setDouble(key, value); + @override + Future setValue(String valueType, String key, Object value) async { + switch (valueType) { + case 'String': + return _api.setString(key, value as String); + case 'Bool': + return _api.setBool(key, value as bool); + case 'Int': + return _api.setInt(key, value as int); + case 'Double': + return _api.setDouble(key, value as double); + case 'StringList': + return _api.setStringList(key, value as List); + } + throw PlatformException( + code: 'InvalidOperation', + message: '"$valueType" is not a supported type.'); } - Future getString(String key, String value) { - return SharedPreferencesAuroraPlatform.instance.getString(key, value); + @override + Future clear() { + return clearWithPrefix(_defaultPrefix); } - Future setString(String key, String value) { - return SharedPreferencesAuroraPlatform.instance.setString(key, value); + @override + Future clearWithPrefix(String prefix) async { + return _api.clearWithPrefix(prefix); } - Future> getStringList(String key, List value) { - return SharedPreferencesAuroraPlatform.instance.getStringList(key, value); + @override + Future> getAll() { + return getAllWithPrefix(_defaultPrefix); } - Future setStringList(String key, List value) { - return SharedPreferencesAuroraPlatform.instance.setStringList(key, value); + @override + Future> getAllWithPrefix(String prefix) async { + final Map data = await _api.getAllWithPrefix(prefix); + return data.cast(); } } diff --git a/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora_method_channel.dart b/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora_method_channel.dart index f88abf5..4533262 100644 --- a/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora_method_channel.dart +++ b/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora_method_channel.dart @@ -10,15 +10,6 @@ class MethodChannelSharedPreferencesAurora @visibleForTesting final methodChannel = const MethodChannel('shared_preferences_aurora'); - @override - Future getInt(String key, int value) async { - final result = await methodChannel.invokeMethod('getInt', { - 'key': key, - 'value': value, - }); - return result ?? value; - } - @override Future setInt(String key, int value) async { return await methodChannel.invokeMethod('setInt', { @@ -28,15 +19,6 @@ class MethodChannelSharedPreferencesAurora false; } - @override - Future getBool(String key, bool value) async { - final result = await methodChannel.invokeMethod('getBool', { - 'key': key, - 'value': value, - }); - return result ?? value; - } - @override Future setBool(String key, bool value) async { return await methodChannel.invokeMethod('setBool', { @@ -46,15 +28,6 @@ class MethodChannelSharedPreferencesAurora false; } - @override - Future getDouble(String key, double value) async { - final result = await methodChannel.invokeMethod('getDouble', { - 'key': key, - 'value': value, - }); - return result ?? value; - } - @override Future setDouble(String key, double value) async { return await methodChannel.invokeMethod('setDouble', { @@ -65,17 +38,17 @@ class MethodChannelSharedPreferencesAurora } @override - Future getString(String key, String value) async { - final result = await methodChannel.invokeMethod('getString', { - 'key': key, - 'value': value, - }); - return result ?? value; + Future setString(String key, String value) async { + return await methodChannel.invokeMethod('setString', { + 'key': key, + 'value': value, + }) ?? + false; } @override - Future setString(String key, String value) async { - return await methodChannel.invokeMethod('setString', { + Future setStringList(String key, List value) async { + return await methodChannel.invokeMethod('setStringList', { 'key': key, 'value': value, }) ?? @@ -83,23 +56,27 @@ class MethodChannelSharedPreferencesAurora } @override - Future> getStringList(String key, List value) async { - final result = await methodChannel.invokeMethod?>( - 'getStringList', - { - 'key': key, - 'value': value, - }, - ); - return result?.map((e) => e as String).toList() ?? value; + Future clearWithPrefix(String prefix) async { + return await methodChannel.invokeMethod('clearWithPrefix', { + 'prefix': prefix, + }) ?? + false; } @override - Future setStringList(String key, List value) async { - return await methodChannel.invokeMethod('setStringList', { + Future remove(String key) async { + return await methodChannel.invokeMethod('remove', { 'key': key, - 'value': value, }) ?? false; } + + @override + Future> getAllWithPrefix(String prefix) async { + return await methodChannel + .invokeMethod?>('getAllWithPrefix', { + 'prefix': prefix, + }) ?? + {}; + } } diff --git a/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora_platform_interface.dart b/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora_platform_interface.dart index 8574ec7..180ffd0 100644 --- a/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora_platform_interface.dart +++ b/packages/shared_preferences/shared_preferences_aurora/lib/shared_preferences_aurora_platform_interface.dart @@ -24,43 +24,35 @@ abstract class SharedPreferencesAuroraPlatform extends PlatformInterface { _instance = instance; } - Future getInt(String key, int value) { - throw UnimplementedError('getInt() has not been implemented.'); - } - Future setInt(String key, int value) { throw UnimplementedError('setInt() has not been implemented.'); } - Future getBool(String key, bool value) { - throw UnimplementedError('getBool() has not been implemented.'); - } - Future setBool(String key, bool value) { throw UnimplementedError('setBool() has not been implemented.'); } - Future getDouble(String key, double value) { - throw UnimplementedError('getDouble() has not been implemented.'); - } - Future setDouble(String key, double value) { throw UnimplementedError('setDouble() has not been implemented.'); } - Future getString(String key, String value) { - throw UnimplementedError('getString() has not been implemented.'); - } - Future setString(String key, String value) { throw UnimplementedError('setString() has not been implemented.'); } - Future> getStringList(String key, List value) { - throw UnimplementedError('getStringList() has not been implemented.'); - } - Future setStringList(String key, List value) { throw UnimplementedError('setStringList() has not been implemented.'); } + + Future clearWithPrefix(String prefix) { + throw UnimplementedError('onClearWithPrefix() has not been implemented.'); + } + + Future remove(String key) { + throw UnimplementedError('remove() has not been implemented.'); + } + + Future> getAllWithPrefix(String prefix) { + throw UnimplementedError('getAllWithPrefix() has not been implemented.'); + } }