Docs Menu
Docs Home
/ /
Atlas Device SDK

クイック スタート - Flutter SDK

項目一覧

  • オブジェクトモデルを定義する
  • データモデルの作成
  • RealmObject クラスの生成
  • Realm を開く
  • Realm オブジェクトとの連携
  • オブジェクトの作成
  • 更新オブジェクト
  • オブジェクトのクエリ
  • オブジェクトの削除
  • Reactに対応する
  • Realm を閉じる
  • MongoDB Atlas と Realm の同期
  • 前提条件
  • App Services を初期化
  • ユーザーの認証
  • 同期された Realm を開く
  • 同期サブスクリプションを追加する
  • 追加の例と次のステップ

このページには、Realm を Flutter アプリにすばやく統合するための情報が含まれています。

始める前に、以下のものがあることを確認してください。

アプリケーションのデータモデルは、Realm 内に保存されるデータの構造を定義します。 Realm オブジェクト スキーマを使用して、アプリケーション コード内の Dart クラスを介してアプリケーションのデータモデルを定義できます。 次に、 RealmObjectBase を生成する必要があります アプリケーション内で使用される クラス。

詳細については、「 Realm オブジェクト スキーマの定義 」を参照してください。

アプリケーションのデータモデルを定義するには、アプリケーション コードに Realm モデル クラスの定義を追加します。

Realm モデル クラスを定義する際のいくつかの考慮事項。

  • クラス定義ファイルの上部に パッケージをインポートします。

  • ファイルで、クラスにプライベート名( _から始まる)を指定します。たとえば、クラス_Carを持つファイルcar.dartなどです。 次の「RealmObject クラスの生成」セクションで、 コマンドを使用して公開 RealmObject クラスを生成します。 このコマンドは、 Carなどの公開クラスを出力します。

  • モデルを定義するコードの前に、生成されたファイル名( part car.realm.dartなど)を必ず含めてください。 これは RealmObject クラスを生成するために必要です。

.dart
import 'package:realm/realm.dart';
part 'car.realm.dart';
@RealmModel()
class _Car {
@PrimaryKey()
late ObjectId id;
late String make;
late String? model;
late int? miles;
}
.dart
import 'package:realm_dart/realm.dart';
part 'car.realm.dart';
@RealmModel()
class _Car {
@PrimaryKey()
late ObjectId id;
late String make;
late String? model;
late int? miles;
}

データモデル クラス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のインスタンスを生成するには:

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);
});

クエリ、単一のオブジェクト、またはオブジェクト内のリストの変更をリッスンして応答します。 変更リスナーは、最後に呼び出して以降の変更を含む を引数としてコールバック関数を呼び出すストリームです。

クエリをリッスンするには、 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.close();

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 を構成する必要があります。

  1. App Services アプリの作成

  2. 匿名認証の有効化

  3. Flexible Syncの有効化 クエリ可能なフィールドとしてowner_idを設定します。

  4. 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 ID を使用して App Services App にアクセスします。 アプリ ID は、App Services UI で確認できます

final app = App(AppConfiguration(appId));

詳しくは、「 App Services への接続 」を参照してください。

App Services UI で匿名認証を有効にすると、ユーザーは識別情報を提供せずにアプリにすぐにログインできます。

final loggedInUser = await app.logIn(Credentials.anonymous());

詳細については、「 ユーザーの認証 」を参照してください。

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');
});
}

詳細については、「同期サブスクリプションの管理 」を参照してください。

次へ

Atlas Device SDK Docsへようこそ