クイック スタート - Flutter SDK
項目一覧
このページには、Realm を Flutter アプリにすばやく統合するための情報が含まれています。
始める前に、以下のものがあることを確認してください。
オブジェクトモデルを定義する
アプリケーションのデータモデルは、Realm 内に保存されるデータの構造を定義します。 Realm オブジェクト スキーマを使用して、アプリケーション コード内の Dart クラスを介してアプリケーションのデータモデルを定義できます。 次に、 RealmObjectBase を生成する必要があります アプリケーション内で使用される クラス。
詳細については、「 Realm オブジェクト スキーマの定義 」を参照してください。
データモデルの作成
アプリケーションのデータモデルを定義するには、アプリケーション コードに Realm モデル クラスの定義を追加します。
Realm モデル クラスを定義する際のいくつかの考慮事項。
クラス定義ファイルの上部に パッケージをインポートします。
ファイルで、クラスにプライベート名(
_
から始まる)を指定します。たとえば、クラス_Car
を持つファイルcar.dart
などです。 次の「RealmObject クラスの生成」セクションで、 コマンドを使用して公開 RealmObject クラスを生成します。 このコマンドは、Car
などの公開クラスを出力します。モデルを定義するコードの前に、生成されたファイル名(
part car.realm.dart
など)を必ず含めてください。 これは RealmObject クラスを生成するために必要です。
import 'package:realm/realm.dart'; part 'car.realm.dart'; ()class _Car { () late ObjectId id; late String make; late String? model; late int? miles; }
import 'package:realm_dart/realm.dart'; part 'car.realm.dart'; ()class _Car { () late ObjectId id; late String make; late String? model; late int? miles; }
RealmObject クラスの生成
データモデル クラスCar
から RealmObject クラスCar
を生成します。
dart run realm generate
dart run realm_dart generate
これを実行すると、前述の「データモデルの作成」セクションでモデルクラスを定義したディレクトリにあるcar.realm.dart
ファイルにCar
クラスが作成されます。 このCar
クラスはパブリックであり、 _Car
データモデル クラスと同じライブラリの一部です。 生成されたCar
クラスは、アプリケーション全体で使用されます。
データモデル クラスを監視して、 _Car
に変更があるたびに新しいCar
クラスが生成されるようにするには、次のコマンドを実行します。
dart run realm generate --watch
dart run realm_dart generate --watch
Realm を開く
構成 を使用する クラスを使用して、スキーマや Realm がローカル専用であるか、同期されているかなど、開く Realm の詳細を制御します。
構成を Realm コンストラクター に渡す そのRealmのインスタンスを生成するには:
final config = Configuration.local([Car.schema]); final realm = Realm(config);
これで、その Realm インスタンスを使用して、 データベース内のオブジェクトを操作できるようになります。
Realm オブジェクトとの連携
Realm を開くと、書込みトランザクション ( write transaction) ブロックを使用してその内にオブジェクトを作成できます。
詳細については、「書込みトランザクション 」を参照してください。
オブジェクトの作成
新しいCar
を作成するには、 Car
クラスのインスタンスをインスタンス化し、それを書込みトランザクション ブロックの Realm に追加します。
final car = Car(ObjectId(), 'Tesla', model: 'Model S', miles: 42); realm.write(() { realm.add(car); });
更新オブジェクト
自動車を変更するには、書込みトランザクション ブロックでそのプロパティを更新します。
realm.write(() { car.miles = 99; });
オブジェクトのクエリ
Realm.all() メソッド を使用して、Realm 内のデータモデルのすべてのオブジェクトのコレクションを検索します。メソッド:
final cars = realm.all<Car>(); final myCar = cars[0]; print('My car is ${myCar.make} ${myCar.model}');
Realm.query() メソッド でコレクションをフィルタリングして、オブジェクトの特定のセグメントを検索します使用して複数のドキュメントを挿入できます。 query()
メソッドの引数では、 RQL演算子を使用してフィルタリングを実行します。
final cars = realm.query<Car>('make == "Tesla"');
オブジェクトの削除
Realm.delete() メソッド を呼び出してカードを削除します書込みトランザクション (write transaction) ブロック 内の メソッドです。
realm.write(() { realm.delete(car); });
Reactに対応する
クエリ、単一のオブジェクト、またはオブジェクト内のリストの変更をリッスンして応答します。 変更リスナーは、最後に呼び出して以降の変更を含む を引数としてコールバック関数を呼び出すストリームです。
クエリをリッスンするには、 RealmResults.changes.listen() を使用します。
// Listen for changes on whole collection final characters = realm.all<Character>(); final subscription = characters.changes.listen((changes) { changes.inserted; // Indexes of inserted objects. changes.modified; // Indexes of modified objects. changes.deleted; // Indexes of deleted objects. changes.newModified; // Indexes of modified objects after accounting for deletions & insertions. changes.moved; // Indexes of moved objects. changes.results; // The full List of objects. changes.isCleared; // `true` after call to characters.clear(); otherwise, `false`. }); // Listen for changes on RealmResults. final hobbits = fellowshipOfTheRing.members.query('species == "Hobbit"'); final hobbitsSubscription = hobbits.changes.listen((changes) { // ... all the same data as above });
サブスクリプションを一時停止および再開することもできます。
subscription.pause(); // The changes.listen() method won't fire until subscription is resumed. subscription.resume();
変更をリッスンし終了したら、メモリ リークを防ぐために変更リスナーを閉じます。
await subscription.cancel();
詳細については、「変更への対応 」を参照してReact 。
Realm を閉じる
Realm の操作が終了したら、メモリ リークを防ぐためにRealm を閉じます。
realm.close();
MongoDB Atlas と Realm の同期
Realm とAtlas Device Syncを Flutter アプリに統合できます。 Atlas Device Sync は、クライアント アプリケーションと Atlas 上の MongoDB データベース クラスター間でデータを同期する MongoDB Atlas App Service です。
Device Sync を使用して Atlas とデータを同期するために、Flutter SDK はFlexible Syncを使用します。 Flexible Sync を使用すると、クライアント アプリから同期するデータのクエリを定義できます。
注意
Realm をローカルで使用するために、Device Sync を追加する必要はありません。
前提条件
クライアント アプリで Realm と Device Sync を使用する前に、Atlas App Services を使用して Device Sync を構成する必要があります。
Flexible Syncの有効化 クエリ可能なフィールドとして
owner_id
を設定します。Device Sync を使用するときにユーザーが持つ権限を決定するルールを定義します。 この例では、コレクション固有のロールを持たないすべてのコレクションに適用されるデフォルトのロールを割り当てます。 この例では、ユーザーはログインユーザーの
user.id
が オブジェクトのowner_id
と一致するデータの読み取りと書き込みができます。{ "roles": [ { "name": "owner-read-write", "apply_when": {}, "document_filters": { "write": { "owner_id": "%%user.id" }, "read": { "owner_id": "%%user.id" } }, "read": true, "write": true, "insert": true, "delete": true, "search": true } ] }
ここで、アプリケーションの更新を配置します。
Tip
Realm Flutter テンプレート アプリの使用
Device Sync を使用して動作する Flutter アプリがクライアントとその App Service バックエンドですでに設定されている場合は、 Flutter テンプレートアプリflutter.todo.flex
を使用します。
App Services を初期化
認証や同期などの App Services 機能を使用するには、App ID を使用して App Services App にアクセスします。 アプリ ID は、App Services UI で確認できます。
final app = App(AppConfiguration(appId));
ユーザーの認証
App Services UI で匿名認証を有効にすると、ユーザーは識別情報を提供せずにアプリにすぐにログインできます。
final loggedInUser = await app.logIn(Credentials.anonymous());
詳細については、「 ユーザーの認証 」を参照してください。
同期された Realm を開く
Device Sync を有効にしてユーザーを認証したら、 Configuration.FlexibleSync() を使用して同期された Realm を開きます 。次に、構成を Realm() に渡します をクリックして、Realm のインスタンスを開きます。同期された Realm には異なる Configuration . パス が必要 です 他の開いたローカル専用 Realm からの。
final config = Configuration.flexibleSync(loggedInUser, [Todo.schema]); final realm = Realm( config, );
詳細については、「 同期された Realm のオープン 」を参照してください。
同期サブスクリプションを追加する
Device Sync を使用して Atlas とデータを同期するためのサブスクリプションを作成します。 SubscriptionSet.update() 内でサブスクライブを追加しますコールバック関数の外部に定義します。
アップデート ブロック コールバック 関数には、 MutableSubscriptionSet() オブジェクトを引数として指定します。新しいサブスクライブを追加するには、 MutableSubscriptionSet.add()
を使用します。
// Check if the subscription already exists before adding final userTodoSub = realm.subscriptions.findByName('getUserTodos'); if (userTodoSub == null) { realm.subscriptions.update((mutableSubscriptions) { // server-side rules ensure user only downloads their own Todos mutableSubscriptions.add(realm.all<Todo>(), name: 'getUserTodos'); }); }
詳細については、「同期サブスクリプションの管理 」を参照してください。
追加の例と次のステップ
Realm SDK と Atlas App Services バックエンドを使用して事前に作成された Flutter アプリケーションと Atlas App Services バックエンドを設定するには、 Flutter テンプレート アプリ、
flutter.todo.flex
を使用します。Device Sync を使用して Realm SDK を Flutter アプリに追加するガイドについては、 Realm Flutter SDK チュートリアル をお読みください。
上記で説明した Flutter SDK メソッドのその他の例については、「 Realm Dart サンプル Github リポジトリ 」を参照してください。