我得到一个type 'Future<dynamic>' is not a subtype of type 'Future<String>'
我只是试图将FutureBuilder与SharedPreferences结合使用,以返回我以前使用SharedPreferences存储的字符串。
Flutter : 'Future <dynamic>' is not a subtype of type bool
这个堆栈溢出答案正在做与我正在做的事情完全相同的事情,但是我有错误?
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: getRoleFuture(),
builder: (context, snapshot) {
if(snapshot.data == false) {
return Text("No data");
}
else {
return Text(snapshot.data);
}
}
);
}
getRoleFuture() async {
var sp = await SharedPreferences.getInstance();
return sp.getString("role");
}
答案 0 :(得分:2)
原因是您在此行中将snapshot.data用作bool
if(snapshot.data == false) {
return Text("No data");
}
将Future返回类型设置为字符串的位置 也许如果您这样做:
if(snapshot.data == null || snapshot.data == '') {
return Text("No data");
}
else {
return Text(snapshot.data);
}
答案 1 :(得分:0)
使用hasData
检查快照。
if(snapshot.hasData == false)
给出返回类型。
Future<String> getRoleFuture() async {
var sp = await SharedPreferences.getInstance();
return sp.getString("role");
}
答案 2 :(得分:0)
在您的FutureBuilder中,将来传递给您的函数:
未来:getRoleFuture,(不带括号)
所以您的代码应如下所示:
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: getRoleFuture,
builder: (context, snapshot) {
if(!snapshot.hasData) {
return Text("No data");
}
else {
return Text(snapshot.data);
}
}
);
}
Future<String> getRoleFuture() async {
var sp = await SharedPreferences.getInstance();
return sp.getString("role");
}
我们不在该代码中使用括号,因为我们不希望在遇到该代码的地方调用该函数。相反,我们希望将来对我们的函数进行引用。