flutter - Flutter RefreshIndicator 指示但不刷新
问题描述
我一直在网上阅读,但我找不到我的代码有什么问题。
有人能抽出几分钟时间帮我一把吗?
这是代码,基本上我有一个带有刷新指示器的futurebuilder,它使用相同的功能,但它不起作用。
Refresh 函数将 api 转储到 SQFlite。
class _MyTasksListViewState extends State<MyTasksListView> {
@override
Widget build(BuildContext context) {
return FutureBuilder<List<OT>>(
future: buildList(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return RefreshIndicator(
child: ListView(
children: snapshot.data!
.map((ot) => ListTile(
title: Text("Numero de OT: " + ot.ot.toString()),
subtitle: Text("OT Original: " + ot.otOriginal),
onTap: () {
Navigator.of(context)
.pushNamed('/Tareas', arguments: {
'Tareas': ot.tareas,
});
},
))
.toList(),
),
onRefresh: () => buildList());
} else {
return const Center(child: CircularProgressIndicator());
}
},
);
}
Future<List<OT>> buildList() async {
refresh(context);
List<OT> lista = [];
Database database = await initDB();
var otFromDB = await database.rawQuery("SELECT * FROM 'ots'");
var tareasFromDB = await database.rawQuery("SELECT * FROM 'tareas'");
for (var i in otFromDB) {
OT ot = OT.fromArray(i);
for (var tarea in tareasFromDB) {
if (tarea['otID'] == ot.ot) {
ot.tareas.add(Tarea.fromArray(tarea));
}
}
lista.add(ot);
}
return lista;
}
}
提前致谢!
解决方案
这两个调用都返回了不同的引用
return FutureBuilder<List<OT>>(
future: buildList(), // <--
和
onRefresh: () => buildList() // <--
所以我们必须统一引用以获得预期的行为
1- 定义本地 Future 变量
class _MyTasksListViewState extends State<MyTasksListView> {
late Future<List<OT>> list; // <---
2-初始化变量buildList()
@override
void initState() {
super.initState();
list = buildList(); // <--
}
3-把我们的未来list
交给FutureBuilder
return FutureBuilder<List<OT>>(
future: list, // <--
4-onRefresh
将改变我们list
变量的状态
onRefresh: () => setState(()=> list = buildList())
就是这样,希望我的回答可以帮助到你
推荐阅读
- reactjs - 使用 Firebase 设置带有功能组件的 React App
- flutter - Flutter - GridView 自定义大小问题
- javascript - 按钮制作盒子并在里面添加计数的数字
- swagger - 如何在 swagger 中指定没有指定键的通用映射
- javascript - 如何在不同的组件中调用函数
- html - 有没有办法让一个不可见的滚动条适用于大多数浏览器,如果不是所有浏览器?
- javascript - 无法将图像导入 firebase-messaging-sw.js:“无法在模块外使用导入语句”
- python - 在 heroku 上部署 selenium 脚本时出现问题
- javascript - 最近创建的对象未保存
- outlook - Outlook 生态系统中的 COM 加载项 EOL