'Future<dynamic>'不是 'String' 型的子类型



我是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();
}

相关内容

  • 没有找到相关文章

最新更新