Realm の設定とオープン - Flutter SDK
項目一覧
Realm を開く
構成 を使用する クラスを使用して、スキーマなど、オープンする邦土の詳細を制御します。
ローカル専用 Realm を開く
ローカルにデータを保持するのみのRealmを作成するには、 Configuration.local() を使用して 構成 を作成します。 。引数としてスキーマのリストを指定する必要があります。
をConfiguration
Realm に渡す コンストラクター。
final config = Configuration.local([Car.schema]); final realm = Realm(config);
これで、その Realm インスタンスを使用して、 データベース内のオブジェクトを操作できるようになります。
同期された Realm を開く
Device Sync を使用して Atlas とデータを同期する Realm を開くには、「 同期された Realm の開き方 」を参照してください。
インメモリ Realm のオープン
永続化されずにメモリ内で実行されるRealmを作成するには、Config.inMemory () を使用して を作成します。Configuration
。引数としてスキーマのリストを指定する必要があります。 インメモリ Realm を読み取り専用にすることもできません。
Configuration
Realm に渡す コンストラクター。
final config = Configuration.inMemory([Car.schema]); final realm = Realm(config);
Realm の構成
Realm のConfiguration
に任意のプロパティを追加できます。
読み取り専用Realmを開く
既存の Realm を 読み取り専用 モードで開くことができます。 読み取り専用の邦土を開くには、 Configuration
オブジェクトにreadOnly: true
を追加します。
既存のRealm は読み取り専用モードでのみ開くことができます。 読み取り専用 Realm に書込み (write) しようとすると、エラーがスローされます。
final config = Configuration.local([Car.schema], isReadOnly: true); final realm = Realm(config);
カスタム FIFO 特殊ファイルの設定
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);
Realm への初期データの追加
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 を閉じる
Realm の操作が終了したら、メモリ リークを防ぐためにRealm を閉じます。
realm.close();
Realm の操作が終了したら、メモリ リークを防ぐためにRealm を閉じます。
realm.close();
Dart CLI アプリケーションを実行している場合は、プロセスがハングするのを防ぐために Realm.shutdown() を呼び出します。
Realm.shutdown();
新しいRealmへのデータのコピー
既存の 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()
を使用する際に注意する必要がある追加の考慮事項がいくつかあります。
宛先ファイルがすでに存在することはできません。
書込みトランザクション内または移行中は、Realm をコピーできません。
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');