如何在Flutter中从ListView外部控制ListViewBuilder? 在文本字段中,我可以使用像这样的控制器:controller:Textcontroller。我可以在listviewbuilder中做类似的事情来清除其中的所有对象吗?
准确地说。我的代码看起来像这样
Expanded(
child: new ListView.builder(
itemCount: List.length,
itemBuilder: (context,index){
return new Card(
//all stuff with data
),
),
);
},
... 我该怎么做,以便当从另一个函数调用时,它会删除列表视图中的所有项目?
答案 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
来访问该类并呈现该列表。