我可以将小部件列表插入到 gridView 中吗?

Can I Insert a widget list into a gridView?

我正在尝试为我的 Gridview 创建一个构造函数,允许我将元素列表传递给它并在其中构建它们。

代码有点像:

GridView menuGrid(BuildContext context, List<MaterialPageRoute> lista) {
  return GridView.count(
    crossAxisCount: 3,
    padding: const EdgeInsets.all(5),
    crossAxisSpacing: 5,
    mainAxisSpacing: 5,
    children: _listado(context, lista),
  );
}

List<Widget> _listado(BuildContext context, List<MaterialPageRoute> lista) {
  List<Widget> _listaWidget = [];
  lista.forEach((element) {
    _listaWidget.add(GestureDetector(
      onTap: () {
        Navigator.push(context, element);
      },
      child: getImageWidgetByMaterialPageRoute(element) is Image
          ? Container(
              padding: const EdgeInsets.all(5),
              child: getImageWidget(getKeyByMaterialPageRoute(element)),
            )
          : Container(
              padding: const EdgeInsets.all(5),
              child: getImageWidgetByMaterialPageRoute(element),
            ),
    ));
  });
  return _listaWidget;
}

但是我的 gridView 是空白的:(

解决方法:

GridView menuGrid(
    BuildContext context, List<MaterialPageRoute> lista, int columnas) {
  return GridView.count(
    // Create a grid with 2 columns. If you change the scrollDirection to
    // horizontal, this produces 2 rows.
    crossAxisCount: columnas,
    padding: const EdgeInsets.all(20),
    crossAxisSpacing: 10,
    mainAxisSpacing: 10,
    children: <Widget>[
      ..._listado(context, lista),
    ],
  );
}
List<Widget> _listado(BuildContext context, List<MaterialPageRoute> lista) {
  List<Widget> _listaWidget = [];
  lista.forEach((element) {
    _listaWidget.add(GestureDetector(
      onTap: () {
        Navigator.push(context, element);
      },
      child: Container(
        padding: const EdgeInsets.all(5),
        child: getWidgetByMaterialPageRoute(element) is Image
            ? Container(
                padding: const EdgeInsets.all(8),
                decoration: BoxDecoration(
                  image: DecorationImage(
                    image: getImageWidgetByMaterialPageRoute(element).image,
                    fit: BoxFit.cover,
                  ),
                ),
              )
            : getImageWidget(getKeyByMaterialPageRoute(element)),
      ),
    ));
  });
  return _listaWidget;
}

解决办法是调用列表的方式:

children: [ ..._listado(上下文,列表), ]

问候