Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter FutureBuilder与SharedReferences一起使用时不起作用_Flutter_Dart - Fatal编程技术网

Flutter FutureBuilder与SharedReferences一起使用时不起作用

Flutter FutureBuilder与SharedReferences一起使用时不起作用,flutter,dart,Flutter,Dart,我得到的类型“Future”不是类型“Future”的子类型 我只是尝试将FutureBuilder与SharedReferences结合使用,以返回我以前使用SharedReferences存储的字符串 这个堆栈溢出答案与我正在做的完全相同,但我有一个错误 Widget build(BuildContext context) { return FutureBuilder<String>( future: getRoleFuture(), buil

我得到的
类型“Future”不是类型“Future”的子类型

我只是尝试将FutureBuilder与SharedReferences结合使用,以返回我以前使用SharedReferences存储的字符串

这个堆栈溢出答案与我正在做的完全相同,但我有一个错误

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");
  }
小部件构建(构建上下文){
回归未来建设者(
未来:getRoleFuture(),
生成器:(上下文,快照){
如果(snapshot.data==false){
返回文本(“无数据”);
}
否则{
返回文本(snapshot.data);
}
}
);
}
getRoleFuture()异步{
var sp=await SharedPreferences.getInstance();
返回sp.getString(“角色”);
}

使用
hasData
检查快照

if(snapshot.hasData == false)
给出返回类型

Future<String> getRoleFuture() async {
    var sp = await SharedPreferences.getInstance();
    return sp.getString("role");
  }
Future getRoleFuture()异步{
var sp=await SharedPreferences.getInstance();
返回sp.getString(“角色”);
}

使用
hasData
检查快照

if(snapshot.hasData == false)
给出返回类型

Future<String> getRoleFuture() async {
    var sp = await SharedPreferences.getInstance();
    return sp.getString("role");
  }
Future getRoleFuture()异步{
var sp=await SharedPreferences.getInstance();
返回sp.getString(“角色”);
}

在您的FutureBuilder future中,将引用传递给您的函数:

future: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");
}
小部件构建(构建上下文){
回归未来建设者(
未来:getRoleFuture,
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回文本(“无数据”);
}
否则{
返回文本(snapshot.data);
}
}
);
}
Future getRoleFuture()异步{
var sp=await SharedPreferences.getInstance();
返回sp.getString(“角色”);
}
我们不在代码中使用括号,因为我们不希望在遇到代码时调用函数。相反,我们希望在将来传递对函数的引用


在FutureBuilder future中,将引用传递给函数:

future: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");
}
小部件构建(构建上下文){
回归未来建设者(
未来:getRoleFuture,
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回文本(“无数据”);
}
否则{
返回文本(snapshot.data);
}
}
);
}
Future getRoleFuture()异步{
var sp=await SharedPreferences.getInstance();
返回sp.getString(“角色”);
}
我们不在代码中使用括号,因为我们不希望在遇到代码时调用函数。相反,我们希望在将来传递对函数的引用


原因是您在此行中将snapshot.data用作bool

if(snapshot.data == false) {
      return Text("No data");
    }
其中,当您将未来返回类型设置为字符串时 如果你这样做的话:

if(snapshot.data == null || snapshot.data == '') {
      return Text("No data");
    }
    else {
      return Text(snapshot.data);
    }

原因是您在此行中将snapshot.data用作bool

if(snapshot.data == false) {
      return Text("No data");
    }
其中,当您将未来返回类型设置为字符串时 如果你这样做的话:

if(snapshot.data == null || snapshot.data == '') {
      return Text("No data");
    }
    else {
      return Text(snapshot.data);
    }

相同的问题,没有区别这是FutureGives返回类型“Future”的问题。相同的问题,没有区别这是FutureGives返回类型“Future”的问题。