Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Realm の設定とオープン - Flutter SDK

項目一覧

  • Realm を開く
  • ローカル専用 Realm を開く
  • 同期された Realm を開く
  • インメモリ Realm のオープン
  • Realm の構成
  • 読み取り専用Realmを開く
  • カスタム FIFO 特殊ファイルの設定
  • Realm への初期データの追加
  • デフォルト構成をカスタマイズ
  • スキーマ変更の管理
  • Realm の暗号化
  • Realm の圧縮
  • Realm を閉じる
  • 新しいRealmへのデータのコピー

構成 を使用する クラスを使用して、スキーマなど、オープンする邦土の詳細を制御します。

ローカルにデータを保持するのみのRealmを作成するには、 Configuration.local() を使用して 構成 を作成します。 。引数としてスキーマのリストを指定する必要があります。

Configuration Realm に渡す コンストラクター。

final config = Configuration.local([Car.schema]);
final realm = Realm(config);

これで、その Realm インスタンスを使用して、 データベース内のオブジェクトを操作できるようになります。

Device Sync を使用して Atlas とデータを同期する Realm を開くには、「 同期された Realm の開き方 」を参照してください。

永続化されずにメモリ内で実行されるRealmを作成するには、Config.inMemory () を使用して を作成します。Configuration 。引数としてスキーマのリストを指定する必要があります。 インメモリ Realm を読み取り専用にすることもできません

ConfigurationRealm に渡す コンストラクター。

final config = Configuration.inMemory([Car.schema]);
final realm = Realm(config);

Realm のConfigurationに任意のプロパティを追加できます。

既存の Realm を 読み取り専用 モードで開くことができます。 読み取り専用の邦土を開くには、 ConfigurationオブジェクトにreadOnly: trueを追加します。

既存のRealm は読み取り専用モードでのみ開くことができます。 読み取り専用 Realm に書込み (write) しようとすると、エラーがスローされます。

final config = Configuration.local([Car.schema], isReadOnly: true);
final realm = Realm(config);

Realm の FIFO 特殊ファイル に値を設定する ロケーション。Realm を起動すると、スレッドやプロセス全体で Realm へのアクセスを調整する多数の軽量 FIFO 特殊ファイルが作成されます。 Realm ファイルが FIFO 特殊ファイル(FAT 32ファイルシステムなど)の作成を許可していないロケーションにある場合、Realm を開くことができません。 この場合、Realm ではこれらのファイルを保存するために別の場所が必要になります。 ConfigurationオブジェクトにfifoFilesFallbackPath: <Your Custom FIFO File Path>を追加します。

Realm ファイルのディレクトリで FIFO 特殊ファイルが許可されている場合、このプロパティは無視されます。

final config = Configuration.local([Car.schema],
fifoFilesFallbackPath: "./fifo_folder");
final realm = Realm(config);

initialDataCallback() の 使用 Realm を初めて開くときにコールバック関数を呼び出す。この関数は、デバイス上でその Realm を初めて開いたときにのみ実行されます。 コールバック関数に渡される Realm インスタンスはすでに書込みトランザクションが開いているため、 Realm.write()トランザクション ブロックで書込み操作をラップする必要はありません。 initialDataCallbackは、アプリケーション上で初めて開かれたときに初期データを追加するのに役立ちます。

void dataCb(Realm realm) {
realm.add(Car(ObjectId(), 'Honda'));
}
final config =
Configuration.local([Car.schema], initialDataCallback: dataCb);
final realm = Realm(config);
Car honda = realm.all<Car>()[0];

Realm がデータベース ファイルを保存するデフォルトのパスと、データベース ファイルに付けられたデフォルト名をカスタマイズできます。

静的 な Configuration.defaultRealmName を使用します および Configuration.defaultRealmPath を使用して、アプリケーション内で開かれるすべての邦土のデフォルト構成を設定します。

Configuration.defaultRealmName = "myRealmName.realm";
final customDefaultRealmPath = path.join(
(await Directory.systemTemp.createTemp()).path,
Configuration.defaultRealmName);
Configuration.defaultRealmPath = customDefaultRealmPath;
// Configurations used in the application will use these values
final config = Configuration.local([Car.schema]);
// The path is your system's temp directory
// with the file named 'myRealmName.realm'
print(config.path);

また、静的 getter Configuration.defaultStoragePath を使用して、Realm がデフォルトでファイルを保存する場所を確認することもできます 。このプロパティの値は、SDK を使用しているプラットフォーム、および Realm の Dart バージョンまたは Flutter バージョンのどちらを使用しているかによって異なります。 アプリケーションでConfiguration.defaultStoragePathの値を確認して、Realm ファイルが環境に保存されている場所を確認します。

final storagePath = Configuration.defaultStoragePath;
// See value in your application
print(storagePath);

Realm の構成時にスキーマの変更を管理する方法の詳細については、「 Realm オブジェクト スキーマの更新 」のドキュメントを参照してください。

