Flutter Widget 之package: shared_preferences

您已为自己的Flutter应用程序添加了又新又棒的深色主题,出于照顾用户,您甚至还为此设置功能切换键。

ezgif.com-gif-maker (2).gif

一切都很顺利,直到您发现应用重启后,主题又变回浅色。深色主题的偏好设置并未保存,所以不会固定套用。

是的,作为用户账户设置您可在服务器上保存偏好设置,但简单的布尔标志不必如此麻烦,也可在用户设备上持久化存储中保存偏好设置。

user1: {
    username: sk8erboi1234,
    Password: nicetrybuddy,
    darkModeEnabled: true,
}

但这是Flutter,因此应用程序的使用设备不同,本地存储的API也大相径庭。

在编码写入shared_preferences包,shared_prederences插件,能将不同Flutter支援平台各别的特定持久化存储方法抽象化。

ezgif.com-gif-maker (3).gif

这表示所有设备都可用相同代码访问持久化存储,无论是Android的Shared Preferences、iOS的NSUserDefaults、Web上Local Storage、Windows上的AppData目录。Shared Preference能满足个别平台下的需求

image.png

因此很适合保存用户主题偏好之类的单纯数据,一旦将SharedPreference添加为应用程序依赖项

flutter pub add shared_preferences

以此创建实例Shared_Preferences便能着手保存数据

SharedPreference prefs = await SharedPreferences.getInstance();

所支援的数据类型包括Int、double、bool、String和List-String

void toggleDarkMode(bool val) {
    prefs.setBool("darkMode", val);
}

还可以键值查询来取回数据,如果该数据不存在,便会返回null。

void getPrefs() {
    bool? dm = prefs.getBool("darkMode");
    
    dm != null
        ? darkMode = darkModePref
        : darkMode = false;
}

测试代码时,SharedPreferences本身自带模拟(mock),这使您能够为测试设置初始值,而无需使用在单元测试下可能无法去的的平台API

Map<String, Object> values = <String, Object>{'darkMode': true};

SharedPreferences.setMockInitialValues(values);

SharedPreferences和持久化存储这两者,有一点要记住,那便是无法保证编码会在磁盘上持久存储,所以务必确认当中并未存放关键的应用程序数据。

image.png

如果想了解有关package: shared_preferences的内容,或者关于Flutter的其他功能,请访问pub.dev

原文翻译自视频:视频地址

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容