Belirli bir ListView dizinine Basıldığında Yükseltilmiş Düğme başlığı nasıl güncellenir.kuran

0

Soru

İşte kodum.

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;
                           });
                           
                         },
                      
                       ),

Sorun şu ki, bu yükseltilmiş Düğmeye tıklarsam, bu düğmenin metni yalnızca bu dizinde değişmelidir. Ancak listview içindeki tüm dizinlerde değişiyor.kuran.

Herhangi bir seçilen dizin üzerinde tek bir düğme değişti adı ile update etmek için bir çözüm olabilir.

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

En iyi cevabı

2

Bayrak sende kalmalı. isAddedToCart her dizin için. Bunu kullanarak başarabilirsiniz Map. Bunun gibi bir şey:

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

ardından widget'ınızda kullanın:

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

iyi çalışıyor, işim var.. Aynı düğmeyi tekrar 'Sepete ekle' olarak nasıl güncelleyebilirim. thanks for reply @ישו אוהב אותך
H ă ɤ í
1

Tüm öğeler şunlara bağlıydı isAddedToCart ancak seçilen öğeyi ayrı indeksleme ile saklamanız gerekir

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);
                });
              },
            )

tam kaynak kodu

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 bunu deneyebilirsin Umarım, senin için işe yarar
Jahidul Islam

bu süper oldu. teşekkür ederim.
H ă ɤ í

yeniden yüklenirken varsayılana ulaşıyordu. Modeli kullanarak yapabilir miyiz, eğer evet ise, nasıl?
H ă ɤ í

bu bağlantıyı takip etmelisiniz stackoverflow.com/questions/57380673/...
Jahidul Islam

Diğer dillerde

Bu sayfa diğer dillerde

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