我如何使用 flutter 迭代对象列表并在小部件中获取它们的属性?
How can i iterate a list of objects and get their properties within a widget using flutter?
class drinkMenu extends StatelessWidget {
int i = 0;
@override
Widget build(BuildContext context) {
Size screenSize = MediaQuery.of(context).size;
List<products> _products = <products>[];
return Scaffold(
appBar: AppBar(
title: Text('Bebidas.'),
backgroundColor: Colors.brown,
),
body: GridView.count(
padding: const EdgeInsets.all(15),
mainAxisSpacing: 10,
crossAxisCount: 1,
childAspectRatio: 2.4,
children: <Widget>[
_products.forEach((products _drink) {
showGrid(
child: GestureDetector(
onTap: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) {
return productosNuevos();
}));
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Text(
"BebidasPH",
),
Container(
alignment: Alignment.bottomRight,
child: Image.asset(
"assets/images/cafesitop.png",
width: screenSize.width / 2.635,
),
),
],
)),
text: '');
})
],
));
}
}
我目前正在开发我的第一个移动应用程序(使用 Flutter 和 Dart 开发。),我的应用程序是一个与食品相关的应用程序,其中包含显示产品的菜单。当我尝试制作对象列表(在本例中为产品)以便我可以轻松地在屏幕上分配和显示它们的 name/price 和图像时,问题就来了,我尝试做的是使用“forEach() ” 函数迭代我列表中的每个实例,然后我可以应用一个动作,使用对象的属性,然后我(理论上)从那里获取该信息并显示它,但我得到这个错误,说“这个表达式有一种 'void' 所以它的值不能被使用。尝试检查你是否使用了正确的 API;可能有一个你没有预料到的 returns 无效的函数或调用。还要检查也可能为 void 的类型参数和变量。"
如果不使用 for each 函数怎么办,或者我该如何解决这个问题?
这是给我带来问题的代码部分:
当您使用 StatelessWidget
时,放置变量 _product
不会导致任何问题,但是当您想要 StatefulWidget
时,将其放在 build
方法之前。
如果你查看 forEach 的结构,它是 return void
void forEach(
void action(
E element
)
)
对于您的情况,您需要 map
列表并在 Column
上 return 使用展开运算符 ...
。会像
Column(
children: [
..._product.map((e) {
//return your widget
return Text("");
}).toList(),
],
),
你的代码片段
children: <Widget>[
..._products.map((_drink) {
return showGrid(
child: GestureDetector(
onTap: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) {
return productosNuevos();
}));
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Text(
"BebidasPH",
),
Container(
alignment: Alignment.bottomRight,
child: Image.asset(
"assets/images/cafesitop.png",
width: screenSize.width / 2.635,
),
),
],
)),
text: '');
}).toList(),
],
更多关于spread-operator and Map
class drinkMenu extends StatelessWidget {
int i = 0;
@override
Widget build(BuildContext context) {
Size screenSize = MediaQuery.of(context).size;
List<products> _products = <products>[];
return Scaffold(
appBar: AppBar(
title: Text('Bebidas.'),
backgroundColor: Colors.brown,
),
body: GridView.count(
padding: const EdgeInsets.all(15),
mainAxisSpacing: 10,
crossAxisCount: 1,
childAspectRatio: 2.4,
children: <Widget>[
_products.forEach((products _drink) {
showGrid(
child: GestureDetector(
onTap: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) {
return productosNuevos();
}));
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Text(
"BebidasPH",
),
Container(
alignment: Alignment.bottomRight,
child: Image.asset(
"assets/images/cafesitop.png",
width: screenSize.width / 2.635,
),
),
],
)),
text: '');
})
],
));
}
}
我目前正在开发我的第一个移动应用程序(使用 Flutter 和 Dart 开发。),我的应用程序是一个与食品相关的应用程序,其中包含显示产品的菜单。当我尝试制作对象列表(在本例中为产品)以便我可以轻松地在屏幕上分配和显示它们的 name/price 和图像时,问题就来了,我尝试做的是使用“forEach() ” 函数迭代我列表中的每个实例,然后我可以应用一个动作,使用对象的属性,然后我(理论上)从那里获取该信息并显示它,但我得到这个错误,说“这个表达式有一种 'void' 所以它的值不能被使用。尝试检查你是否使用了正确的 API;可能有一个你没有预料到的 returns 无效的函数或调用。还要检查也可能为 void 的类型参数和变量。"
如果不使用 for each 函数怎么办,或者我该如何解决这个问题?
这是给我带来问题的代码部分:
当您使用 StatelessWidget
时,放置变量 _product
不会导致任何问题,但是当您想要 StatefulWidget
时,将其放在 build
方法之前。
如果你查看 forEach 的结构,它是 return void
void forEach(
void action(
E element
)
)
对于您的情况,您需要 map
列表并在 Column
上 return 使用展开运算符 ...
。会像
Column(
children: [
..._product.map((e) {
//return your widget
return Text("");
}).toList(),
],
),
你的代码片段
children: <Widget>[
..._products.map((_drink) {
return showGrid(
child: GestureDetector(
onTap: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) {
return productosNuevos();
}));
},
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Text(
"BebidasPH",
),
Container(
alignment: Alignment.bottomRight,
child: Image.asset(
"assets/images/cafesitop.png",
width: screenSize.width / 2.635,
),
),
],
)),
text: '');
}).toList(),
],
更多关于spread-operator