问题

一个 Flutter 项目中,使用 provider 模式管理状态。我在在 PageView 里嵌套了 ListViewListViewItem 视图是继承自 StatefulWiget

我在 model 里删除 List 数据源中的某一个数据,ListView 渲染的长度变了,内容却没变。

方案

  1. Item 的视图改为继承自 StatelessWidget

  2. 使用 keyflutter的渲染机制会自动对比新老 key 值,从而刷新。(这一方案类似与 vue 中的 v-bind:key)

1
2
3
4
5
6
7
ListView.separated(
itemCount: model.list.length,
itemBuilder: (BuildContext context, int index) => ItemTrain(
data: model.list[index],
// 关键在这里 ↓
key: ValueKey(model.list[index].orderId),
),