Open4
Drift (Dart / Flutter パッケージ) に入門してみる。

テーブルの宣言(テーブル名末尾 s は省略される)
class Todos extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get title => text().withLength(min: 6, max: 32)();
TextColumn get content => text().named('body')();
IntColumn get category => integer().nullable()();
}
// クラス名を変更する場合はアノテーションを付ける。
('Category')
class Categories extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get description => text()();
}

データベースの宣言
import 'dart:io';
import 'package:drift/native.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;
(tables: [Todos, Categories])
class MyDatabase extends _$MyDatabase {
// コンストラクタでデータ保存先を指定する。
MyDatabase() : super(_openConnection());
// テーブル定義を変更した際はこのバージョンを上げる。
int get schemaVersion => 1;
}
LazyDatabase _openConnection() {
// LazyDatabase() を使えばデータ保存先を非同期で取得することができる。
return LazyDatabase(() async {
// db.sqlite と呼ばれるデータベースファイルをアプリのドキュメントフォルダーに置く。
final dbFolder = await getApplicationDocumentsDirectory();
final file = File(p.join(dbFolder.path, 'db.sqlite'));
return NativeDatabase.createInBackground(file);
});
}

Drift の初期化
Future<void> main() async {
final database = MyDatabase();
// insert 構文
await database
.into(database.categories)
.insert(CategoriesCompanion.insert(description: 'my first category'));
// select 構文
final allCategories = await database.select(database.categories).get();
print('Categories in database: $allCategories');
}