Можно ли создать виджет, который строит массив виджетов? - PullRequest
0 голосов
/ 06 августа 2020
• 1000 и иметь возможность вставлять их, чтобы я мог украсить представление списка дополнительными элементами, например:
Column(
    children: <Widget>[
      ...GroupedWidgets(),
      Text('Something unrelated'),
    ],
  );

Сначала я думал использовать функцию, которая возвращает массив, например List<Widget> groupedWidgets(), но проблема в том, что я хочу инкапсулировать состояние showB для удобства, иначе мне придется передать showB и функцию setState извне. Так что мне действительно нужен класс, который действует как обычный виджет, за исключением того, что он создает массив виджетов.

1 Ответ

1 голос
/ 06 августа 2020

Вы можете создать свой собственный 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, Row, в основном в любом виджете как ребенок.

В вашем случае у вас будет что-то вроде этого:

Column(
   children: <Widget>[
      WidgetGroup(),
      Text('Something unrelated'),
   ],
);

Надеюсь, это решит вашу проблему.

...