Flutter 如何在颤振中从listview元素的文本字段传递数据?

Flutter 如何在颤振中从listview元素的文本字段传递数据?,flutter,dart,Flutter,Dart,我想使用listtile中的文本字段从listview传递数量 padding: EdgeInsets.all(8.0), itemCount: allProducts.length, itemBuilder: (context, index) { return Consumer<CartModel>(builder: (context, cart, child) { return Card(

我想使用listtile中的文本字段从listview传递数量

        padding: EdgeInsets.all(8.0),
        itemCount: allProducts.length,
        itemBuilder: (context, index) {
          return Consumer<CartModel>(builder: (context, cart, child) {
            return Card(
              color: Colors.white,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: <Widget>[
                  Padding(
                    padding: const EdgeInsets.only(left: 20),
                    child: Text(
                      allProducts[index].title,
                      style: TextStyle(fontWeight: FontWeight.bold),
                    ),
                  ),
                  Container(
                    width: 30,
                    child: TextField(
                      controller: TextEditingController(),
                      decoration: InputDecoration(
                        hintText: 'Quantity'
                      ),
                    ),
                  ),
                  // Text("\$" + allProducts[index].price.toString()),
                  RaisedButton(
                    color: Colors.blue[200],
                    child: Text('Add'),
                    onPressed: () {
                      cart.addProduct(allProducts[index]);
                    },
                  ),
                ],
              ),
            );
          });
        },
      ),
padding:EdgeInsets.all(8.0),
itemCount:allProducts.length,
itemBuilder:(上下文,索引){
返回消费者(生成器:(上下文、购物车、子项){
回程卡(
颜色:颜色,白色,
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
填充物(
填充:仅限常量边集(左:20),
子:文本(
所有产品[索引]。标题,
样式:TextStyle(fontWeight:fontWeight.bold),
),
),
容器(
宽度:30,
孩子:TextField(
控制器:TextEditingController(),
装饰:输入装饰(
hintText:“数量”
),
),
),
//Text(“\$”+所有产品[索引].price.toString()),
升起的按钮(
颜色:颜色。蓝色[200],
子项:文本('Add'),
已按下:(){
cart.addProduct(所有产品[索引]);
},
),
],
),
);
});
},
),

但当我为textfield定义控制器时,它会反映在listview的所有字段上。是否有任何方法可以在列表的各个文本字段中输入自定义数量并将其传递给购物车

尝试将整个
代码移动到另一个小部件中,并将产品作为新小部件的输入


现在,当创建
时,将产品中的
唯一
值作为
键传递给

是的,最干净的解决方法之一是将磁贴提取到单独的StatefulWidget中。这个小部件可以有自己的控制器作为状态,按钮可以无缝地访问它的文本。您还可以提高可读性。

您需要在小部件外部将TextEditingController定义为一个变量,并将该变量传递给TextField的controller属性:

TextEditingController _textEditingController = TextEditingController();

TextField(
  controller: _textEditingController,
  decoration: InputDecoration(
    hintText: 'Quantity'
  ),
),

一旦你有了它,你就可以访问和操作特定文本字段的内容。

使用
属性来区分文本字段。
这里有一个例子:

请不要在这里要求投票。提醒人们投票系统是如何工作的是可以的,但特别是要求别人投票/接受你的材料是不被鼓励的。如果你的工作是有用的,它会被有机地提升。你是对的,我理解这一点。不幸的是,有那么多人得到了正确的答案,对此进行了评论,但从未将答案标记为正确,这会导致一些挫折感。是的,我同意这一点。一种可行的方法是在问题下方添加评论提醒,询问他们是否看到了所有答案,或者他们是否仍然被卡住。就我个人而言,我倾向于避免回答来自新客户的问题,或者在有重大澄清或问题修复要求的情况下——在这些情况下,问题可能是要求免费工作,而提出问题时并不希望成为(投票)社区的一员。是的,没错。我已经发表了很多评论,建议新用户如果遵循“如何提问”的指导原则,他们将有更好的机会获得高质量的答案。但它确实经常被忽视,或者人们会恼怒并斥责你,就像几天前发生在我身上的那样。一位主持人删除了这条令人讨厌的评论。明智的话语。干杯