Base de données dans Flutter
Base de données dans Flutter Très importantes dans une application mobile, les bases de données nous permettent de stocker des informations sans avoir systématiquement besoin d’une connexion internet. En clair, les bases de données offrent la possibilité de stocker des…

Base de données dans Flutter
Très importantes dans une application mobile, les bases de données nous permettent de stocker des informations sans avoir systématiquement besoin d’une connexion internet. En clair, les bases de données offrent la possibilité de stocker des actions faites par l’utilisateur. Dans notre app Flutter, nous allons utiliser le super plugin sqflite.
Sqflite prend en charge à la fois Android et iOS, ce qui est parfait pour nous. Comme toujours, nous ne verrons que les bases dans cet article, largement suffisantes pour notre exercice.
Créer une simple Base de données dans Flutter
Dans Flutter, toujours le même principe; on ajoute d’abord le package qui va nous servir. Cette fois-ci, nous allons utiliser le plugin sqflite que l’on trouve dans pub.dartlang.org.
Dans un premier temps, ajoutez la dépendance dans votre fichier pubspec.yaml et faites un get packages.
|
1
|
sqflite: ^1.1.0
|
Dans ce premier exemple, nous créons une base de données dans Flutter « festival », qui a une table Artiste.
Très simple pour l’instant ! Nous avons une fonction pour initialiser la base de données, créer notre table, et deux autres fonctions pour ajouter un artiste et compter le nombre d’entrées en base.
Bien entendu, nous allons améliorer tout cela par la suite.
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
import ‘package:flutter/material.dart’;
import ‘package:path/path.dart’; void main() => runApp(MaterialApp(home: MyApp())); class MyApp extends StatelessWidget { class MyHomePage extends StatefulWidget { class _MyHomePageState extends State<MyHomePage> { int countNb = 0; @override Future<void> _openCreateDatabase() async { var databasesPath = await getDatabasesPath(); database = await openDatabase(path, version: 1, _addArtisteDatabase() async { _getArtisteDatabase() async { @override |
Travailler avec des Object et des Helper
Maintenant, nous allons séparer un peu nos éléments. Le premier exemple fonctionne très bien si l’on a uniquement une table utile dans une seule vue. En revanche, si l’on souhaite avoir une base de données plus importante avec plusieurs tables, le mieux reste alors de structurer notre code.
Nous allons ainsi créer un object Artiste, et une class databaseHelper pour notre base de données dans Flutter. On pourrait imaginer que l’on récupère une liste d’artistes depuis un flux json et qu’on souhaite le sauvegarder dans une base de données interne de notre application mobile.
Notre object Artiste
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
class Artiste {
int _id; Artiste(String image, String title) { Artiste.map(dynamic obj) { int get id => _id; Map<String, dynamic> toMap() { return map; Artiste.fromMap(Map<String, dynamic> map) { |
Une fois notre class Artiste créée, nous allons faire notre class databaseHelper
Notre class est très basique : on créé une fonction : init, create, close
Dans la fonction create, on ajoutera toutes nos tables, si on en a plusieurs.
Ensuite, nous créons nos fonctions spécifiques à notre table Artiste : addArtiste, getAllArtistes, getArtiste, countArtistes, deleteArtiste, updateArtiste.
On créera par la suite toutes ces fonctions pour chaque table dans notre helper.
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
import ‘dart:async’;
import ‘package:sqflite/sqflite.dart’; import ‘artistes.dart’; class DatabaseHelper { static final DatabaseHelper _instance = new DatabaseHelper.internal(); factory DatabaseHelper() => _instance; final String tableArtiste = ‘artisteTable’; static Database _db; DatabaseHelper.internal(); Future<Database> get db async { return _db; initDb() async { var db = await openDatabase(path, version: 1, onCreate: _onCreate); void _onCreate(Database db, int newVersion) async { /* Future close() async { // ARTISTES // Future<int> saveArtiste(Artiste artiste) async { return result; Future<List> getAllArtistes() async { return result.toList(); Future<int> getCount() async { Future<Artiste> getArtiste(int id) async { if (result.length > 0) { return null; Future<int> deleteArtiste(int id) async { Future<int> updateArtiste(Artiste artiste) async { } |
Pour finir, il nous suffit d’importer nos class pour les utiliser dans le main.
|
1
2 |
import ‘artistes.dart’;
import ‘database_helper.dart’; |
Voilà pour un exemple de fonction.
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
List artistesList;
var db; int count = 0; @override db = new DatabaseHelper(); @protected _addArtiste() async{ _updateArtiste(Artiste artiste) async{ _deleteArtiste(int idArtiste) async{ _getAllArtistes() async{ _getArtistes(int idArtiste) async{ _getCountArtistes() async{ } |
