Flutter Widget 之package: shared_preferences
您已为自己的Flutter应用程序添加了又新又棒的深色主题,出于照顾用户,您甚至还为此设置功能切换键。
一切都很顺利,直到您发现应用重启后,主题又变回浅色。深色主题的偏好设置并未保存,所以不会固定套用。
是的,作为用户账户设置您可在服务器上保存偏好设置,但简单的布尔标志不必如此麻烦,也可在用户设备上持久化存储中保存偏好设置。
user1: {
username: sk8erboi1234,
Password: nicetrybuddy,
darkModeEnabled: true,
}
但这是Flutter,因此应用程序的使用设备不同,本地存储的API也大相径庭。
在编码写入shared_preferences包,shared_prederences插件,能将不同Flutter支援平台各别的特定持久化存储方法抽象化。
这表示所有设备都可用相同代码访问持久化存储,无论是Android的Shared Preferences、iOS的NSUserDefaults、Web上Local Storage、Windows上的AppData目录。Shared Preference能满足个别平台下的需求
因此很适合保存用户主题偏好之类的单纯数据,一旦将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和持久化存储这两者,有一点要记住,那便是无法保证编码会在磁盘上持久存储,所以务必确认当中并未存放关键的应用程序数据。
如果想了解有关package: shared_preferences的内容,或者关于Flutter的其他功能,请访问pub.dev
原文翻译自视频:视频地址
转载自:https://juejin.cn/post/7169439596428673060