如何在Flutter中清除ListViewBuilder中的对象?

时间:2020-08-09 12:08:38

标签: flutter dart

如何在Flutter中从ListView外部控制ListViewBuilder? 在文本字段中,我可以使用像这样的控制器:controller:Textcontroller。我可以在listviewbuilder中做类似的事情来清除其中的所有对象吗?

准确地说。我的代码看起来像这样


Expanded(
                child: new ListView.builder(

                  itemCount: List.length,
                  itemBuilder: (context,index){

                 

                    return new Card(

                     //all stuff with data
                        ),
                      ),
                    );
                  },

... 我该怎么做,以便当从另一个函数调用时,它会删除列表视图中的所有项目?

2 个答案:

答案 0 :(得分:1)

您可以在小部件的状态中定义一个变量:

var _clear = false;

此变量为true时,将清除列表,为false时,将显示该列表。您可以使用setState来切换此变量。将itemCount中的ListView.builder设置为0会清除列表。

完整代码:

 var _clear = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.all(30.0),
            child: FlatButton(
              child: Text('clear'),
              color: Colors.pinkAccent,
              onPressed: () {
                setState(() {
                  _clear = true;
                });
              },
            ),
          ),
          FlatButton(
            child: Text('add'),
            color: Colors.greenAccent,
            onPressed: () {
              setState(() {
                _clear = false;
              });
            },
          ),
          Expanded(
            child: ListView.builder(
              controller: _scrollController,
              itemCount: _clear ? 0 : 100,
              itemBuilder: (context, index) {
                return Container(
                  height: 300,
                  child: Card(
                    child: Center(
                      child: Text('$index'),
                    ),
                  ),
                );
              },
            ),
          ),
        ],
      ),
    );
  }

答案 1 :(得分:0)

您需要一个Store类,其中包含该列表以及列表操作方法,然后您可以使用provider来访问该类并呈现该列表。