Utiliser GridView dans Flutter
Utiliser GridView dans Flutter
-
Objectif
- Connaitre le contrôle GridView de Flutter.
- Apprendre à afficher des éléments dans un GridView dans Flutter
-
Qu’est-ce que un GridView dans Flutter?
- Dans Flutter, un GridView est un widget qui affiche une liste d’éléments sous forme de tableau 2D. En termes simples, les éléments sont présentés sous forme de tableau.
- Un GridView est un élément de contrôle graphique utilisé dans flutterpour afficher les éléments sous forme de tableau . Dans cette section, nous allons apprendre à afficher des éléments dans une vue de grille dans l’application Flutter.
- Le GridView est utilisé pour afficher les données en lignes et en colonnes.
- Gridview en flutter est un widget utilisé pour afficher d’autres widgets en lignes et en colonnes. Par exemple, en utilisant la Gridview, nous pouvons afficher les produits en 2 dimensions dans les applications de commerce électronique.
- La vue en grille peut être implémentée de différentes manières, qui sont indiquées ci-dessous :
- GridView.count()
- GridView.builder()
- GridView.custom()
- GridView.extent()
-
GridView.count
GridView.count
est la disposition de GridView la plus couramment utilisée. Parce que nous connaissons déjà la taille de la grille. Il permet aux développeurs de spécifier le nombre fixe de lignes et de colonnes .- La propriété essentielle de GridView est prise dans la grille.
SliverGridDelegateWithFixedCrossAxis
Elle est connue de la même manière quecrossAxisCount
. - Le
GriedView.count()
contient les propriétés suivantes : crossAxisCount
: Il est utilisé pour spécifier le nombre de colonnes dans une vue de grille.crossAxisSpacing
: Il est utilisé pour spécifier le nombre de pixels entre chaque widget enfant répertorié dans l’axe transversal.mainAxisSpacing
: Il est utilisé pour spécifier le nombre de pixels entre chaque widget enfant listé dans l’axe principal.padding(EdgeInsetsGeometry)
: Il est utilisé pour spécifier l’espace autour de toute la liste des widgets.scrollDirection
: il est utilisé pour spécifier la direction dans laquelle les éléments défilent sur GridView. Par défaut, il défile dans le sens vertical.reverse
: Si c’est vrai, cela inversera la liste dans la direction opposée le long de l’axe principal.physique
: Il est utilisé pour déterminer comment la liste se comporte lorsque l’utilisateur atteint la fin ou le début du widget lors du défilement.shrinkWrap
: si elle est fausse, la liste déroulante prend plus d’espace pour défiler dans le sens du défilement. Ce n’est pas bon car cela gaspille de la mémoire et réduit les performances de l’application. Par conséquent, nous allons envelopper nos widgets enfants à l’aide de shrinkWrap en le définissant sur true pour éviter les fuites de mémoire lors du défilement.-
Exemple
- Comme vous le voyez dans le code ci-contre, on voit rapidement ce qui se passe si le paramètre nommé,
padding
, est commenté dans l’exemple simple. - Il y avait une «
bordure
» d’environ 20 pixels logiques entourant les petites cases vertes. - Notez que les « pixels logiques » ont à peu près la même taille visuelle sur tous les appareils, tandis que les « pixels physiques » correspondent à la taille des pixels matériels réels sur l’appareil.
- Espacement entre les éléments
- Pour définir l’espacement entre les éléments le long de l’axe principal ou de l’axe transversal, définissez les valeurs doubles requises pour la propriété
mainAxisSpacing
et la propriétécrossAxisSpacing
respectivement. - La valeur par défaut de
mainAxisSpacing
etcrossAxisSpacing
est zéro. Par conséquent, si nous ne définissons pas ces valeurs, il n’y aurait pas d’espace entre les éléments le long des axes horizontal et vertical. -
Définissez le paramètre nommé,
reverse
, sur « true » -
Définissez le paramètre nommé,
physics
- Le paramètre suivant que nous examinerons s’appelle
physics
. Il détermine comment la liste déroulante se comportera lorsque l’utilisateur atteindra le début ou la fin du défilement et comment elle se comportera lorsque l’utilisateur « c’est parti », et elle continuera à défiler pendant un certain temps. - Le premier émule le comportement observé dans les iPhones d’Apple,
BouncingScrollPhysics
. - La deuxième classe,
ClampingScrollPhysics
, donne la lueur d’indication de sur-défilement – généralement vue sur les téléphones Android. - Le troisième démontré s’appelle
NeverScrollableScrollPhysics
, désactivant complètement la capacité de défilement. - Le dernier est
AlwaysScrollableScrollPhysics
. Il fournit le comportement approprié en fonction de la plate-forme : Android ou iOS. -
GridView.builder
- Pour créer une grille avec un nombre important (ou infini) d’enfants, utilisez leconstructeur
GridView.builder
avec unSliverGridDelegateWithFixedCrossAxisCount
ouSliverGridDelegateWithMaxCrossAxisExtent
pour legridDelegate
. - Utilisez ce constructeur si vous souhaitez créer une grille dynamiquement ou avec des données de l’API (backend).
- Ce constructeur convient si nous ne connaissons pas le nombre d’enfants. Nous pouvons utiliser un SliverGridDelegateWithFixedCrossAxisCount ou un SliverGridDelegateWithMaxCrossAxisExtent pour le gr i dDelegate .
- Pour créer GridView.builder(), appelez le constructeur et fournissez les propriétés requises. Il a deux propriétés obligatoires
itemBuilder
etgridDelegate
. -
GridView.extent()
- Utilisez ce constructeur pour créer une vue de grille avec des enfants ayant une valeur d’étendue d’axe transversal personnalisée. Pour le constructeur
GridView.extent()
, nous devons définir le maxCrossAxisExtent pour les « child ». Il utilise un SliverGridDelegateWithMaxCrossAxisExtent comme gridDelegate . - Pour créer un
GridView.extent()
, appelez le constructeur et fournissez les propriétés requises. La seule propriété requise pour ce constructeur est maxCrossAxisExtent ( avec le child tile ). Puisque nous devons définir la largeur de la tuile, le nombre de colonnes dans une rangée changera en fonction de la largeur de l’appareil. -
Application
- Terminer le code ci-dessous pour obtenir le résultat donné par la figure suivante:
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: GridView.count(
primary: false,
padding: const EdgeInsets.all(20),
crossAxisSpacing: 20,
mainAxisSpacing: 20,
crossAxisCount: 4,
children: [
Container(
padding: const EdgeInsets.all(8),
child: const Text('1'),
color: Colors.teal[100],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('2'),
color: Colors.teal[200],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('3'),
color: Colors.teal[300],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('4'),
color: Colors.teal[400],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('5'),
color: Colors.teal[500],
),
Container(
padding: const EdgeInsets.all(8),
child: const Text('6'),
color: Colors.teal[600],
),
],
)),
);
}
}
........
return Center(
child: GridView.count(
primary: false,
reverse: true,
crossAxisCount: 3,
mainAxisSpacing: 10,
crossAxisSpacing: 10,
padding: const EdgeInsets.all(20),
.........
Il prend dans un objet de classe de type, ScrollPhysics
.
Actuellement, il existe quatre sous-classes de la classe, ScrollPhysics
:
Code
Résultat