Come Aggiornare Elevato titolo di Button sul Preme, in Particolare, l'indice di ListView.generatore

0

Domanda

Ecco il mio codice.

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

Il problema è che se clicco su che ha elevato il Pulsante il testo del pulsante per modificare quell'indice solo. Ma sta cambiando in tutto l'indice che sono in listview.builder.

Uno può avere una soluzione per questo che un solo pulsante selezionato indice di aggiornamento con il nome cambiato.

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

Migliore risposta

2

È necessario mantenere la bandiera isAddedToCart per ogni indice. È possibile ottenere utilizzando un Map. Qualcosa di simile a questo:

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

quindi utilizzare nel vostro widget:

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

funziona benissimo, ho un dout.. Come aggiornare lo stesso pulsante 'Aggiungi al carrello' di nuovo. grazie per la risposta @ישו אוהב אותך
H ă ɤ í
1

Tutti gli articoli sono stati dipende isAddedToCart ma Avete bisogno di memorizzare l'elemento selezionato con separata di indicizzazione

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

il codice sorgente completo

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 si può provare questo spero, che funzionerà anche per te
Jahidul Islam

che è stato super. grazie.
H ă ɤ í

era di arrivare al default quando è in ricarica. Possiamo farlo utilizzando il modello, se sì, come?
H ă ɤ í

Jahidul Islam

In altre lingue

Questa pagina è in altre lingue

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