Query su Flutter ListView

Sep 18 2020

Sto imparando a conoscere le visualizzazioni di elenco e ho i due file di freccette di seguito, uno che utilizza il generatore ListView e l'altro Listview. Entrambi producono lo stesso risultato. Ho seguito la guida listview:https://pusher.com/tutorials/flutter-listviews

Di seguito sono riportate le mie domande su listview:

  1. Capisco che nel mondo reale i dati proverranno da un'API e volevo sapere quale delle seguenti opzioni verrà utilizzata e perché?
  2. Ho ragione a capire che qualsiasi widget come container, text può essere figlio di un listView?
  3. Nell'opzione 1 il figlio ListView è una funzione _buildListItemsFromLocation (). È una buona pratica o dovremmo spostare il codice _buildListItemsFromLocation () in un file dart separato?

Opzione 1: ListView

class LocationListView extends StatefulWidget {
  @override
  _LocationListViewState createState() => _LocationListViewState();
}

class _LocationListViewState extends State<LocationListView> {

  List<Container> _buildListItemsFromLocation() {
    int index = 0;
    return locationData.map((location) {
      var container = Container(
          child: Row(
            children: [
              Container(
                margin: EdgeInsets.all(10.0),
                child: Image(
                  image: AssetImage(location.imagePath),
                  width: 100.0,
                  height: 100.0,
                  fit: BoxFit.cover,
                ),
              ),
              Container(
                child: Text(location.name),
              )
            ],
          ),
      );
      return container;
    }).toList();
  }

  @override
  Widget build(BuildContext context) {
    return ListView(
      children: _buildListItemsFromLocation(),
    );
  }
}


Opzione 2: ListView.builder

class LocationList extends StatefulWidget {
  @override
  _LocationListState createState() => _LocationListState();
}

class _LocationListState extends State<LocationList> {

  @override
  Widget build(BuildContext context) {
        return ListView.builder(
          itemCount: locationData.length,
          itemBuilder: (context, index) {
            
            return Row(
              children: [
                Container(
                  margin: EdgeInsets.all(10.0),
                  child: Image(
                    image: AssetImage(locationData[index].imagePath),
                    width: 100.0,
                    height: 100.0,
                    fit: BoxFit.cover,
                  ),
                ),
                Container(
                  child: Text(locationData[index].name),
                )
              ],
            );
        }
        );
      }
  }


Risposte

2 Souvenir Sep 18 2020 at 09:04
  1. Uso il metodo 2 perché è facile da capire e segue l'ordine dall'alto verso il basso, quindi è facile leggere il codice.
  2. Qualsiasi widget può essere figlio di un altro widget. A seconda di come e per cosa li usi.
  3. Molte persone dicono che dovremmo creare un'altra classe e poi chiamarla di nuovo anziché dividerla come sopra perché influisce sulle prestazioni dell'app. In caso di utilizzo molto ma solo in una schermata, è possibile utilizzare lo stesso metodo del proprio. La risposta potrebbe essere sbagliata, non avere nulla da darti.
1 Autocrab Sep 18 2020 at 09:01
  1. Se non conosci in anticipo la dimensione dell'elenco, crealo tramite builder

1.1 Se crei un elenco e sai che il conteggio degli elementi non sarà più di dieci o dodici, puoi creare ListViewda esempio1

  1. Qualsiasi widget può essere in formato ListView. Per comodità c'è il widget chiamato ListTile, che contiene widget iniziale , finale, titolo e sottotitoli
  2. è ok