対応プラットフォーム
sqlite3データベース上に構築されたDriftは、ほぼすべてのDartプラットフォームで実行することができます。 最初のリリース以降、DartとFlutterのエコシステムは大きく代わりました。 異なるDriftパッケージやそれらを使用するタイミングについての混乱を解消するため、このドキュメントではサポートされているすべてのプラットフォームをリストにし、それらのアプリを構築する際にDriftをどのように使用するかを説明します。
プラットフォームの独立性を達成するために、DriftはコアAPIをプラットフォーム固有のデータベース実装から分離しています。
コアAPIは純粋なDartであり、Flutterの外でもすべてのDartプラットフォームで実行することができます。
Driftアプリを書く際には、package:drift/drift.dart
内のAPIを主に使用することをおすすめします。
これはすべてのプラットフォームで動作することが保証されています。
プラットフォームに応じて、異なるQueryExecuter
を選択できます。これはコアのDriftライブラリとネイティブデータベースを結びつけるインターフェースです。
概要
この表は、サポートされているすべてのDirft実装と、それらが動作するプラットフォームの一覧です:
実装 | 対応プラットフォーム | 備考 |
---|---|---|
package:drift_sqflite のSqfliteQueryExecutor | Android, iOS | プラットフォームチャネルを使用し、Flutter専用で、アイソレートのサポートがありません。flutter test はサポートしていません。以前はmoor_flutter として知られていました。 |
package:drift/native.dart のNativeDatabase | Android, iOS, Windows, Linux, macOS | Flutterユーザーのための追加設定は必要ありません。Flutter外部でのサポート、またはflutter test 内での使用については、下記のデスクトップセクションを参照してください。アイソレートでの使用が推奨されます。以前はpackage:moor/ffi.dart として知られていました。 |
package:drift/wasm.dart のWasmDatabase | Web | Flutterがあってもなくても動作します。少し追加の設定が必要です。 |
package:drift/web.dart のWebDatabase | Web | WasmDatabase に置き換えるため非推奨です。 |
共有コードベースで全プラットフォームをサポートするには、データベースを開く方法を変更するだけでよく、その他の使い方は同じです。 このリポジトリでは、条件付きインポートを使った方法を紹介しています。
モバイル対応(AndroidとiOS)
モバイル用には2つのDrift実装があります:
drift_sqflite
を使う
drift_sqflite
(旧称 moor_flutter
)は、sqflite
パッケージを使用してドリフトデータベースの実装を提供するパッケージです。
Flutterのパッケージチャネルを利用し、AndroidとiOSの両方をサポートしています。Flutterを使用していないDartプロジェクトでは動作しません。
新規プロジェクトには、一般的に新しいffiベースの実装を推奨しますが、drift_sqflite
もメンテナンスされ、サポートされています。
drift/native
を使う
新しいパッケージdrift/native.dart
の実装では、drift:ffi
を用いて、sqlite3のネイティブC APIにバインドします。
これは、Getting Startedにも記載されているように、新しいプロジェクトに推奨されるアプローチです。
アプリが最新のsqlite3バージョンを含んでリリースするためにも、package:drift/native.dart
を使用する際には、sqlite3_flutter_libs
パッケージも追加してください。
sqlite3_flutter_libs
は、Android、iOS、macOS上で固定のsqlite3バージョンを使用するようにアプリを設定します。
ただし、これはフルのFlutterアプリにのみ適用され、flutter_test
を使ってテストを実行する際のsqlite3バージョンを上書きすることはできません。