我如何使用 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