Как указывают другие ответы, проблема заключается в _buildUserGroups(context)
, так как он возвращает список виджетов, в результате чего получается вложенный список.
Начиная с Dart 2.3 (представлен Flutter в Google I / O'19), вы можете использовать оператор распространения ...
, который развернет внутренний список, поэтому его элементы станут элементами внешнего списка:
Widget buildNavigationDrawer(BuildContext context) {
return Drawer(
child: ListView(
children: [
DrawerHeader(...),
..._buildUserGroups(context),
ListTile(...)
],
),
);
}
Для получения дополнительной информации очто делает оператор спреда, ознакомьтесь с языковым туром Дарт .
Оригинальный ответ (до Дарт 2.3):
Вы можете завернутьвызов функции в Column
или ExpansionTile
.
Однако , это вводит новый виджет в дерево виджетов.Следует признать, что влияние на производительность минимально, но, на мой взгляд, более разумным решением было бы создать список виджетов следующим образом:
Widget buildNavigationDrawer(BuildContext context) {
final items = <Widget>[];
items.add(DrawerHeader(...));
items.addAll(_buildUserGroups(context));
items.add(ListTile(...));
return Drawer(child: ListView(children: items));
}
Если вы настаиваете на встроенном решении, вы также можете использовать .followedBy(...)
чтобы добавить элементы в список:
Widget buildNavigationDrawer(BuildContext context) {
return Drawer(
child: ListView(
children: [ DrawerHeader(...) ]
.followedBy(_buildUserGroups(context))
.followedBy([ ListTile(...) ])
),
);
}