是否有可能创建一个构建一系列小部件的小部件?

时间:2020-08-06 16:43:11

标签: flutter

我有一些小部件组,这些小部件组以这种结构进入整个应用中各种基于列表的小部件中:

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的函数。因此,我真正想要的是一个类似于普通窗口小部件的类,只是它会构建一系列窗口小部件。

1 个答案:

答案 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'),
   ],
);

我希望这可以解决您的问题。