【问题标题】:How to pass data from textfield of listview elements in flutter?如何在颤动中从列表视图元素的文本字段传递数据?
【发布时间】:2020-01-02 04:14:12
【问题描述】:

我想使用 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]);
                    },
                  ),
                ],
              ),
            );
          });
        },
      ),

但是当我为文本字段定义控制器时,它会反映在列表视图的所有字段上。有什么方法可以在列表的各个文本字段上输入自定义数量并将它们传递到购物车?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

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

    现在,当创建 row 时,从您的产品中传递 unique 的值作为 key

    【讨论】:

      【解决方案2】:

      是的,解决此问题的最简单方法之一是将图块提取到单独的 StatefulWidget 中。然后,这个小部件可以拥有自己的控制器作为状态,并且按钮可以无缝访问其文本。您还将获得可读性。

      【讨论】:

        【解决方案3】:

        使用key 属性来区分文本字段。 这是一个例子:Using Keys in Flutter

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

          • 请不要在这里拉票。提醒人们投票系统是如何运作的是可以的,但不鼓励特别要求某人支持/接受您的材料。如果你的工作是有用的,它会得到相当有机的支持。
          • 你说得对,我明白这一点。不幸的是,得到正确答案、发表评论但从未将答案标记为正确的人数会导致一些挫败感。
          • 是的,我同意这一点。一种可行的方法是在问题下方添加评论提醒,询问他们是否已经看到所有答案,或者他们是否仍然卡住。就我个人而言,我倾向于避免回答来自新帐户的问题,或者对于澄清或问题修复有重大要求的问题 - 在这些情况下,问题可能是免费工作的请求,并且提出问题并不想成为其中的一部分(投票)社区。​​span>
          • 是的,完全正确。我做了很多 cmets 建议新用户如果他们遵循“如何提问”指南,他们将有更好的机会获得高质量的答案。但它确实经常被忽视,或者人们生气并告诉你,就像我几天前发生的那样。版主删除了讨厌的评论。
          • 明智的话。干杯!
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-25
          • 2019-11-17
          • 2021-09-26
          • 1970-01-01
          • 2021-07-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多