我有一些小部件组,这些小部件组以这种结构进入整个应用中各种基于列表的小部件中:
bool showB = false
Column(
children: <Widget>[
WidgetA(),
FlatButton(onPressed: () => setState(() => showB = !showB )),
if(showB) WidgetB(),
],
);
我想将这些子窗口小部件与它们的“列表/列”视图分离,并能够插入它们,以便我可以用其他东西来装饰“列表”视图,例如:
Column(
children: <Widget>[
...GroupedWidgets(),
Text('Something unrelated'),
],
);
我最初以为使用返回诸如List<Widget> groupedWidgets()
之类的数组的函数,但是问题是为了方便起见,我想封装showB
的状态,否则我必须传递{{ 1}}以及从外部使用setState的函数。因此,我真正想要的是一个类似于普通窗口小部件的类,只是它会构建一系列窗口小部件。
答案 0 :(得分:1)
您可以像这样为Group制作自己的StatefullWidget:
class WidgetGroup extends StatefulWidget {
WidgetGroupState createState() => WidgetGroupState();
}
class WidgetGroupState extends State<WidgetGroup> {
bool _showB = false;
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
WidgetA(),
FlatButton(onPressed: () => setState(() => _showB = !_showB )),
if (_showB) WidgetB(),
],
);
}
}
然后,您可以在需要使用的任何地方使用此小部件:在ListView,列,行中,基本上在任何小部件中都作为子级。
在您的情况下,您将遇到以下情况:
Column(
children: <Widget>[
WidgetGroup(),
Text('Something unrelated'),
],
);
我希望这可以解决您的问题。