如果数据发生变化,颤动如何更新 Listview.builder
Posted
技术标签:
【中文标题】如果数据发生变化,颤动如何更新 Listview.builder【英文标题】:Flutter how to update Listview.builder if the data is changes 【发布时间】:2021-01-02 10:13:52 【问题描述】:我正在 Flutter 中使用 ListView.builder。现在一切正常,我在回调方法中有以下代码行:
@override
void initState()
items = new List();
for(int index = 0; index < dataList.length; index++)
items.add(...creating widget ..);
@override
Widget build(BuildContext context)
return Container(
child: ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: dataList.length,
itemBuilder: (BuildContext context, int index)
return Container(
width: width,
height: 160 ,
key: UniqueKey(),
padding: EdgeInsets.all(10),
child: items[index],
);
,
),
);
问题是当 dataList 的数据更新时,如果数据值更新,删除,我应该如何实现此列表以使列表更新 UI或地点变了。 StreamBuilder 是解决方案吗?
【问题讨论】:
在你的情况下它是 dataList 对吗? @jitsm555 是的,对不起! 【参考方案1】:如果它不断变化,请使用StreamBuilder
例如:https://bendyworks.com/blog/a-month-of-flutter-rendering-a-list-view-with-stream-builder
如果没有,那么你可以使用FutureBuilder
例如:https://medium.com/nonstopio/flutter-future-builder-with-list-view-builder-d7212314e8c9
或,
如果 dataList 在应用程序内部发生变化(删除/更新),则调用 setState()
将更新 ListView
【讨论】:
不断变化,但我在 dataList 项的类定义中使用 ChangeNotifier 解决了这个问题。问题是当这些项目被删除或索引更改时。我应该使用哪个选项? 他们是如何删除或修改的?它是在应用程序内部还是在服务器上完成的? 应用内,取决于用户交互。 所以每当dataList被修改你只需要调用setState(),它就会更新listview以上是关于如果数据发生变化,颤动如何更新 Listview.builder的主要内容,如果未能解决你的问题,请参考以下文章
适配器的内容发生了变化,但 ListView 没有收到通知。安卓问题
如何在颤动中从 ListView 中删除默认的 ScrollBar?