Viewing version 2.4.5. Open the latest package page.

sqflite

2.4.5

Flutter plugin for SQLite, a self-contained, high-reliability, embedded, SQL database engine.

Download archive

Readme

sqflite

pub package

SQLite plugin for Flutter. Supports iOS, Android and MacOS.

  • Support transactions and batches
  • Automatic version managment during open
  • Helpers for insert/query/update/delete queries
  • DB operation executed in a background thread on iOS and Android

Other platforms support:

Usage example:

  • notepad_sqflite: Simple flutter notepad working on iOS/Android/Windows/linux/Mac

Getting Started

To get started, you need to add sqflite to your project. Follow the steps below:

  1. Open the terminal in your project root. You can do this by pressing Alt+F12 in Android Studio or Ctrl+` in VS Code.

  2. Run the following command:

flutter pub add sqflite

This command will add a line to your package's pubspec.yaml file and run an implicit flutter pub get. The added line will look like this:

dependencies:
  sqflite: 

Usage example

Import sqflite.dart

import 'package:sqflite/sqflite.dart';

Opening a database

A SQLite database is a file in the file system identified by a path. If relative, this path is relative to the path obtained by getDatabasesPath(), which is the default database directory on Android and the documents directory on iOS/MacOS.

var db = await openDatabase('my_db.db');

There is a basic migration mechanism to handle schema changes during opening.

Many applications use one database and would never need to close it (it will be closed when the application is terminated). If you want to release resources, you can close the database.

await db.close();

Raw SQL queries

Demo code to perform Raw SQL queries

// Get a location using getDatabasesPath
var databasesPath = await getDatabasesPath();
String path = join(databasesPath, 'demo.db');

// Delete the database
await deleteDatabase(path);

// open the database
Database database = await openDatabase(path, version: 1,
    onCreate: (Database db, int version) async {
  // When creating the db, create the table
  await db.execute(
      'CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT, value INTEGER, num REAL)');
});

// Insert some records in a transaction
await database.transaction((txn) async {
  int id1 = await txn.rawInsert(
      'INSERT INTO Test(name, value, num) VALUES("some name", 1234, 456.789)');
  print('inserted1: $id1');
  int id2 = await txn.rawInsert(
      'INSERT INTO Test(name, value, num) VALUES(?, ?, ?)',
      ['another name', 12345678, 3.1416]);
  print('inserted2: $id2');
});

// Update some record
int count = await database.rawUpdate(
    'UPDATE Test SET name = ?, value = ? WHERE name = ?',
    ['updated name', '9876', 'some name']);
print('updated: $count');

// Get the records
List<Map> list = await database.rawQuery('SELECT * FROM Test');
List<Map> expectedList = [
  {'name': 'updated name', 'id': 1, 'value': 9876, 'num': 456.789},
  {'name': 'another name', 'id': 2, 'value': 12345678, 'num': 3.1416}
];
print(list);
print(expectedList);
assert(const DeepCollectionEquality().equals(list, expectedList));

// Count the records
count = Sqflite
    .firstIntValue(await database.rawQuery('SELECT COUNT(*) FROM Test'));
assert(count == 2);

// Delete a record
count = await database
    .rawDelete('DELETE FROM Test WHERE name = ?', ['another name']);
assert(count == 1);

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

Basic information on SQL here.

SQL helpers

Example using the helpers

final String tableTodo = 'todo';
final String columnId = '_id';
final String columnTitle = 'title';
final String columnDone = 'done';

class Todo {
  int id;
  String title;
  bool done;

  Map<String, Object?> toMap() {
    var map = <String, Object?>{
      columnTitle: title,
      columnDone: done == true ? 1 : 0
    };
    if (id != null) {
      map[columnId] = id;
    }
    return map;
  }

  Todo();

  Todo.fromMap(Map<String, Object?> map) {
    id = map[columnId];
    title = map[columnTitle];
    done = map[columnDone] == 1;
  }
}

class TodoProvider {
  Database db;

  Future open(String path) async {
    db = await openDatabase(path, version: 1,
        onCreate: (Database db, int version) async {
      await db.execute('''
create table $tableTodo ( 
  $columnId integer primary key autoincrement, 
  $columnTitle text not null,
  $columnDone integer not null)
''');
    });
  }

  Future<Todo> insert(Todo todo) async {
    todo.id = await db.insert(tableTodo, todo.toMap());
    return todo;
  }

  Future<Todo> getTodo(int id) async {
    List<Map> maps = await db.query(tableTodo,
        columns: [columnId, columnDone, columnTitle],
        where: '$columnId = ?',
        whereArgs: [id]);
    if (maps.length > 0) {
      return Todo.fromMap(maps.first);
    }
    return null;
  }

  Future<int> delete(int id) async {
    return await db.delete(tableTodo, where: '$columnId = ?', whereArgs: [id]);
  }

  Future<int> update(Todo todo) async {
    return await db.update(tableTodo, todo.toMap(),
        where: '$columnId = ?', whereArgs: [todo.id]);
  }

  Future close() async => db.close();
}

Read results

Assuming the following read results:

List<Map<String, Object?>> records = await db.query('my_table');

Resulting map items are read-only

// get the first record
Map<String, Object?> mapRead = records.first;
// Update it in memory...this will throw an exception
mapRead['my_column'] = 1;
// Crash... `mapRead` is read-only

You need to create a new map if you want to modify it in memory:

// get the first record
Map<String, Object?> map = Map<String, Object?>.from(mapRead);
// Update it in memory now
map['my_column'] = 1;

Transaction

Don't use the database but only use the Transaction object in a transaction to access the database. Keep in mind that the callbacks onCreate onUpgrade onDowngrade are already internally wrapped in a transaction, so there is no need to wrap your statements in a transaction within those callbacks.

await database.transaction((txn) async {
  // Ok
  await txn.execute('CREATE TABLE Test1 (id INTEGER PRIMARY KEY)');
  
  // DON'T  use the database object in a transaction
  // this will deadlock!
  await database.execute('CREATE TABLE Test2 (id INTEGER PRIMARY KEY)');
});

A transaction is committed if the callback does not throw an error. If an error is thrown, the transaction is cancelled and the same error is re-thrown. So to rollback a transaction one way is to throw an exception.

try {
   await database.transaction((txn) async {
      await txn.update('TABLE', {'foo': 'bar'});
   });
   // No error, the transaction is committed
} catch (e, st) {
   // this reliably catch if there is a key conflict
   // We know that the transaction is rolled back.
}

try {
  await database.transaction((txn) async {
    // ...
    // cancel the transaction (any error will do)
    throw StateError('cancel transaction');
  });
} catch (e, st) {
  // We know that the transaction is rolled back.
}

You can however catch the exception inside the transaction and not rethrow it to commit the transaction. Only the failed statement will not be executed.

await database.transaction((txn) async {
  // ...
  try {
    await txn.update('TABLE', {'foo': 'bar'});
  } catch (e, st) {
   // this reliably catch if there is a key conflict
   // We know that the transaction is rolled back.
  }
  // ...
  // The transaction will be committed
});

Batch support

To avoid ping-pong between dart and native code, you can use Batch:

batch = db.batch();
batch.insert('Test', {'name': 'item'});
batch.update('Test', {'name': 'new_item'}, where: 'name = ?', whereArgs: ['item']);
batch.delete('Test', where: 'name = ?', whereArgs: ['item']);
results = await batch.commit();

Getting the result for each operation has a cost (id for insertion and number of changes for update and delete), especially on Android where an extra SQL request is executed. If you don't care about the result and worry about performance in big batches, you can use

await batch.commit(noResult: true);

Warning, during a transaction, the batch won't be committed until the transaction is committed

await database.transaction((txn) async {
  var batch = txn.batch();
  
  // ...
  
  // commit but the actual commit will happen when the transaction is committed
  // however the data is available in this transaction
  await batch.commit();
  
  //  ...
});

By default a batch stops as soon as it encounters an error (which typically reverts the uncommitted changes). You can ignore errors so that every successfull operation is ran and committed even if one operation fails:

await batch.commit(continueOnError: true);

Table and column names

In general it is better to avoid using SQLite keywords for entity names. If any of the following name is used:

"add","all","alter","and","as","autoincrement","between","case","check","collate","commit","constraint","create","default","deferrable","delete","distinct","drop","else","escape","except","exists","foreign","from","group","having","if","in","index","insert","intersect","into","is","isnull","join","limit","not","notnull","null","on","or","order","primary","references","select","set","table","then","to","transaction","union","unique","update","using","values","when","where"

the helper will escape the name i.e.

db.query('table')

will be equivalent to manually adding double-quote around the table name (confusingly here named table)

db.rawQuery('SELECT * FROM "table"');

However in any other raw statement (including orderBy, where, groupBy), make sure to escape the name properly using double quote. For example see below where the column name group is not escaped in the columns argument, but is escaped in the where argument.

db.query('table', columns: ['group'], where: '"group" = ?', whereArgs: ['my_group']);

Supported SQLite types

No validity check is done on values yet so please avoid non supported types https://www.sqlite.org/datatype3.html

DateTime is not a supported SQLite type. Personally I store them as int (millisSinceEpoch) or string (iso8601)

bool is not a supported SQLite type. Use INTEGER and 0 and 1 values.

More information on supported types here.

INTEGER

  • Dart type: int
  • Supported values: from -2^63 to 2^63 - 1

REAL

  • Dart type: num

TEXT

  • Dart type: String

BLOB

  • Dart type: Uint8List

Current issues

  • Due to the way transaction works in SQLite (threads), concurrent read and write transaction are not supported. All calls are currently synchronized and transactions block are exclusive. I thought that a basic way to support concurrent access is to open a database multiple times but it only works on iOS as Android reuses the same database object. I also thought a native thread could be a potential future solution however on android accessing the database in another thread is blocked while in a transaction...

More

Changelog

2.4.5

  • Mark the transaction closed when SQLite rolled it back by itself on Android (ConflictAlgorithm.rollback, RAISE(ROLLBACK)...), requires sqflite_android 2.4.5 for the fix

2.4.4+2

  • Remove flutter/material import, adapt example to material_ui

2.4.4

  • Add sqflite-crud-and-transactions, sqflite-open-database and sqflite-testing-and-platforms agent skills in skills/, installable with dart run skills@ get

2.4.3

  • Requires dart 3.12

2.4.2+1

  • Requires dart 3.10

2.4.2

  • Requires dart 3.7

2.4.1

  • Add darwin extension to allow creating unprotected folder in iOS (issue #924)

2.4.0

  • Make sqflite a federated plugin including sqflite_android and sqflite_darwin (iOS/macOS) plugins

2.3.3+2

  • Remove android v1 embedding support
  • Use compileSdk 34 on Android
  • sdk: >= 3.3.0

2.3.2

  • Shared iOS/MacOS darwin implementation
  • Remove FMDB podspec dependency

2.3.1

  • Add iOS/MacOS privacy manifest

2.3.0

  • Dart 3 only

2.2.8+4

  • Android: Adds a namespace for compatibility with AGP 8.0.
  • Android: Use compile SDK 33
  • Export global sqflite API
  • iOS set minimum deployment target to 11.0

2.2.7

  • Dart 3 support

2.2.6

  • uri support for supported implementations.

2.2.5

  • Fix concurrency issue in database worker pool (chriscui@google.com)
  • add android setLocale API call support.

2.2.4+1

  • Experimental logger support.

2.2.3-1

  • strict-casts and sdk 2.18 support

2.2.2

  • Fix iOS/MacOS FMDB include for non-swift project

2.2.1

  • Allow multiple threads on Android, thanks to zhenpingcui

2.2.1-1

  • Fix iOS/MacOS FMDB include

2.2.0+3

  • Implements Database.queryCursor() and Database.rawQueryCursor()
  • Dependency update
  • Initial support of cross isolate safe
  • Transaction v2 update

2.1.0+1

  • Android: fix parameter binding for non string parameters
  • Android: fix unit test

2.0.4-dev.1

  • Android: Allow turning on WAL in the manifest.

2.0.3+1

  • MacOS: Fix crash when an invalid number of parameters is specified in the query

2.0.3

  • iOS/Android: Flutter 3.0 support, makes all the channel calls happen on thread pool instead of the UI thread
  • iOS/MacOS: make close happen in a background thread

2.0.2+1

  • Android build: remove jcenter, compile sdk set to 31

2.0.1

  • Bump default android thread priority to THREAD_PRIORITY_DEFAULT

2.0.0+4

  • nnbd support

1.3.2+3

  • iOS/macOS: Update FMDB to 2.7.5+
  • android: Update gradle to 6.5
  • fix logs on iOS

1.3.1+2

  • add databaseFactory setter to change the default sqflite factory.
  • Fix empty Blob returned as null on MacOS/iOS
  • Test using integration_test

1.3.0+2

  • Add sqflite_common dependency

1.2.2+1

  • Fix iOS warning on FMDB import
  • Support pedantic 1.9
  • Check arguments in debug mode (print errors only)

1.2.1

  • Support Android embedding v2
  • Add private mixin
  • Support iOS/MacOS incremental build

1.2.0

  • Add MacOS support

1.1.8

  • support deleteDatabase after hot-restart. Existing, if any, single instance database ìs closed before deletion

1.1.7+3

  • Bump flutter/dart dependency version (1.9.1/2.5.0)
  • Fix hot and warm restart for opened databases on Android
  • Add code documentation, code coverage and build badges
  • Fix ios example build

1.1.6+5

  • Open database in a background thread on Android.
  • Prevent database deletion on Android when opening a corrupted database in read-only.
  • Fix hot restart ROLLBACK warning
  • Fix indexed parameter binding on iOS

1.1.5

  • Add databaseExists as a top level function
  • handle relative path in databaseExists and deleteDatabase
  • Supports hot-restart while in a transaction on iOS and Android by recovering the database from the native world and executing ROLLBACK to prevent SQLITE_BUSY error
  • If in a transaction, execute ROLLBACK before closing to prevent SQLITE_BUSY error

1.1.4

  • Make all db operation happen in a separate thread on iOS

1.1.3

  • Fix deadlock issue on iOS when using isolates

1.1.2

  • Sqflite now uses a thread handler with a background thread priority by default on Android

1.1.1

  • Use mixin and extract non flutter code into sqlite_api.dart
  • Deprecate SqfliteOptions which is only used internally

1.1.0

  • Breaking change. Migrate from the deprecated original Android Support Library to AndroidX. This shouldn't result in any functional changes, but it requires any Android apps using this plugin to also migrate if they're using the original support library.

    You might say thay version should be bumped to 2.0.0, however it is just a tooling issue, code is not changed. This is a copy of the changes made in the flutter plugins

1.0.0

  • Upgrade 0.13.0 version as 1.0.0
  • Remove deprecated API (applyBatch, apply)

0.13.0

  • Add support for continueOrError for batches

0.12.0

  • iOS objective C prefix added to prevent conflict
  • on iOS create the directory of the database if it does not exist

0.11.2

  • add Database.isOpen which becomes false once the database is closed

0.11.1

  • add Sqflite.hex to allow querying on blob fields

0.11.0

  • add getDatabasesPath to use as the base location to create a database
  • Warning: database are now single instance by default (based on path), to use the old behavior use singleInstance = false when opening a database
  • dart2 stable support

0.10.0

  • Preparing for 1.0
  • Remove deprecated methods (re-entrant transactions)
  • Add Transaction.batch
  • Show developer warning to prevent deadlock

0.9.0

  • Support for in-memory database (:memory: path)
  • Support for single instance
  • new database factory for handling the new options

0.8.9

  • Upgrade to sdk 27

0.8.8

  • Allow testing for constraint exception

0.8.6

  • better sql error report
  • catch android native errors
  • no longer print an error when deleting a database fails

0.8.4

  • Add read-only support using openReadOnlyDatabase

0.8.3

  • Allow running a batch during a transaction using Transaction.applyBatch
  • Restore Batch.commit to use outside a transaction

0.8.2

  • Although already in a transaction, allow creating nested transactions during open

0.8.1

  • New Transaction mechanism not using Zone (old one still supported for now)
  • Start using Batch.apply instead of Batch.commit
  • Deprecate Database.inTransaction and Database.synchronized so that Zones are not used anymore

0.7.1

  • add Batch.query, Batch.rawQuery and Batch.execute
  • pack query result as colums/rows instead of List

0.7.0

  • Add support for --preview-dart-2

0.6.2+1

  • Add longer description to pubspec.yaml

0.6.2

  • Fix travis warning

0.6.1

  • Add Flutter SDK constraint to pubspec.yaml

0.6.0

  • add support for onConfigure to allow for database configuration

0.5.0

  • Escape table and column name when needed in insert/update/query/delete
  • Export ConflictAlgorithm, escapeName, unescapeName in new sql.dart

0.4.0

  • Add support for Batch (insert/update/delete)

0.3.1

  • Remove temp concurrency experiment

0.3.0

2018/01/04

  • Breaking change. Upgraded to Gradle 4.1 and Android Studio Gradle plugin 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in order to use this version of the plugin. Instructions can be found here.

0.2.4

  • Dependency on synchronized updated to >=1.1.0

0.2.3

  • Make Android sends the reponse in the same thread then the caller to prevent unexpected behavior when an error occured

0.2.2

  • Fix unchecked warning on Android

0.2.0

  • Use NSOperationQueue for all db operation on iOS
  • Use ThreadHandler for all db operation on Android

0.0.3

  • Add exception handling

0.0.2

  • Add sqlite helpers based on Razvan Lung suggestions

0.0.1

  • Initial experimentation

Installing

export PUB_HOSTED_URL=https://pub.mirror.p-hatan.com
flutter pub add 'sqflite:2.4.5'
pubspec.yaml
name: sqflite
repository: https://github.com/tekartik/sqflite/tree/master/sqflite
issue_tracker: https://github.com/tekartik/sqflite/issues
description: Flutter plugin for SQLite, a self-contained, high-reliability,
  embedded, SQL database engine.
version: 2.4.5

# This package supports all platforms listed below.
platforms:
  android:
  ios:
  macos:

topics:
  - sql
  - database

funding:
  - https://github.com/sponsors/alextekartik

environment:
  sdk: ^3.12.0
  # Flutter versions prior to 3.7 did not support the
  # sharedDarwinSource option.
  flutter: ">=3.44.0"

flutter:
  plugin:
    platforms:
      android:
        default_package: sqflite_android
      ios:
        default_package: sqflite_darwin
      macos:
        default_package: sqflite_darwin

dependencies:
  flutter:
    sdk: flutter
  sqflite_android: ">=2.4.5 <4.0.0"
  sqflite_darwin: ">=2.4.3 <4.0.0"
  sqflite_platform_interface: ">=2.4.1 <4.0.0"
  sqflite_common: ">=2.5.9 <4.0.0"
  path: ">=1.8.0 <3.0.0"

dev_dependencies:
  flutter_lints: ">=5.0.0"
  process_run: ">=0.12.0"
  http: ">=0.13.0"
  flutter_test:
    sdk: flutter
  test_api: ">=0.2.19"
  pub_semver: ">=2.0.0"

Version history

VersionPublishedArchiveSHA-256
0.1.0On demandDownload91fa2623…7cc18f
0.2.0On demandDownload5613283b…983ecf
0.2.1On demandDownload7beff1ba…ae013b
0.2.2On demandDownload62dbee43…cf85af
0.2.3On demandDownload2e501055…7ef88e
0.2.4On demandDownloadc9aea2b5…483fd9
0.3.0On demandDownload3a7bbc59…cc292f
0.3.1On demandDownload32b5d49f…317956
0.4.0On demandDownload6a7ddc33…d6a272
0.5.0On demandDownloade29c2c87…d44667
0.6.0On demandDownload67cd5b88…348482
0.6.1On demandDownload8e85d3cf…cff891
0.6.2On demandDownload1ac6ed44…c13c05
0.6.2+1On demandDownload89c5712a…a924db
0.6.2+2On demandDownload0c715ec3…908e79
0.7.0On demandDownloadba248e42…6e4a21
0.7.1On demandDownloadc90f8b73…46558d
0.8.0On demandDownload0994f2f4…3c404f
0.8.0+1On demandDownloadde8e39b6…e4aaa5
0.8.1On demandDownload0f753646…91e503
0.8.2On demandDownloadebeee174…a6df65
0.8.3On demandDownloade41083ff…e0e5b4
0.8.4On demandDownload09c69f60…319262
0.8.5On demandDownload6fa90a84…2ab758
0.8.6On demandDownload1e1e7fce…0e270b
0.8.7On demandDownload565fe1b5…a94d6b
0.8.8On demandDownload1bd1bcff…24f161
0.8.9On demandDownload636817de…705150
0.9.0On demandDownload54897d1c…2a0b0e
0.10.0-dev.1On demandDownloaddefb0b43…b10901
0.10.0-dev.2On demandDownload2cf68cb2…a2d58e
0.10.0On demandDownload27a7db95…610123
0.11.0On demandDownload092e31db…fbb4ce
0.11.0+1On demandDownload60e7547a…3e42ff
0.11.0+2On demandDownload2c19208c…f40b36
0.11.0+3On demandDownloadc7471873…92a6e1
0.11.0+4On demandDownload6deff408…720ce2
0.11.0+5On demandDownloade2f6d891…ea7ed2
0.11.1On demandDownload584e2f42…c0f633
0.11.2On demandDownloade8792f15…da8360
0.11.2+1On demandDownload5fc4e6de…439e5f
0.11.2+2On demandDownloadba115757…a4e74d
0.11.2+3On demandDownloade27ce4ca…6f0ab9
0.11.2+4On demandDownloadf3c09903…2dbf29
0.12.0On demandDownload68516e4f…c3ea24
0.12.1On demandDownload9752251e…13cbe8
0.12.2On demandDownload20de5137…729414
0.12.2+1On demandDownloadc6cc4d89…7bff65
0.12.3-dev.1On demandDownloadf1a761f3…541e1d
0.13.0-dev.1On demandDownloadff8b8e94…4bf6c5
0.13.0On demandDownload76ab6824…59348a
0.13.0+1On demandDownloade67aa086…4cd862
1.0.0On demandDownload62c6283e…04edcc
1.1.0-dev.1On demandDownload2e99a252…1bcc05
1.1.0On demandDownloadd0021819…dd0ad7
1.1.0+1On demandDownloadbf96f368…29942a
1.1.1On demandDownload0bc4a782…396daf
1.1.2-devOn demandDownloadaa520b53…8268d8
1.1.2On demandDownload4cfbbdc8…6f6b20
1.1.3-devOn demandDownload01c89514…85e50c
1.1.3On demandDownloadbff557ba…199105
1.1.4-dev.1On demandDownload635cc073…345467
1.1.5-dev.1On demandDownloade49c0367…a16995
1.1.5-dev.2On demandDownloadace2a076…82a570
1.1.5-dev.3On demandDownloadc80bcfad…afc9d8
1.1.5On demandDownload9875ea8e…e21001
1.1.6-dev.1On demandDownload83dd533d…e30040
1.1.6On demandDownloadad67e166…6edffc
1.1.6+1On demandDownload6f1a8e30…a632b1
1.1.6+2On demandDownload8e63091a…857ec5
1.1.6+3On demandDownload0746cd63…da36db
1.1.6+4On demandDownload87d2e141…d52aa5
1.1.6+5On demandDownload7da7e352…62374b
1.1.7-dev.1On demandDownload60c629e2…9f8a4f
1.1.7On demandDownload63661577…9f4e05
1.1.7+1On demandDownload269baa55…e32479
1.1.7+2On demandDownload6baa7eac…c623fc
1.1.7+3On demandDownload9b77ed60…12b8ed
1.1.8On demandDownload4f3af79e…e4a7cf
1.2.0-dev.1On demandDownload4c644286…0c8f3f
1.2.0On demandDownload1727e662…a7f24d
1.2.1-dev.1On demandDownloadd7e329f6…3d940a
1.2.1-dev.2On demandDownload81a3f20b…199d09
1.2.1-dev.3On demandDownload8df63d82…a13a6b
1.2.1On demandDownload8b3e66b7…2f1d98
1.2.2-dev.1On demandDownloadd03a1d50…15770f
1.2.2On demandDownloada6fea4ba…2c0342
1.2.2+1On demandDownload553b3824…fc0c4d
1.3.0-dev.1On demandDownloadc88f11ca…6665a3
1.3.0-dev.2On demandDownload83cd08e5…07f5d6
1.3.0On demandDownloade9d202de…d01c70
1.3.0+1On demandDownloadce0e6be9…79fe56
1.3.0+2On demandDownload74a103f5…31b8ea
1.3.1-dev.1On demandDownload99c93d42…d31a4d
1.3.1On demandDownloadb033431b…79170e
1.3.1+1On demandDownload80cef79d…2c6073
1.3.1+2On demandDownload67ac4e54…6e35a0
1.3.2-dev.1On demandDownloada72df247…088b95
1.3.2On demandDownload90d5c031…9d00f5
1.3.2+1On demandDownload2a355f4c…f5a960
1.3.2+2On demandDownload2bfaf8e8…5614f3
1.3.2+3On demandDownload72904970…b3147c
1.3.2+4On demandDownload00f32a18…5cc2a4
1.3.3-dev.1On demandDownload1698a14b…fd4ef1
2.0.0-nullsafety.0On demandDownloadf3322139…e4be7a
2.0.0-nullsafety.1On demandDownloadecf6e0f2…5737dd
2.0.0-nullsafety.2On demandDownload050033b0…fb8d4b
2.0.0-nullsafety.3On demandDownloadef7d540d…29a9a8
2.0.0On demandDownload1145f3f3…7b7e70
2.0.0+1On demandDownloadfe651109…b551c4
2.0.0+2On demandDownload86893071…b6aa96
2.0.0+3On demandDownload643ab681…d42d53
2.0.0+4On demandDownload67fa2c95…e905c2
2.0.1On demandDownload5e2704b2…0a38fb
2.0.2On demandDownloadf83e4c46…8967f6
2.0.2+1On demandDownload51c09d41…3735d4
2.0.3-dev.1On demandDownload058b8e33…9d971c
2.0.3-dev.2On demandDownload6efc68f9…9855c2
2.0.3-dev.3On demandDownload6c923199…3ad11d
2.0.3-dev.4On demandDownload25380c53…077317
2.0.3-dev.5On demandDownloadfb0b0223…e2351a
2.0.3On demandDownload871add98…d1dc23
2.0.3+1On demandDownloadb3a8307b…9281cf
2.0.4-dev.1On demandDownloade57a6a49…d8dad6
2.1.0On demandDownload0128af22…185523
2.1.0+1On demandDownloadf9120539…d14e16
2.2.0-dev.0On demandDownload29168f9b…379cf1
2.2.0-dev.1On demandDownload9a823790…85faa9
2.2.0-dev.2On demandDownload25b87e50…70394f
2.2.0-dev.3On demandDownloadf4bc3377…2bb2f7
2.2.0On demandDownloada9a8c6df…0c2753
2.2.0+1On demandDownload2a4e5acb…78cb9e
2.2.0+2On demandDownload90cf48ff…fc1297
2.2.0+3On demandDownloadd21c0228…76d161
2.2.1-1On demandDownloadf275d4bd…530004
2.2.1On demandDownloada23a7dcf…f42c31
2.2.2-1On demandDownload67e8832e…f8ad1d
2.2.2-2On demandDownload7e7ee0be…606dae
2.2.2-3On demandDownloadcc134627…23adc0
2.2.2On demandDownload2b1697c7…46c276
2.2.3-1On demandDownload608f197d…7315fe
2.2.3On demandDownload067ab48d…6d0688
2.2.4-dev.1On demandDownloadca938428…b19048
2.2.4On demandDownloada33cd945…ca4f74
2.2.4+1On demandDownload78324387…fd9a4f
2.2.5-0On demandDownload63f6cf3d…6ef888
2.2.5On demandDownload851d5040…bf8ecc
2.2.6-1On demandDownload24680926…b01431
2.2.6On demandDownload500d6fec…1fa758
2.2.7On demandDownloade7dfb648…4ade00
2.2.8-1On demandDownload7c76b9c9…39a649
2.2.8-2On demandDownload3aa1c328…901dd0
2.2.8-3On demandDownload85c2ea1e…8e960b
2.2.8-4On demandDownload65a18fd8…a81511
2.2.8On demandDownload8453780d…55533f
2.2.8+1On demandDownloadacf091c6…bfb079
2.2.8+2On demandDownload3a82c9a2…9caa00
2.2.8+3On demandDownload41498eed…609f27
2.2.8+4On demandDownloadb4d6710e…37a0b9
2.3.0-0On demandDownload990a4a45…144fb0
2.3.0On demandDownload591f1602…c38a9a
2.3.1On demandDownloadc2c32eb0…891ddc
2.3.2-2On demandDownload303833cb…8ea5ae
2.3.2On demandDownloada9016f49…e798c6
2.3.3On demandDownload5ce2e1a1…c9308c
2.3.3+1On demandDownloada43e5a27…66f16d
2.3.3+2On demandDownloadff5a2436…e8a788
2.4.0-0On demandDownload3d8fe831…6ddeeb
2.4.0On demandDownload79a297dc…f2ad62
2.4.1On demandDownload2d729946…9454bb
2.4.2On demandDownloade2297b1d…585d03
2.4.2+1On demandDownload564cfed0…a0250a
2.4.3On demandDownload58a799e6…12b082
2.4.4On demandDownload54ad23e2…0cbfe0
2.4.4+1On demandDownload7419d02d…8c010e
2.4.4+2On demandDownload273218a1…2eb8fe
2.4.5Cached · Upstream SHA-256 matchedDownload21a9750d…90c06a

Dependencies

flutter { "sdk": "flutter" }

path "\u003e=1.8.0 \u003c3.0.0"

sqflite_android "\u003e=2.4.5 \u003c4.0.0"

sqflite_common "\u003e=2.5.9 \u003c4.0.0"

sqflite_darwin "\u003e=2.4.3 \u003c4.0.0"

sqflite_platform_interface "\u003e=2.4.1 \u003c4.0.0"