Flutter ListView不会在setState上更新

时间:2020-07-26 19:09:26

标签: list flutter listview dart stateful

当setState在State类中运行时,我的抖动ListView不会更新。

是的,我的主类是一个有状态的小部件,以防万一有人想知道

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => new _MyAppState();
}

我的setState函数

setState(() {
        if (price == "null") {
          items.add("Item ${counter + 1}: error");
          print("null");
        } else {
          items.add("Item ${counter + 1}: $price");
          print("$price");
          totalPrice += price;
        }
        counter++;
      });
    });

在将ListView放在容器->列->展开之前,它运行良好。但是添加完之后,setState运行时它停止更新

body: new Container(
         child: Column(
           children: <Widget>[
             Expanded(
               child: ListView.builder(
                 itemCount: items.length,
                 itemBuilder: (context, index) {
                   final item = items[index];

                   return Dismissible(
                     key: Key(item),
                     onDismissed: (direction) {
                       setState(() {
                         items.removeAt(index);
                         counter--;
                       });
                       Scaffold.of(context).showSnackBar(
                           SnackBar(content: Text("$item deleted")));
                     },
                     background: Container(color: Colors.red),
                     child: ListTile(title: Text('$item')),
                   );
                 },
               ),
             ),

能对颤动有更多了解的人可以教育我这里发生的事情吗?我不认为将ListView添加到容器中应该不会对它的工作方式产生太大影响?

1 个答案:

答案 0 :(得分:0)

在setstate中进行计算会导致此问题。取而代之的是,我开始在build中进行计算,并使用setstate仅添加到列表中。然后,它将触发构建,其余的事情在那里发生。这解决了我的问题