android - FutureBuilder 错误:返回类型“对象?” 不是闭包上下文所要求的“小部件”
问题描述
我是 Flutter 的新手,我正在研究 Future Builder,当我在以下行运行代码时:return snapshot.data;
返回以下错误:The return type 'Object?' isn't a 'Widget', as required by the closure's context.
我认为这与 Null Safety 有关,因为当我更改行时:它return snapshot.data;
会return Text(snapshot.data.toString());
呈现文本:ListView(ScrollDirection: vertical...ScrollPhysics)
但我对 Null 安全性可能是错误的。
下面的代码来自一个 youtube 教程:https://www.youtube.com/watch?v=y-IypschepA
我正在看,我在学习时逐字复制代码,我已经验证了近 20 次我的代码正是导师编写并成功运行的代码。
我不确定如何解决此错误。
import 'package:flutter/material.dart';
class FutureBuilderTest extends StatefulWidget {
@override
_FutureBuilderTestState createState() => _FutureBuilderTestState();
}
class _FutureBuilderTestState extends State<FutureBuilderTest> {
Future<void> loadList(BuildContext context) async {
return Future.delayed(
Duration(seconds: 1),
() {
return ListView.builder(
itemCount: 40,
itemBuilder: (context, index) {
return Card(
elevation: 8,
child: Text(
"Dummy Text $index",
style: TextStyle(fontSize: 17, fontWeight: FontWeight.bold),
),
);
},
);
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Future Builder Test"),
),
body: FutureBuilder(
future: loadList(context),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
}
if (snapshot.connectionState == ConnectionState.done) if (snapshot
.hasError) {
return Center(
child: Text(snapshot.data.toString()),
);
}
if (snapshot.data != null) {
return snapshot.data; // THIS LINE IS RETURNING THE ERROR
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
);
}
}
解决方案
FutureBuilder 中的构建器返回一个小部件(就像您在返回 CircularProgressIndicator 时所做的那样)。所以你不应该按原样返回 snapshot.data 。相反,将其放入一些小部件中以显示在屏幕上。所以喜欢,
if (snapshot.data != null) {
print(snapshot.data);
return Center(
child:Text(snapshot.data.toString(),
),
),
);
}
推荐阅读
- reactjs - neom 网站中使用了哪些动画
- caching - 分布式模式 Infinispan 的节点之间是否可能存在数据延迟?
- angular - 进入页面时检查 async observable 的值
- twilio - 自动驾驶仪、Python 快速入门、ngrok 404 消息
- python - 从 Flask API 调用 shell 脚本
- c - 如何摆脱 C 中的分段错误(核心转储)?
- visual-studio - 用于在两个组框之间切换的互斥单选按钮
- java - 在 JFrame 中显示文件中的图像
- python - Django 表单验证:在开发中工作但不在生产中(nginx/gunicorn/supervisor)
- c++ - C++ 中的端口 COM 处理导致看门狗冲突