Dart 颤振:共享偏好
我有这个功能:Dart 颤振:共享偏好,dart,flutter,sharedpreferences,future,Dart,Flutter,Sharedpreferences,Future,我有这个功能: Future<String> load(SharedPreferences prefs, String fileName) async { prefs = await SharedPreferences.getInstance(); String jsonString = prefs.getString(fileName) ?? ""; if (jsonString.isNotEmpty) { return jsonString
Future<String> load(SharedPreferences prefs, String fileName) async {
prefs = await SharedPreferences.getInstance();
String jsonString = prefs.getString(fileName) ?? "";
if (jsonString.isNotEmpty) {
return jsonString;
}else{
return ...
}
}
未来加载(SharedReferences优先级,字符串文件名)异步{
prefs=等待SharedReferences.getInstance();
字符串jsonString=prefs.getString(文件名)?“”;
if(jsonString.isNotEmpty){
返回jsonString;
}否则{
返回。。。
}
}
如果是其他情况,我应该退还什么?我用“”试过了,但不起作用 答案是“视情况而定”。也就是说,它取决于您对这个函数的结果到底做了什么,以及一个好的空默认值在该上下文中意味着什么
假设将返回的JSON字符串放入映射
,那么一个好的默认值可能是空映射。在这种情况下,您可以按如下方式重新构造函数:
未来加载JSON(最终字符串文件名)异步{
final SharedReferences prefs=等待SharedReferences.getInstance();
最终字符串jsonString=prefs.getString(文件名);
if(jsonString!=null&&jsonString.isNotEmpty){
返回jsonString;
}
返回“{}”;//默认值
}
最后一个字符串jsonString=await loadJSON(“test.json”);
最终映射jsonData=json.decode(jsonString);
但是,将此过程重新表述为返回实际地图值的略高级别函数可能更有意义:
未来加载数据(最终字符串文件名)异步{
final SharedReferences prefs=等待SharedReferences.getInstance();
最终字符串jsonString=prefs.getString(文件名);
if(jsonString!=null&&jsonString.isNotEmpty){
返回json.decode(jsonString);
}
return Map();//默认值
}
final Map jsonData=wait loadData(“test.json”);
共享首选项
在flatter中,共享首选项用于存储基本数据(int
、double
、bool
、string
、和stringList
)。此数据与应用程序关联,因此当用户卸载应用程序时,数据也将被删除
获取插件
pub的插件是AndroidSharedReferences
和iOSNSUserDefaults
的包装器。您可以通过在dependencies部分的pubspec.yaml文件中添加shared_preferences
行来获得此插件
dependencies:
shared_preferences: '>=0.5.12+2 <2.0.0'
读写数据
要获取共享首选项对象,可以执行以下操作:
final prefs=wait SharedPreferences.getInstance();
这将用于以下所有示例
int
- 阅读:
final myInt=prefs.getInt('my_int_key')??0;代码>
- 写入:
prefs.setInt('my_int_key',42)代码>
- 阅读:
final myDouble=prefs.getDouble('my_double_key')??0.0;代码>
- 写入:
prefs.setDouble('my_double_key',3.14)代码>
- 阅读:
final myBool=prefs.getBool('my_bool_key')??虚假的代码>
- 写入:
prefs.setBool('my\u bool\u key',true)代码>
- 阅读:
final myString=prefs.getString('my_string_key')代码>
- 写入:
prefs.setString('my_string_key','hello')代码>
- 阅读:
final myStringList=prefs.getStringList('my_string_list_key')??[];代码>
- 写:
prefs.setStringList('my_string_list_key',['horse','cow','sheep')代码>
prefs.remove('my_int_key');
不过,我很少觉得有必要这么做。我只是覆盖旧数据或忽略它。您不应该在共享首选项中存储任何敏感数据
另见
- 文件:
String jsonString=prefs.getString(文件名)??"";代码>-错误,您必须执行String jsonString=(wait prefs.getString(fileName))??"";代码>因为,当我尝试加载时,它会给我“FormatException:输入的意外结束(在字符1处),如果我把wait放在那里,它会抱怨告诉我“只等待未来”“关于wait
你说得对,我刚刚研究了prefs的不同实现。看起来很好。问题是否确实存在于else
块中?这是您解释共享偏好的最令人惊讶的方式。如果这就是文档中的解释就好了。谢谢!
import 'package:shared_preferences/shared_preferences.dart';