ListView dans Flutter est une liste déroulante de widgets disposés linéairement. La création d’un widget de liste déroulante dans Flutter est assez simple à l’aide du widget ListView.

En fait, vous pouvez faire défiler la liste déroulante horizontalement ou verticalement en utilisant la propriété scrollDirection.

La caractéristique la plus importante de listview est que c’est un widget déroulant utilisant l’espace disponible sur l’écran. Parfois, nous avons besoin d’utiliser d’autres composants afin d’utiliser moins d’espace.

En fait, une liste peut contenir des champs de texte, des icônes, des images, des cases à cocher etc.

Les types de widgets ListView sont divisés en fonction de leur utilisation. Il y a quatre façons qui sont généralement utilisées pour le faire, qui sont les suivantes :

  • ListView
  • ListView.builder
  • ListView.separated
  • ListView.custom

ListView

C’est la forme par défaut de la classe ListView qui permet aux widgets enfants de défiler. L’utilisation par défaut est uniquement pour les widgets statiques.

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(
              title: Text("Le widget ListView"),
            ),
            body: ListView(
              padding: const EdgeInsets.all(8),
              children: <Widget>[
                Container(
                  height: 50,
                  color: Colors.amber[600],
                  child: const Center(child: Text('Element A')),
                ),
                Container(
                  height: 50,
                  color: Colors.amber[500],
                  child: const Center(child: Text('Element B')),
                ),
                Container(
                  height: 50,
                  color: Colors.amber[100],
                  child: const Center(child: Text('Element C')),
                ),
              ],
            )));
  }
}
widget ListView

À présent, prenons un exemple dans lequel nous aurons à afficher un titre et un long texte. Si le texte dépasse la taille de l’écran, il deviendra automatiquement déroulant.

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(
              title: Text("Le widget ListView"),
            ),
            body: ListView(children: <Widget>[
              Container(
                padding: EdgeInsets.all(15),
                child: Text('Collez le titre ici..', style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold)),
              ),
              Container(
                padding: EdgeInsets.all(15),
                child: Text('''Collez un long texte ici...''', style: TextStyle(fontSize: 16)),
              ),
            ])));
  }
}

Maintenant, remplacez ListVew par Column dans le code et voyez ce qui se passera.

Les propriétés du widget ListView

childrens : Contient une liste de widgets comme valeur et les organise dans un format de liste. Cet attribut est le plus important car il contient les valeurs de la liste.

padding : prend la valeur de la classe EdgetInsets. Cette propriété organise l’ensemble de ListView et lui donne une marge interne.

primary : si cette propriété est définie sur true, seul ce widget ListView peut défiler. Si c’est false, le widget ne pourra pas défiler.

ScrollDirection : permet aux éléments de défiler horizontalement ou verticalement.

ListView.builder

Pour les listes dynamiques (le nombre d’éléments de liste découle du nombre de données), utilisez ListView.builder.

ListView.builder a deux propriétés principales, à savoir itemCount (nombre d’éléments de la liste) et itemBuilder (pour créer des vues à partir d’éléments de liste).

Voici un exemple qui affiche les mois de janvier à décembre.

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: MaListView(),
    );
  }
}

class MaListView extends StatelessWidget {
  final List mois = [
    "Janvier",
    "Février",
    "Mars",
    "Avril",
    "Mei",
    "Juin",
    "Juillet",
    "Aout",
    "Septembre",
    "Octobre",
    "Novembre",
    "Décembre"
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("ListView.builder"),
      ),
      body: ListView.builder(
        itemBuilder: (context, index) {
          return Card(
            child: Padding(
              padding: const EdgeInsets.all(15.0),
              child: Text(mois[index], style: TextStyle(fontSize: 30)),
            ),
          );
        },
        itemCount: mois.length,
      ),
    );
  }
}
ListView.builder

De plus, l’utilisation de ListView est généralement combinée avec le widgetListTile. Ce widget est généralement utilisé pour créer des listes de contacts ou des mises en page qui nécessitent des images et des sous-titres. La structure de ListTile est quelque chose comme ceci :

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: MaListView(),
    );
  }
}

class MaListView extends StatelessWidget {
  final List mois = [
    "Janvier",
    "Février",
    "Mars",
    "Avril",
    "Mai",
    "Juin",
    "Juillet",
    "Août",
    "Septembre",
    "Octobre",
    "Novembre",
    "Décembre"
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("ListView.builder"),
      ),
      body: ListView.builder(
        itemBuilder: (context, index) {
          return Card(
            child: ListTile(
                title: Text(mois[index], style: TextStyle(fontSize: 30)),
                subtitle: Text('Sous-titre ' + mois[index]),
                leading: CircleAvatar(
                  child: Text(
                      mois[index][0], // prendre le premier caractère du texte
                      style: TextStyle(fontSize: 20)),
                )),
          );
        },
        itemCount: mois.length,
      ),
    );
  }
}
ListView

ListView.separated

Similaire à ListView.builder mais avec une légère différence, nous pouvons insérer des widgets entre les éléments de la liste.

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: MaListView(),
    );
  }
}

class MaListView extends StatelessWidget {
  final List mois = [
    "Janvier",
    "Février",
    "Mars",
    "Avril",
    "Mai",
    "Juin",
    "Juillet",
    "Août",
    "Septembre",
    "Octobre",
    "Novembre",
    "Décembre"
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("ListView.builder"),
      ),
      body: ListView.separated(
        itemBuilder: (context, index) {
          return Card(
            child: Padding(
              padding: const EdgeInsets.all(15.0),
              child: Text(mois[index], style: TextStyle(fontSize: 30)),
            ),
          );
        },
        separatorBuilder: (context, position) {
          return Container(
            color: Colors.greenAccent,
            child: Text('Un exemple de séparateur',
                style: TextStyle(fontSize: 20)),
          );
        },
        itemCount: mois.length,
      ),
    );
  }
}

Le choix du bon widget est très importante dans le processus de développement d’une application.

Catégories : Flutter

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *