Flutter调用setState后FutureBuilder仍未更新UI问题求助
你的代码存在两处核心错误导致UI无法刷新:
onRefresh回调的写法错误:你使用的then((value) => (value){...}语法实际是用箭头函数返回了一个未执行的匿名函数,内部更新数据、调用setState的逻辑全程没有运行。FutureBuilder的future参数绑定逻辑错误:FutureBuilder只会在首次构建组件时执行一次传入的future,后续你修改listDummy的值也不会触发它重新请求最新数据。
修复方案
直接参考下方修改后的代码即可,改用async/await写法替代嵌套回调,同时调整FutureBuilder的future参数逻辑,确保刷新后能拿到最新数据:
return RefreshIndicator( onRefresh: () async { await dataLoader.loadOnlineClass(); // 刷新本地缓存数据 listDummy = PersistenceHelper().getOnlineClass(); setState(() {}); }, child: FutureBuilder( // 每次组件重新build时重新执行请求,拿到最新数据 future: PersistenceHelper().getOnlineClass(), builder: (BuildContext context, AsyncSnapshot snapshot) { switch (snapshot.connectionState) { case ConnectionState.waiting: return const Text('Loading....'); default: if (snapshot.hasError) { return Text('Error: ${snapshot.error}'); } else { return _listShowerTest(snapshot.data); } } }, ), );
优化建议
如果想要避免每次组件build都重复执行数据请求,可以去掉FutureBuilder,直接把列表数据存在List类型的状态变量中,用状态变量直接渲染列表,下拉刷新时直接更新这个状态变量再调用setState即可,性能更高。
内容的提问来源于stack exchange,提问作者npsulav
相关产品推荐
相关产品推荐

