sembast_sqflite

sembast DB for flutter on top of sqflite.

  • Supports both iOS and Android
  • Supports Flutter Web through sembast_web.
  • Supports Dart VM (Desktop) through sembast

See sembast for API usage

Setup

Setup instructions for all platforms (Flutter/VM, iOS/Android/MacOS, Windows/Linux)

Quick usage

Example for Flutter (iOS/Android/MacOS):

import 'package:sembast_sqflite/sembast_sqflite.dart';
import 'package:sembast_test/test_common.dart';
import 'package:sqflite/sqflite.dart' as sqflite;

export 'package:sembast/sembast.dart';

Future main() async {
  /// Sembast sqflite based database factory.
  ///
  /// Supports iOS/Android/MacOS for now.
  final factory = getDatabaseFactorySqflite(sqflite.databaseFactory);

  // Define the store, key is a string, value is a string
  var store = StoreRef<String, String>.main();
  // Define the record
  var record = store.record('my_key');

  // Open the database
  var db = await factory.openDatabase('test.db');

  // Write a record
  await record.put(db, 'my_value');

  // print store content
  print(await store.stream(db).first);

  // Close the database
  await db.close();
}

Why

You might wonder why...sembast already has its own io format. However sembast io is not cross process safe and one might consider that it is not a well known robust database system.

Here sqflite is used as the based of a journal database that provides data to sembast, allowing a fast all-in-memory access and safe cross process database storage and transaction mechanism.

Usage

  • sembast_sqflite should be used from the main isolate only
  • While being cross-process safe, you might encounter locked access when using multiple transactions are in progress, which could happen while debugging.
  • Applications should not rely on internal storage format

Libraries

sembast_sqflite