我是flutter的新手。我试图学习SharedPreferences,但我有这个例外。我该如何解决这个问题?
类_MyAppState扩展状态{
Future<SharedPreferences> prefs = SharedPreferences.getInstance();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: <Widget>[
RaisedButton(
onPressed: () {addStringToSF();},
),
Text(getStringValuesSF()),
],
),
);
}
addStringToSF() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('stringValue', "abc");
}
getStringValuesSF() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String stringValue = prefs.getString('stringValue');
return stringValue;
}
}
默认异步函数返回动态我们必须进行类型转换
Future<String> getStringValuesSF() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String stringValue = prefs.getString('stringValue');
return stringValue;
}
我将扩展@Abhishek的答案,因为我需要类似的答案,但在TextFormField上无法执行。
所以我制作了一个空的loadString方法来从sharedPrefs:中获取任何类型的密钥
Future<String> loadString(String key) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString(key) ?? '';
}
接下来,在我创建init form void以使用上述方法的同一类中(无论如何,我仍然认为这种处理Future的方式在Dart中有点不优化…(,这将把数据加载到控制器中:
Future<void> _initForm() async {
final clientBusinessRegistrationID = await loadString('clientBusinessRegistrationID');
_clientBusinessRegistrationIDController.value =
_clientBusinessRegistrationIDController.value.copyWith(
text: clientBusinessRegistrationID);
}
我还在同一类中添加了这个块:
SharedPreferences? preferences;
Future<void> initializePreference() async{
preferences = await SharedPreferences.getInstance();
}
最后在initState((中,我称之为
@override
void initState() {
super.initState();
// setupLocator();
initializePreference().whenComplete((){
setState(() {});
});
_clientBusinessRegistrationIDController.text = 'Initial';
_initForm();
}