如果数据发生变化,颤动如何更新 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?

过滤Listview数据后勾选(选中)复选框的位置发生变化

如果编程语言发生变化,如何在 iOS 应用商店中更新应用?

c# winform 中如何写事件监听 比如监听listview.items.count是不是发生变化

如何在颤动的 ReorderableListView 图标上添加颜色变化?