Requêtes sur Flutter ListView
Sep 18 2020
Je suis en train d'apprendre les listes de vues et j'ai les deux fichiers de fléchettes ci-dessous, l'un utilisant le générateur ListView et l'autre Listview. Les deux produisent le même résultat. J'ai suivi le guide listview:https://pusher.com/tutorials/flutter-listviews
Voici mes requêtes sur listview:
- Je comprends que dans le monde réel les données proviendront d'une API et je voulais savoir laquelle des options ci-dessous sera utilisée et pourquoi?
- Ai-je raison de comprendre que tout widget comme un conteneur, le texte peut être enfant de dans une listView?
- Dans l'option 1, l'enfant ListView est une fonction _buildListItemsFromLocation (). Est-ce une bonne pratique ou devrions-nous déplacer le code _buildListItemsFromLocation () vers un fichier de fléchettes séparé?
Option 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(),
);
}
}
Option 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),
)
],
);
}
);
}
}
Réponses
2 Souvenir Sep 18 2020 at 09:04
- J'utilise la méthode 2 car elle est facile à comprendre et suit l'ordre de haut en bas, donc il est facile de lire le code.
- Tout widget peut être un enfant d'un autre widget. Selon comment et pour quoi vous les utilisez.
- Beaucoup de gens disent que nous devrions créer une autre classe, puis la rappeler plutôt que la scinder comme ci-dessus, car cela affecte les performances de l'application. Si vous en utilisez beaucoup mais sur un seul écran, vous pouvez utiliser la même méthode que la vôtre. La réponse peut être erronée, n'avez rien à vous donner.
1 Autocrab Sep 18 2020 at 09:01
- Si vous ne connaissez pas à l'avance la taille de la liste, créez-la via le générateur
1.1 Si vous créez une liste et que vous savez que le nombre d'éléments ne sera pas supérieur à dix ou douze, vous pouvez créer à ListViewpartir de l'exemple1
- N'importe quel widget peut être inclus
ListView. Pour plus de commodité, il existe un widget appeléListTile, qui contient des widgets de début, de fin, de titre et de sous-titre - c'est ok