Flutter でモバイルだけでなくデスクトップや Web などマルチプラットフォームに対応している NoSQL データベースライブラリ sembast を使ってみたのでメモ.

sembast | Dart package

NoSQL persistent embedded file system document-based database for Dart VM and Flutter with …

pub.dev favicon image pub.dev

JSON から DB をつくる

DB から JSON への export,import に対応しているんだけどそれなりにしないと import できない.

sembast.dart/sembast/doc/storage_format.md at master · tekartik/sembast.dart

Simple io database. Contribute to tekartik/sembast.dart development by creating an account on …

github.com favicon image github.com
import 'package:sembase/utils/semast_import_export.dart';

var stores = {
  'name': 'message'
  'keys': keys,
  'values': values,
};
var data = {
  'sembase_export': 1,
  'version': 1,
  stores: [stores],
};
var db = await importDatabase(data, databaseFactory, 'mydata.db');

クエリ

sembast.dart/sembast/doc/queries.md at master · tekartik/sembast.dart

Simple io database. Contribute to tekartik/sembast.dart development by creating an account on …

github.com favicon image github.com
var store = stringMapStoreFactory.store('message');
var finder = Finder(filter: Filter,matches('message', query);
var records = store.find(_db, finder: finder);
records.then((value) =>
  setState(() =>
    _records.addAll(value.map((e)=>e.value).toList())));

マルチプラットフォーム対応

DB を作成するときにモバイルと Web とかで databaseFactory が違うんだけど作者がええかんじにする utils を公開しているのでこれを使う.

app_flutter_utils.dart/app_sembast at master · tekartik/app_flutter_utils.dart

Flutter utilities. Contribute to tekartik/app_flutter_utils.dart development by creating an account …

github.com favicon image github.com
import 'package:tekartik_app_flutter_idb/app_sembast.dart';

var packageName = 'net.hugahuga.hogehoge';
var databaseFactory = getDatabaseFactory(packageName: packageName);
var db = await importDatabase(data, databaseFactory, 'mydata.db');

おわり

これまで sqflite 使っていたけど Web に対応してないし,これを機に sembast にしてもいいかも. Realm が Dart 対応を進めてるらしいのでそれの動向も気になる.