Fermer

mai 27, 2024

Premiers pas avec Flutter GetX – Gestion de l’état

Premiers pas avec Flutter GetX – Gestion de l’état


Introduction

Lors du démarrage d’une nouvelle application Flutter, il est crucial de choisir la bonne approche de gestion de l’état. Ce blog vise à simplifier cette décision pour vous. Dans ce tutoriel sur la gestion de l’état Flutter avec GetX, je vais vous présenter GetX, un framework Flutter robuste.

ObtenirX

La gestion des états facilite le transfert de données au sein d’une application, déclenchant des mises à jour d’état et reconstruisant l’interface en conséquence. Ce processus est particulièrement critique dans les applications complexes, où les mises à jour d’état inefficaces peuvent devenir coûteuses. Flutter propose des widgets avec état pour gérer l’état, mais ils comportent certaines limitations et sont coûteux à gérer en termes de ressources, de performances et de consommation de mémoire.

Pour remédier à ces limitations, nous pouvons utiliser GetX pour la gestion des états dans Flutter. GetX est une solution robuste et légère qui propose également les solutions ci-dessous :

– Gestion de l’État
– Injection de dépendances
– Gestion des itinéraires

Pourquoi GetX

Voyons pourquoi GetX est essentiel pour la gestion de l’état dans les applications Flutter. GetX améliore les applications Flutter dans trois domaines clés :

  1. Performance: GetX optimise la consommation des ressources pour améliorer les performances des applications. Il évite d’utiliser ChangeNotifier ou Streams, se concentrant plutôt sur des alternatives plus efficaces.
  2. Organisation et lisibilité: GetX sépare la vue de la logique métier, offrant une syntaxe claire et simple qui améliore la lisibilité et l’organisation du code.
  3. Productivité: Grâce à la syntaxe simple de GetX, les développeurs peuvent facilement implémenter la gestion des états, même avec du code complexe. Cette simplicité réduit le temps de développement et augmente la productivité, garantissant des performances maximales.

Installation

flutter pub add get

Application Counter utilisant Getx State Management

Dans ce tutoriel, je vais prendre l’exemple d’une application de compteur en séparant la logique de l’interface utilisateur et la logique métier à l’aide d’un contrôleur et du Obx widget étape par étape.

class CounterRepository {
  CounterRepository();

  final Rx count = 0.obs;
  final int _value = 1;

  void increment() => count.value += _value;

  void decrement() => count.value -= _value; 
}

Get.lazyPut() vous permet d’initialiser votre contrôleur lorsque cela est nécessaire, par exemple lorsque votre écran devient visible pour l’utilisateur, et supprime le contrôleur lorsque votre écran ne fait plus partie de la pile de widgets.

void main() {
  // Creating an instance of CounterRepository for dependency injection via Getx
  Get.lazyPut(() => CounterRepository());
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'Getx Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const CounterScreen(),
    );
  }
}

Création d’un écran de compteur contenant un texte numérique, un bouton pour naviguer vers un autre écran et un bouton flottant pour contrôler le comportement d’incrémentation. Le widget texte est enveloppé dans Obx, lui permettant de récupérer la valeur de la variable observable. Sans Obx, la valeur resterait inchangée. La valeur d’incrément est initialisée dans le contrôleur à 0 qui sera la valeur initiale affichée au moment de l’exécution.

class CounterScreen extends StatelessWidget {
  const CounterScreen({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final CounterRepository repo = Get.find();

    return Scaffold(
      appBar: AppBar(
        title: const Text('Counter'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () => {Get.to(() =>SecondScreen())},
              child: const Text('Open New page'),
            ),
            const SizedBox(height: 16),
            Obx(
              () => Text(
                '${repo.count.value}',
                style: Theme.of(context).textTheme.headlineMedium,
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed:repo.increment,
        child: const Icon(Icons.add),
      ),
    );
  }
}

Le deuxième écran est parcouru lorsque nous cliquons sur le bouton utilisant la fonction de gestion d’itinéraire de Getx Accéder à cette fonction fonctionne de manière similaire à Navigateur.de mais sans avoir à utiliser le contexte. Ici aussi, le widget texte est intégré à Obx, ce qui lui permet d’écouter les modifications et de les mettre à jour en conséquence. Puisque nous utilisons le même objet de Contre-Repo en les obtenant de la gestion des dépendances getx, les données d’incrémentation seront également conservées dans SecondScreen. Nous pouvons utiliser la fonction de décrémentation pour apporter des modifications à la valeur réelle en utilisant l’instance de CounterController fournie par Getx en utilisant Obtenir.find().

class SecondScreen extends StatelessWidget {
  const SecondScreen({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final CounterRepository repo = Get.find();

    return Scaffold(
      appBar: AppBar(
        title: const Text('Counter'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () => {Get.back()},
              child: const Text('Go to previous Screen'),
            ),
            const SizedBox(height: 16),
            Obx(
              () => Text(
                '${repo.count.value}',
                style: Theme.of(context).textTheme.headlineMedium,
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed:repo.decrement,
        child: const Icon(Icons.remove),
      ),
    );
  }
}

capture d'écran

Principales caractéristiques:

    • Variables réactives (Rx) : Transformez facilement des variables en observables à l’aide de .obs.
    • Widget Obx : Mises à jour réactives de l’interface utilisateur avec un minimum de code.
    • Ouvriers: Gérez les tâches asynchrones, notamment les anti-rebonds, les intervalles et les événements ponctuels.
    • Gestionnaire d’état simple (GetBuilder) : Solution légère pour gérer efficacement plusieurs mises à jour d’état.
    • État Mixin : Une approche rationalisée de la gestion de l’état avec différents statuts (chargement, succès, erreur).
  • Avantages :

    • Haute performance: Des algorithmes et des optimisations intelligents minimisent les reconstructions et garantissent l’efficacité.
    • Contrôle granulaire : Ciblez précisément les widgets qui sont mis à jour, évitant ainsi les reconstructions inutiles.
    • Facile à apprendre: Une syntaxe intuitive et des concepts clairs rendent la gestion des états accessible.
    • Poids léger: Faible empreinte mémoire et dépendances minimales.
    • Solution globale : Gère la gestion de l’état, la navigation et l’injection de dépendances.

Ressources

  • La documentation officielle peut être trouvée ici – Lien
  • Code source complet ici – Lien
  • Le pub Getx peut être trouvé ici – Lien

Conclusion

En conclusion, GetX se présente comme une bibliothèque polyvalente et puissante au sein de l’écosystème Flutter, offrant des solutions rationalisées pour la gestion des états, l’injection de dépendances et la gestion des routes. Sa syntaxe intuitive, ses performances efficaces et ses capacités robustes en font un choix privilégié pour les développeurs cherchant à améliorer leurs applications Flutter. Avec GetX, les développeurs peuvent obtenir une productivité accrue, une organisation du code améliorée et des performances optimisées. Alors que Flutter continue d’évoluer, GetX reste un atout précieux, permettant aux développeurs de créer des applications transparentes et réactives sur une variété de plates-formes. Que vous soyez un développeur chevronné ou nouveau sur Flutter, l’exploration des fonctionnalités de GetX peut ouvrir un monde de possibilités pour votre parcours de développement d’applications.

VOUS TROUVEZ CECI UTILE ? PARTAGEZ-LE






Source link