sqflite_common_ffi_web

Creator: coderz1093

Last updated:

Add to Cart

Description:

sqflite common ffi web

sqflite_common_ffi_web #
sqlite Web implementation (experimental). Features:

Persistency (in indexeddb)
Cross-tab safe (runs in a shared worker)

Thanks Simon Binder for the excellent sqlite3 lib.
Setup #
Add the dependency:
dependencies:
sqflite_common_ffi_web: '>=0.1.0-dev.1'
copied to clipboard
Setup binaries #
Implementation requires sqlite3.wasm binaries
into your web folder as well as a sqflite specific shared worker.
You can install binaries using the command:
$ dart run sqflite_common_ffi_web:setup
copied to clipboard
It should create the following files in your web folder:

sqlite3.wasm
sqflite_sw.js

that you can put in source control or not (personally I don't)
Note: when sqlite3 and its wasm binary are updated, you may need to run the command again using the force option:
$ dart run sqflite_common_ffi_web:setup --force
copied to clipboard
However since it depends on sqflite3 version and its associated binary, if it gets updated
and the tool still download the old version (sorry it is hardcoded) you might have to manually
download a compatible binary from sqlite3.wasm binaries
I don't have a better option yet, sorry.
Use the proper factory. #
// Use the ffi web factory in web apps (flutter or dart)
var factory = databaseFactoryFfiWeb;
var db = await factory.openDatabase('my_db.db');
var sqliteVersion = (await db.rawQuery('select sqlite_version()')).first.values.first;
print(sqliteVersion); // should print 3.39.3
copied to clipboard
Add web support to existing sqflite application #
If you have any existing iOS/Android application, one solution is to change the default database
factory:
import 'package:sqflite_common_ffi_web/sqflite_ffi_web.dart';
import 'package:sqflite/sqflite.dart';

var path = '/my/db/path';
if (kIsWeb) {
// Change default factory on the web
databaseFactory = databaseFactoryFfiWeb;
path = 'my_web_web.db';
}

// open the database
var db = openDatabase(path);
copied to clipboard
Limitations #
Use the same web port when debugging #
The database is stored in the browser indexeddb. Like any other web storage, it is tied to the port. (i.e. localhost:8080 is different from localhost:8081).
When debugging, you should use the same port to keep the same indexeddb database.
No shared worker available #
When shared worker are not supported - for example in Android Chrome as of 2022-10-20 -, a basic web worker is used.
In this case it is not cross-tab safe.
Status #
This is still experimental:

slow
not fully tested
bugs
Wasm support issue: Currently deleteDatabase is not supported on wasm (investigating)

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.