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”的问题。