鴻蒙NEXT+Flutter開發(fā)7-存儲應(yīng)用設(shè)置項(xiàng)

鴻蒙NEXT+Flutter開發(fā)7-存儲應(yīng)用設(shè)置項(xiàng)

存儲設(shè)置項(xiàng)可以讓應(yīng)用記住用戶的個性化偏好。例如,用戶可以根據(jù)自己的習(xí)慣設(shè)置應(yīng)用的主題(如亮色模式或暗色模式)、字體大小、語言等。當(dāng)用戶下次打開應(yīng)用時,這些設(shè)置能夠自動應(yīng)用,提供熟悉且舒適的使用體驗(yàn)。如果沒有存儲這些設(shè)置,用戶每次打開應(yīng)用都需要重新配置,這會極大地影響用戶體驗(yàn)。 另外,APP要上架應(yīng)用市場,在第一次下載并進(jìn)入首頁前,需要展示用戶協(xié)議和隱私政策提醒,同意之后,之后運(yùn)行就不需要提醒,這就需要記錄一下,APP是否是第一次運(yùn)行。

1.GetX與shared_preferences插件

GetX 是一個功能強(qiáng)大的 Flutter 插件,它提供了狀態(tài)管理、路由管理、依賴注入等多種功能。其主要優(yōu)勢在于簡單易用、性能高效,可以大大簡化 Flutter 應(yīng)用的開發(fā)流程。GetX插件作為一款純dart語言實(shí)現(xiàn)的插件,在鴻蒙NEXT系統(tǒng)中可以直接使用。 Flutter插件中,能夠提供存儲功能的有很多,筆者更推薦使用shared_preferences進(jìn)行簡單設(shè)置的存儲。鴻蒙NEXT社區(qū)對該插件做了適配工作,使其可以應(yīng)用于鴻蒙NEXT系統(tǒng)。

插件配置

在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.存儲功能的代碼實(shí)現(xiàn)

我們中l(wèi)ib目錄下新建common目錄,將一些常用功能實(shí)現(xiàn)放入其中。其中再新建services目錄存放服務(wù)功能,store目錄里保存存儲相關(guān)功能的文件。目錄結(jié)構(gòu)如下圖所示:

其中services.dart主要功能為導(dǎo)出所有服務(wù)項(xiàng),代碼如下:

library services;

export './storage.dart';

storage.dart提供了基礎(chǔ)的存儲服務(wù),代碼如下:

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提供配置項(xiàng)管理功能,代碼如下:

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;

? // 標(biāo)記用戶已打開APP

? Future<bool> saveAlreadyOpen() {

? ? return StorageService.to.setBool(keyStorageIsFirstOpen, false);

? }

? @override

? void onInit() {

? ? super.onInit();

? ? _isFirstOpen = StorageService.to.getBool(keyStorageIsFirstOpen, def: true);

? }

}

3.存儲功能的初始化

通過上面的步驟,存儲的功能已經(jīng)實(shí)現(xiàn)了。在main.dart中,添加下面的代碼,將對存儲功能進(jìn)行初始化,以便后期調(diào)用對應(yīng)的功能。

import 'common/services/services.dart';

import 'common/store/store.dart';

Future init() async {

? WidgetsFlutterBinding.ensureInitialized();

? // 初始化存儲服務(wù)

? await Get.putAsync<StorageService>(() => StorageService().init());

? // 創(chuàng)建配置庫

? Get.put<ConfigStore>(ConfigStore());

}

void main() async {

? await init();

? runApp(const MyApp());

}

本章簡單介紹了為什么要存儲設(shè)置項(xiàng)、GetX與shared_preferences插件配置,以及存儲功能的實(shí)現(xiàn)與初始化。接下來的文章繼續(xù)結(jié)合GetX插件,利用上面的配置項(xiàng)存儲功能,實(shí)現(xiàn)用戶協(xié)議和隱私政策提醒頁面。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容