Intoduzione a Drift in Flutter

Mattepuffo's logo
Intoduzione a Drift in Flutter

Intoduzione a Drift in Flutter

Drift è una libreria per Dart e Flutter per la gestione di un database locale; all'interno la libreria usa SQLite

In questo articolo vediamo una introduzione al suo utilizzo.

Cominciamo con l'installare queste dipendenze:

dependencies:
  drift: ^2.2.0
  sqlite3_flutter_libs: ^0.5.0
  path_provider: ^2.0.0
  path: ^1.8.2

dev_dependencies:
  drift_dev: ^2.2.0+1
  build_runner: ^2.2.1

A questo punto create un file Dart chiamandolo come volete (io l'ho chiamato generadb.dart); qui dentro ci metteremo il codice che genererà il db e le varie classi di cui ha bisogno:

import 'dart:io';
import 'package:path/path.dart' as p;
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:path_provider/path_provider.dart';

part 'generadb.g.dart';

class Persone extends Table {
  IntColumn get id => integer().autoIncrement()();

  TextColumn get nome => text()();
}

@DriftDatabase(tables: [Persone])
class GestioneDb extends _$GestioneDb {
  GestioneDb() : super(_openConnection());

  @override
  int get schemaVersion => 1;
}

LazyDatabase _openConnection() {
  return LazyDatabase(() async {
    final dbFolder = await getApplicationDocumentsDirectory();
    final file = File(p.join(dbFolder.path, 'db.sqlite'));
    return NativeDatabase(file);
  });
}

L'IDE vi darà sicuramente errore, in quanto dobbiamo ancora generare le varie classi.

Prima di lanciare il progetto, date questo comando:

flutter pub run build_runner build

Verrà creato il file generadb.g.dart con dentro tutto il necessario.

Adesso non dovreste avere più errori, e siete pronti per usare il db:

          onPressed: () async {
            final db = GestioneDb();
            await db
                .into(db.persone)
                .insert(PersoneCompanion.insert(nome: "Matteo"));

            final allPersone = await db.select(db.persone).get();
            print(allPersone);
          },

Io ho messo tutto il codice nel button per convenienza di esempio.

Enjoy!


Condividi

Commentami!