データのセキュリティを確保するために、ローカル Realm を暗号化できます。 詳細については、「 Realm の暗号化 」を参照してください。

ローカル Realm ファイル サイズを小さくすると、リソースが制限された環境でファイル サイズを管理およびパフォーマンスを向上させることができます。 詳細については、「 Realm の圧縮 」を参照してください。

Realm の操作が終了したら、メモリ リークを防ぐためにRealm を閉じます。

realm.close();

Realm の操作が終了したら、メモリ リークを防ぐためにRealm を閉じます。

realm.close();

Dart CLI アプリケーションを実行している場合は、プロセスがハングするのを防ぐために Realm.shutdown() を呼び出します。

Realm.shutdown();

既存の Realm から異なる構成オプションを持つ新しい Realm にデータをコピーするには、新しい構成を Realm.writeCopy() に渡します。

新しいRealmの構成で、 pathを指定する必要があります。 すでにファイルを含むパスには書込み (write)はできません

Realm.writeCopy()を使用すると、次の 構成 間で変換が可能 次のタイプ:

  • LocalConfiguration 次の行動をします: LocalConfiguration

  • FlexibleSyncConfiguration 次の行動をします: FlexibleSyncConfiguration

  • InMemoryConfiguration 次の行動をします: InMemoryConfiguration

  • LocalConfiguration 読み取り専用LocalConfigurationとその逆

  • InMemoryConfiguration からLocalConfigurationへ、またはその逆

  • FlexibleSyncConfiguration 次の行動をします: LocalConfiguration

  • FlexibleSyncConfiguration 次の行動をします: InMemoryConfiguration

LocalConfigurationまたはInMemoryConfigurationからFlexibleSyncConfigurationに変換することはできません

Realm.writeCopy()を使用する際に注意する必要がある追加の考慮事項がいくつかあります。

  1. 宛先ファイルがすでに存在することはできません。

  2. 書込みトランザクション内または移行中は、Realm をコピーできません。

  3. Device Sync を使用する場合は、コピーが書き込まれる前に、すべてのローカル変更をサーバーと同期する必要があります。 これにより、そのファイルは新しくインストールされたアプリケーションの開始点として使用できるようになります。 保留中のアップロードがある場合、 Realm.writeCopy()は をスローします。

次の例では、 を持つ Realm からInMemoryConfiguration を持つ新しい RealmLocalConfiguration にデータをコピーします。

// Create in-memory realm and add data to it.
// Note that even though the realm is in-memory, it still has a file path.
// This is because in-memory realms still use memory-mapped files
// for their operations; they just don't persist data across launches.
final inMemoryRealm =
Realm(Configuration.inMemory([Person.schema], path: 'inMemory.realm'));
inMemoryRealm.write(() {
inMemoryRealm.addAll([Person("Tanya"), Person("Greg"), Person("Portia")]);
});
// Copy contents of `inMemoryRealm` to a new realm with `localConfig`.
// `localConfig` uses the default file path for local realms.
final localConfig = Configuration.local([Person.schema]);
inMemoryRealm.writeCopy(localConfig);
// Close the realm you just copied when you're done working with it.
inMemoryRealm.close();
// Open the local realm that the data from `inMemoryRealm`
// was just copied to with `localConfig`.
final localRealm = Realm(localConfig);
// Person object for "Tanya" is in `localRealm` because
// the data was copied over with `inMemoryRealm.writeCopy()`.
final tanya = localRealm.find<Person>("Tanya");

また、コピーされた Realm の構成に新しい暗号化キーを含めたり、新しい構成から暗号化キーを削除したりすることもできます。

次の例では、 を持つ 暗号化され てい ない Realm からLocalConfiguration を持つ暗号化された RealmLocalConfiguration にデータをコピーします。

// Create unencrypted realm and add data to it.
final unencryptedRealm = Realm(Configuration.local([Person.schema]));
unencryptedRealm.write(() => unencryptedRealm.addAll([
Person("Daphne"),
Person("Harper"),
Person("Ethan"),
Person("Cameron")
]));
// Create encryption key and encrypted realm.
final key = List<int>.generate(64, (i) => Random().nextInt(256));
final encryptedConfig = Configuration.local([Person.schema],
path: 'encrypted.realm', encryptionKey: key);
// Copy the data from `unencryptedRealm` to a new realm with
// the `encryptedConfig`. The data is encrypted as part of the copying.
unencryptedRealm.writeCopy(encryptedConfig);
// Close the realm you just copied when you're done working with it.
unencryptedRealm.close();
// Open the new encrypted realm with `encryptedConfig`.
final encryptedRealm = Realm(encryptedConfig);
// Person object for "Harper" is in `localRealm` because
// the data was copied over with `unencryptedRealm.writeCopy()`.
final harper = encryptedRealm.find<Person>('Harper');

戻る

地理空間データ