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:
- Capisco che nel mondo reale i dati proverranno da un'API e volevo sapere quale delle seguenti opzioni verrà utilizzata e perché?
- Ho ragione a capire che qualsiasi widget come container, text può essere figlio di un listView?
- 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
- Uso il metodo 2 perché è facile da capire e segue l'ordine dall'alto verso il basso, quindi è facile leggere il codice.
- Qualsiasi widget può essere figlio di un altro widget. A seconda di come e per cosa li usi.
- 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
- 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
- Qualsiasi widget può essere in formato
ListView. Per comodità c'è il widget chiamatoListTile, che contiene widget iniziale , finale, titolo e sottotitoli - è ok