Flutter Base de Données

Le module Flutter permettant de gérer une base de donnée est SQFLITE (SQL Flutter Lite)

1°) Ajout de la dépendance :

Dans le fichier pubspec.yaml, ajouter sous sdk: flutter

Ce qui donne :
dependencies:
  flutter:
    sdk: flutter
  sqflite: ^1.3.2+2
  path_provider: ^1.6.27

2°) Création des répertoires et des fichiers de paramétrage :

Sous lib, créer le répertoire database, dans database créez un fichier database_helper.dart qui va contenir les méthoses utiles pour manipuler les données de la base.

import 'dart:async';
import 'dart:io' as io;

import 'package:flutter_app_db/database/record.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite/sqflite.dart';

class DatabaseHelper {
static final DatabaseHelper _instance = new DatabaseHelper.internal();
factory DatabaseHelper() => _instance;
static Database _db;

Future<Database> get db async {
if (_db != null) return _db;
_db = await initDb();
return _db;
}

DatabaseHelper.internal();

initDb() async {
io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
String path = join(documentsDirectory.path, "main.db");
var theDb = await openDatabase(path, version: 1, onCreate: _onCreate);
return theDb;
}

void _onCreate(Database db, int version) async {
// When creating the db, create the table
await db.execute(
"CREATE TABLE User(id INTEGER PRIMARY KEY, firstname TEXT, lastname TEXT, dob TEXT)");
}

Future<int> saveUser(User user) async {
var dbClient = await db;
int res = await dbClient.insert("User", user.toMap());
return res;
}

Future<List<User>> getUser() async {
var dbClient = await db;
List<Map> list = await dbClient.rawQuery('SELECT * FROM User');
List<User> employees = new List();
for (int i = 0; i < list.length; i++) {
var user =
new User(list[i]["firstname"], list[i]["lastname"], list[i]["dob"]);
user.setUserId(list[i]["id"]);
employees.add(user);
}
print(employees.length);
return employees;
}

Future<int> deleteUsers(User user) async {
var dbClient = await db;

int res =
await dbClient.rawDelete('DELETE FROM User WHERE id = ?', [user.id]);
return res;
}

Future<bool> update(User user) async {
var dbClient = await db;
int res = await dbClient.update("User", user.toMap(),
where: "id = ?", whereArgs: <int>[user.id]);
return res > 0 ? true : false;
}
}

Il est possible de déclarer plusieurs tables dans la base de données

 void _createDb(Database db, int newVersion) async {
 await db.execute('''
   create table $carTable (
    $columnCarId integer primary key autoincrement,
    $columnCarTitle text not null
   )''');
 await db.execute('''
   create table $userTable(
    $userId integer primary key autoincrement,
    $name text not null
   )''');
  }

Dans le répertoire database, créez un fichier record.dart qui contiendra la classe définissant un enregistrement dans la table

class User {

  int id;
  String _firstName;
  String _lastName;
  String _dob;

  User(this._firstName, this._lastName, this._dob);

  User.map(dynamic obj) {
    this._firstName = obj["firstname"];
    this._lastName = obj["lastname"];
    this._dob = obj["dob"];
  }

  String get firstName => _firstName;

  String get lastName => _lastName;

  String get dob => _dob;

  Map<String, dynamic> toMap() {
    var map = new Map<String, dynamic>();
    map["firstname"] = _firstName;
    map["lastname"] = _lastName;
    map["dob"] = _dob;
    return map;
  }
  void setUserId(int id) {
    this.id = id;
  }
}

3°) Appel :

main.dart

avec list view list.dart

4°) Importation / édition d’une base existante :

a) méthode avec Android Studio :

Chargez dans Android Studio l’application qui a une base de données et connectez votre téléphone avec l’application installée.

  • S’assurer qu’ADB est bien fonctionnel
    • Open File -> Project Structure;
    • In Project, select valid Project SDK;
    • In Modules -> myapp_android -> Dependencies, select a valid Module SDK
    • Then close AS, kill adb process in Task Manager, do adb start-server in command line and start AS(cf https://github.com/flutter/flutter/issues/55557
  • Ouvrez Device File Explorer 
    • Allez dans data\data\<<Nom_de_l’application>>
    • Téléchargez la base
    • Editez la via un éditeur
    • Puis Upload

b) Via programmation :

https://github.com/tekartik/sqflite/blob/master/sqflite/doc/opening_asset_db.md

Références :

https://www.developerlibs.com/2018/07/flutter-sqlite-database-example.html

https://www.tutorialspoint.com/flutter/flutter_database_concepts.htm

Articles récents
Commentaires récents
fatima dans Bienvenue !
AdminDroid dans Bienvenue !
fatima dans Bienvenue !
Archives
Catégories
%d blogueurs aiment cette page :