Nouveau : Datasets open source gratuits disponibles !Decouvrir →
💙
Debutant 25 min Flutter

Debuter avec Flutter

Pourquoi Flutter ?

Flutter est une plateforme d'interface utilisateur moderne, open source, créée par Google. Elle permet de développer des applications pour iOS, Android, Web, Desktop et VR/AR en utilisant un seul codebase. Dans le contexte professionnel, Flutter offre une solution complète pour les développeurs qui cherchent à créer des applications performantes et uniques pour leurs clients.

Un cas d'usage concret est la création d'une application de messagerie mobile. Avec Flutter, vous pouvez développer une interface utilisateur fluide et personnalisée pour iOS et Android en utilisant le même codebase, ce qui accélère le processus de développement et réduit les coûts.

Prerequis

  • Connaissances en programmation : Java ou Kotlin pour Android, Swift pour iOS.
  • Connaissance de Dart (langage utilisé par Flutter) : pas obligatoire, mais utile pour comprendre le code source et les packages tiers.
  • Outils à installer :

Concepts fondamentaux

1. Widgets

Les widgets sont les éléments de base de l'interface utilisateur en Flutter. Ils décrivent ce que vous souhaitez afficher.

// Import Flutter Material package
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('Mon Application')),
        body: Center(child: Text('Bonjour Flutter !')),
      ),
    );
  }
}

2. State Management

La gestion de l'état est cruciale dans les applications Flutter, surtout pour ceux qui ont des états complexes.

// Import Flutter packages
import 'package:flutter/material.dart';

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Mon Application')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Vous avez tapé sur ce bouton :'),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

3. Routing

Le routage permet de naviguer entre différentes pages dans votre application.

// Import Flutter packages
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
      routes: {
        '/second': (context) => SecondPage(),
      },
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Mon Application')),
      body: Center(
        child: ElevatedButton(
          onPressed: () => Navigator.pushNamed(context, '/second'),
          child: Text('Aller à la deuxième page'),
        ),
      ),
    );
  }
}

class SecondPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Deuxième Page')),
      body: Center(child: Text('Bienvenue sur la deuxième page !')),
    );
  }
}

Mise en pratique : projet fil rouge

Mini-projet : Un gestionnaire de tâches simples

Étape 1 : Créer un nouveau projet Flutter

flutter create task_manager
cd task_manager

Étape 2 : Ajouter une liste de tâches et un bouton pour ajouter des tâches

// Import Flutter packages
import 'package:flutter/material.dart';

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

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

class TaskManager extends StatefulWidget {
  @override
  _TaskManagerState createState() => _TaskManagerState();
}

class _TaskManagerState extends State<TaskManager> {
  List<String> _tasks = [];

  void _addTask(String task) {
    setState(() {
      _tasks.add(task);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Gestionnaire de Tâches')),
      body: Column(
        children: <Widget>[
          Expanded(
            child: ListView.builder(
              itemCount: _tasks.length,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text(_tasks[index]),
                );
              },
            ),
          ),
          Divider(),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Row(
              children: <Widget>[
                Expanded(
                  child: TextField(
                    decoration: InputDecoration(hintText: 'Ajouter une tâche'),
                  ),
                ),
                IconButton(
                  icon: Icon(Icons.add),
                  onPressed: () {
                    _addTask((context as ScaffoldState).formKey.currentState!.value['task']);
                  },
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

Mise en pratique : projet fil rouge - Conclusion

Dans ce tutoriel, nous avons appris les concepts fondamentaux de Flutter et avons construit un mini-projet complet : un gestionnaire de tâches. Nous avons utilisé des widgets, la gestion de l'état, et le routage pour créer une application simple et fonctionnelle.

Erreurs frequentes et debugging

1. Erreur : The named parameter 'initialValue' isn't defined

// ❌ Mauvais
TextField(
  initialValue: _task,
);
dart
// ✅ Correct
TextField(
  controller: TextEditingController(text: _task),
);

2. Erreur : type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String'

// ❌ Mauvais
_formKey.currentState!.value['task'];
dart
// ✅ Correct
_formKey.currentState!.value['task'] as String;

3. Erreur : setState() called with invalid argument: Expected a int, got null

// ❌ Mauvais
setState(() {
  _counter = null;
});
dart
// ✅ Correct
setState(() {
  if (_counter != null) {
    _counter++;
  }
});

Pour aller plus loin

  1. State Management avancée : Explorer les packages comme provider, flutter_bloc ou riverpod pour une gestion d'état plus complexe.
  2. Tests unitaires et widget tests : Apprendre à écrire des tests pour votre application Flutter.
  3. Navigation avec go_router : Pour une navigation plus avancée et personnalisée.

Défi pratique

Créer une application simple de "To-Do List" qui permet d'ajouter, supprimer et marquer comme terminée les tâches. Utilisez la gestion d'état avec provider.

Besoin d'aide sur Flutter ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Qu'est-ce que Flutter?
Flutter est un framework open source créé par Google pour développer des applications multiplateformes, tanto pour iOS et Android qu'pour le web et d'autres appareils.
Comment installer Flutter sur mon ordinateur?
Pour installer Flutter sur Windows, Mac ou Linux, suivez les instructions fournies sur le site officiel de Flutter. Cela comprend l'installation du SDK Flutter et des outils nécessaires tels que Dart.
Quelles sont les principales fonctionnalités de Flutter?
Flutter offre une variété de fonctionnalités telles que le développement d'interfaces utilisateur réactives, la prise en charge de plusieurs appareils (iOS, Android, web, Windows, Mac et Linux), l'utilisation de widgets personnalisables et la possibilité de créer des applications mobiles natives avec un seul codebase.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.