鴻蒙NEXT+Flutter開發7-存儲應用設置項
存儲設置項可以讓應用記住用戶的個性化偏好。例如,用戶可以根據自己的習慣設置應用的主題(如亮色模式或暗色模式)、字體大小、語言等。當用戶下次打開應用時,這些設置能夠自動應用,提供熟悉且舒適的使用體驗。如果沒有存儲這些設置,用戶每次打開應用都需要重新配置,這會極大地影響用戶體驗。 另外,APP要上架應用市場,在第一次下載并進入首頁前,需要展示用戶協議和隱私政策提醒,同意之后,之后運行就不需要提醒,這就需要記錄一下,APP是否是第一次運行。
1.GetX與shared_preferences插件
GetX 是一個功能強大的 Flutter 插件,它提供了狀態管理、路由管理、依賴注入等多種功能。其主要優勢在于簡單易用、性能高效,可以大大簡化 Flutter 應用的開發流程。GetX插件作為一款純dart語言實現的插件,在鴻蒙NEXT系統中可以直接使用。 Flutter插件中,能夠提供存儲功能的有很多,筆者更推薦使用shared_preferences進行簡單設置的存儲。鴻蒙NEXT社區對該插件做了適配工作,使其可以應用于鴻蒙NEXT系統。
插件配置
在pubspec.yaml中添加下面的代碼,加入getx和shared_preferences的引用:
get: ^4.6.5
? shared_preferences:
? ? git:
? ? ? url: "https://gitee.com/openharmony-sig/flutter_packages.git"
? ? ? path: "packages/shared_preferences/shared_preferences"
同步插件
在終端輸入如下命令,同步新加入的插件:
flutter pub get
2.存儲功能的代碼實現
我們中lib目錄下新建common目錄,將一些常用功能實現放入其中。其中再新建services目錄存放服務功能,store目錄里保存存儲相關功能的文件。目錄結構如下圖所示:
其中services.dart主要功能為導出所有服務項,代碼如下:
library services;
export './storage.dart';
storage.dart提供了基礎的存儲服務,代碼如下:
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
class StorageService extends GetxService {
? static StorageService get to => Get.find();
? late final SharedPreferences _prefs;
? Future<StorageService> init() async {
? ? _prefs = await SharedPreferences.getInstance();
? ? return this;
? }
? Future<bool> setString(String key, String value) async {
? ? return await _prefs.setString(key, value);
? }
? Future<bool> setBool(String key, bool value) async {
? ? return await _prefs.setBool(key, value);
? }
? Future<bool> setList(String key, List<String> value) async {
? ? return await _prefs.setStringList(key, value);
? }
? String getString(String key, {String def = ""}) {
? ? return _prefs.getString(key) ?? def;
? }
? bool getBool(String key, {bool def = false}) {
? ? return _prefs.getBool(key) ?? def;
? }
? List<String> getList(String key, {List<String> def = const []}) {
? ? return _prefs.getStringList(key) ?? def;
? }
? Future<bool> remove(String key) async {
? ? return await _prefs.remove(key);
? }
}
store.dart代碼如下:
library store;
export './config.dart';
config.dart提供配置項管理功能,代碼如下:
import 'package:get/get.dart';
import '../services/storage.dart';
class ConfigStore extends GetxController {
? static ConfigStore get to => Get.find();
? // 用戶是否第一次打開app
? static const String keyStorageIsFirstOpen = 'is_first_open';
? bool _isFirstOpen = true;
? bool get isFirstOpen => _isFirstOpen;
? // 標記用戶已打開APP
? Future<bool> saveAlreadyOpen() {
? ? return StorageService.to.setBool(keyStorageIsFirstOpen, false);
? }
? @override
? void onInit() {
? ? super.onInit();
? ? _isFirstOpen = StorageService.to.getBool(keyStorageIsFirstOpen, def: true);
? }
}
3.存儲功能的初始化
通過上面的步驟,存儲的功能已經實現了。在main.dart中,添加下面的代碼,將對存儲功能進行初始化,以便后期調用對應的功能。
import 'common/services/services.dart';
import 'common/store/store.dart';
Future init() async {
? WidgetsFlutterBinding.ensureInitialized();
? // 初始化存儲服務
? await Get.putAsync<StorageService>(() => StorageService().init());
? // 創建配置庫
? Get.put<ConfigStore>(ConfigStore());
}
void main() async {
? await init();
? runApp(const MyApp());
}
本章簡單介紹了為什么要存儲設置項、GetX與shared_preferences插件配置,以及存儲功能的實現與初始化。接下來的文章繼續結合GetX插件,利用上面的配置項存儲功能,實現用戶協議和隱私政策提醒頁面。