我一直在慢慢地用Flatter构建一个应用程序,并努力在StatefulWidget/状态范例下工作.
我习惯于从其他类读取或更改某些UI组件的状态,但不太明白如何在Ffltter中做到这一点.例如,现在我正在构建一个包含CheckBoxListTiles的ListView.我想从另一个班级浏览并阅读列表磁贴中每个复选框的状态.
我觉得这在实践中应该非常简单,但我无法想出一种方法或示例来有效地外部化给定小部件的状态,以便它可以在其他地方使用.我知道,在这种明显的困难背后,很可能有一个有意的和哲学上的原因,我自己也能理解为什么它在一个框架(比如Flutter )中是至关重要的.然而,我感到受到限制,因为对于一个新手来说,如何在现成的模式下工作并不明显.
如何从ItemsList类中读取复选框的值?
项目分类:
class ListItem extends StatefulWidget {
String _title = "";
bool _isSelected = false;
ListItem(this._title);
@override
State<StatefulWidget> createState() => new ListItemState(_title);
}
class ListItemState extends State<ListItem> {
String _title = "";
bool _isSelected = false;
ListItemState(this._title);
@override
Widget build(BuildContext context) {
return new CheckboxListTile(
title: new Text(_title),
value: _isSelected,
onChanged: (bool value) {
setState(() {
_isSelected = value;
});
},
);
}
String getTitle() {
return _title;
}
bool isSelected() {
return _isSelected;
}
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
}
列表类:
class ItemsList extends StatefulWidget {
@override
State<StatefulWidget> createState() => new ItemsListState();
}
class ItemsListState extends State<ItemsList> {
List<ListItem> _items = new List();
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new ListView(
children: _items.map((ListItem item) {
return item;
}).toList(),
),
floatingActionButton: new FloatingActionButton(
onPressed: addItem,
child: new Icon(Icons.add),),
);
}
void addItem() {
setState(() {
_items.add(new ListItem("Item"));
});
}
List<String> getSelectedTitles() {
List<String> selected = new List();
***This is where I would like to externalize the state***
for(ListItem e in _items) {
if(e.isSelected()) {
selected.add(e.getTitle());
}
}
return selected;
}
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
}