【问题标题】:Flutter how to update Listview.builder if the data is changes如果数据发生变化,颤动如何更新 Listview.builder
【发布时间】: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 是的,对不起!

标签: flutter listview auto-update stream-builder


【解决方案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
猜你喜欢
  • 2020-05-12
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2023-02-10
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多