sqflite_common_ffi 1.1.1+3 copy "sqflite_common_ffi: ^1.1.1+3" to clipboard
sqflite_common_ffi: ^1.1.1+3 copied to clipboard

outdated

sqflite ffi based implementation, for desktop and units tests.

sqflite ffi #

sqflite based ffi implementation. Based on sqlite3. Thanks to Simon Binder

It allows mocking sqflite during regular flutter unit test (i.e. not using the emulator/simulator). One goal is make it stricter than sqflite to encourage good practices.

Currently supported on Linux, MacOS and Windows.

Getting Started #

Dart #

Add the following dev dependency:

dev_dependencies:
  sqflite_common_ffi:

Linux #

sqlite3 and sqlite3-dev linux packages are required.

One time setup for Ubuntu:

dart tool/linux_setup.dart

MacOS #

Should work as is.

Windows #

Should work as is (sqlite3.dll is bundled).

Sample code #

Unit test code #

sqflite_ffi_test.dart:

import 'package:test/test.dart';
import 'package:sqflite_common/sqlite_api.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';

void main() {
  // Init ffi loader if needed.
  sqfliteFfiInit();
  test('simple sqflite example', () async {
    var db = await databaseFactoryFfi.openDatabase(inMemoryDatabasePath);
    expect(await db.getVersion(), 0);
    await db.close();
  });
}

Application #

Make it a normal dependency.

main.dart:

import 'package:sqflite_common/sqlite_api.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';

Future main() async {
  // Init ffi loader if needed.
  sqfliteFfiInit();

  var databaseFactory = databaseFactoryFfi;
  var db = await databaseFactory.openDatabase(inMemoryDatabasePath);
  await db.execute('''
  CREATE TABLE Product (
      id INTEGER PRIMARY KEY,
      title TEXT
  )
  ''');
  await db.insert('Product', <String, dynamic>{'title': 'Product 1'});
  await db.insert('Product', <String, dynamic>{'title': 'Product 1'});

  var result = await db.query('Product');
  print(result);
  // prints [{id: 1, title: Product 1}, {id: 2, title: Product 1}]
  await db.close();
}

Limitations #

  • Primary intent was to support unit testing sqflite based code but the implementation works on Windows/Mac/Linux flutter desktop application
  • Database calls are made in a separate isolate,
  • Multi-instance support (not common) is simulated
293
likes
40
points
75.9k
downloads

Publisher

verified publishertekartik.com

Weekly Downloads

sqflite ffi based implementation, for desktop and units tests.

Repository (GitHub)

License

MIT (license)

Dependencies

meta, path, sqflite_common, sqlite3, synchronized

More

Packages that depend on sqflite_common_ffi