如何更新提高的按钮上的标题压在特定索引的列表视图。生成器

0

的问题

这里是我的代码。

bool isAddedToCart = false;
return ListView.builder(
........
 ElevatedButton (
                        child: isAddedToCart? Text('Added to cart') : Text('Add to cart'),
                         style: ElevatedButton.styleFrom(
                           primary: Constants.primaryColor,
                           onPrimary: Constants.appColor
                         ),
                         onPressed: () async{
                           setState(() {
                             isAddedToCart = !isAddedToCart;
                           });
                           
                         },
                      
                       ),

问题是,如果我点击,升高的按钮的文本的这个按钮有改变,索引只。 但它改变了所有的索引,它是在列表视图。建设者。

任何一个可以有一个解决方案,只有一个按钮在选定的指数来更新与改变名称。

flutter
2021-11-24 05:13:26
2

最好的答案

2

你需要保持的标志 isAddedToCart 每个指数。 你可以实现它通过使用 Map. 事情是这样的:

// class variable scope.
Map<int, bool> isAddedToCartMap = {};

然后用它在你的部件:

ElevatedButton (
    // if isAddedToCartMap[index] not found, use false as default value.
    child: isAddedToCartMap[index]??false ? Text('Added to cart') : Text('Add to cart'),
     style: ElevatedButton.styleFrom(
       primary: Constants.primaryColor,
       onPrimary: Constants.appColor
     ),
     onPressed: () async{
       setState(() {
         isAddedToCartMap[index] = !isAddedToCartMap[index]??false;
       });
       
     },
  
   ),
2021-11-24 05:24:43

它的工作很好,我有它..如何更新相同的按钮"添加到购物车"。 谢谢你的回复@ישו אוהב אותך
H ă ɤ í
1

所有项目都取决于 isAddedToCart 但你需要保存所选择的项目有单独的索引

List<int> _selected_item = List();

 ElevatedButton(
              child: _selected_item.contains(index)
                  ? Text('Added to cart')
                  : Text('Add to cart'),
              style: ElevatedButton.styleFrom(),
              onPressed: () async {
                setState(() {
                  // remove or add index to _selected_item
                  if (_selected_item.contains(index))
                    _selected_item.remove(index);
                  else
                    _selected_item.add(index);
                  print(index);
                });
              },
            )

完整的源代码

ListView.builder(
          itemCount: 5,
          itemBuilder: (context, index) {
            return ElevatedButton(
              child: _selected_item.contains(index)
                  ? Text('Added to cart')
                  : Text('Add to cart'),
              style: ElevatedButton.styleFrom(),
              onPressed: () async {
                setState(() {
                  // remove or add index to _selected_item
                  if (_selected_item.contains(index))
                    _selected_item.remove(index);
                  else
                    _selected_item.add(index);
                  print(index);
                });
              },
            );
          })
2021-11-24 06:01:37

@GH你可以试试这个我希望,它将为你工作
Jahidul Islam

这是超级。 谢谢你.
H ă ɤ í

它是得到默认,当它重新加载。 我们可以做它使用模式,如果是,怎么样?
H ă ɤ í

你应该遵循这个的链接 stackoverflow.com/questions/57380673/...
Jahidul Islam

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................