我可以将小部件列表插入到 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(上下文,列表),
]
问候
我正在尝试为我的 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(上下文,列表), ]
问候