Flutter中加载API返回JSON列表的ListView页应选Stateless还是Stateful Widget
结论
必须使用StatefulWidget实现该物品列表页。
原因说明
- StatelessWidget是无状态组件,所有属性声明后均为不可修改的
final类型,构建完成后无法主动触发UI更新,仅能通过父组件重新构建变更内容,完全不匹配你的业务需求。 - 你的页面存在两个必须由组件自身维护的可变状态:
- 从API拉取的物品列表数据:首次进入页面、下拉刷新时都会更新这份数据,需要存储在组件内部的可变状态中
- 可选的加载/错误状态:如果要做请求中的加载提示、请求失败的错误提示,这些状态也需要组件内部管理
- 下拉刷新触发的API请求完成后,需要调用
setState方法通知Flutter框架刷新UI,这个方法只有StatefulWidget对应的State类才能调用。
极简实现参考
你可以按照如下结构开发:
- 定义State类内的可变字段存储列表数据:
List<Item> items = []; - 在
initState生命周期中触发首次API请求,请求成功后更新items并调用setState - 使用
RefreshIndicator包裹ListView,在onRefresh回调中触发重新拉取数据的逻辑,拉取完成后再次调用setState更新列表
内容的提问来源于stack exchange,提问作者dianesis
相关产品推荐
相关产品推荐

