我正在使用flutter,我正在尝试从之前设置的shared_preferences中获取一个值,并将其显示在文本小部件中。但是我得到了'Future'的实例而不是值。这是我的代码:
Future<String> getPhone() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
final String patientPhone = prefs.getString('patientPhone').toString();
print(patientPhone);
return patientPhone;
}
Future<String> phoneOfPatient = getPhone();
Center(child: Text('${phoneOfPatient}'),))
答案 0 :(得分:2)
在await
之前缺少prefs.getString(
,请使用setState()
而不是返回值。 build()
不能使用await
。
String _patientPhone;
Future<void> getPhone() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
final String patientPhone = await /*added */ prefs.getString('patientPhone');
print(patientPhone);
setState(() => _patientPhone = patientPhone);
}
build() {
...
Center(child: _patientPhone != null ? Text('${_patientPhone}') : Container(),))
}
答案 1 :(得分:1)
调用返回Future的函数不会阻塞您的代码,这就是为什么将该函数称为异步的原因。相反,它将立即返回一个Future对象,该对象最初是未完成的。
String phoneOfPatient;
Future<void> getPhone() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
final String patientPhone = await /*added */ prefs.getString('patientPhone');
}
在func
之后像这样打电话。未来的结果仅在未来完成时可用。
您可以使用以下任一关键字访问“未来”的结果:
然后
等待
您可以通过以下两种方式之一使用此函数的结果:
getphone.then((value) => {
print(value); // here will be printed patientPhone numbers.
phoneOfPatient = value;
});
或
Future<void> foo() async {
String phoneOfPatient = await getphone();
print(phoneOfPatient); // here will be printed patientPhone numbers.
}
答案 2 :(得分:0)
如果您没有使用 await
或 async
的选项,您可以执行以下操作。
getPhone().then((value){
print(value);
});
然后为它们分配一个变量。由此,您将获得 value
的结果。