Abrir un reino
Uso el Configuración clase para controlar los detalles del reino que desea abrir, incluido el esquema.
Abrir un reino solo local
Para crear un dominio que solo persista datos localmente, cree una configuración con Configuration.local(). Debe proporcionar una lista de esquemas como argumento.
Pasar el Configuration al constructor del reino.
final config = Configuration.local([Car.schema]); final realm = Realm(config);
Ahora puedes usar esa instancia de reino para trabajar con objetos en la base de datos.
Abrir un reino sincronizado
Para abrir un reino que sincronice datos con Atlas mediante Sincronización de dispositivos, consulte Abrir un reino sincronizado.
Abrir un reino en memoria
Para crear un dominio que se ejecute en memoria sin persistir, cree su Configuration con Configuration.inMemory(). Debe proporcionar una lista de esquemas como argumento. Los dominios en memoria no pueden ser de solo lectura.
Pase el Configuration al constructor de Realm.
final config = Configuration.inMemory([Car.schema]); final realm = Realm(config);
Configurar un reino
Puedes añadir propiedades opcionales al Configuration del realm.
Abrir un dominio de solo lectura
Puedes abrir un dominio existente en modo de solo lectura. Para ello, añade readOnly: true a tu objeto Configuration.
Solo puedes abrir reinos existentes en modo de solo lectura. Si intentas escribir en un realm de solo lectura, se producirá un error.
final config = Configuration.local([Car.schema], isReadOnly: true); final realm = Realm(config);
Establecer archivos FIFO especiales personalizados
Establece un valor para la ubicación de archivos especiales FIFO de Realm. Abrir un Realm crea una serie de archivos especiales FIFO livianos que coordinan el acceso al Realm a través de hilos y procesos. Si el archivo Realm está en una ubicación que no permite la creación de archivos especiales FIFO (como los sistemas de archivos FAT32), entonces el Realm no puede abrirse. En este caso, Realm necesita una ubicación diferente para almacenar estos archivos. Agrega fifoFilesFallbackPath: <Your Custom FIFO File Path> a tu objeto Configuration.
Esta propiedad se ignora si el directorio del archivo de reino permite archivos especiales FIFO.
final config = Configuration.local([Car.schema], fifoFilesFallbackPath: "./fifo_folder"); final realm = Realm(config);
Agregar datos iniciales al reino
Use initialDataCallback() para invocar una función de devolución de llamada la primera vez que abra un dominio. Esta función solo se ejecuta la primera vez que abra ese dominio en el dispositivo. La instancia del dominio pasada a la función de devolución de llamada ya tiene una transacción de escritura abierta, por lo que no necesita encapsular las operaciones de escritura en un Realm.write() bloque de transacción. initialDataCallback puede ser útil para agregar datos iniciales a su aplicación la primera vez que se abre en un dispositivo.
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];
Personalizar la configuración predeterminada
Puede personalizar la ruta predeterminada donde Realm almacena los archivos de base de datos y el nombre predeterminado que se les da a los archivos de base de datos.
Utilice Configuration.defaultRealmName y Configuration.defaultRealmPath estáticos para establecer la configuración predeterminada para todos los reinos abiertos dentro de una aplicación.
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);
También puedes comprobar dónde almacena realm los archivos por defecto mediante el captador estático Configuration.defaultStoragePath. El valor de esta propiedad varía según la plataforma en la que uses el SDK y si usas las versiones Dart o Flutter de Realm. Comprueba el valor de Configuration.defaultStoragePath en tu aplicación para ver dónde se almacenan los archivos realm en tu entorno.
final storagePath = Configuration.defaultStoragePath; // See value in your application print(storagePath);
Administrar cambios de esquema
Para obtener más información sobre cómo administrar cambios de esquema al configurar un dominio, consulte la documentación Actualizar un esquema de objeto de dominio.
Cifrar un reino
Puedes cifrar tu dominio local para garantizar la seguridad de tus datos. Para más información, consulta Cifrar un dominio.
Compactar un reino
Puede reducir el tamaño del archivo del dominio local para mejorar el rendimiento y administrarlo en un entorno con recursos limitados. Para obtener más información, consulte Compactar un dominio.
Cerrar un reino
Una vez que haya terminado de trabajar con un reino, ciérrelo para evitar pérdidas de memoria.
realm.close();
Una vez que haya terminado de trabajar con un reino, ciérrelo para evitar pérdidas de memoria.
realm.close();
Si ejecutas una aplicación CLI de Dart, para evitar que el proceso quede colgado, llama a Realm.shutdown()
Realm.shutdown();
Copiar datos a un nuevo reino
Para copiar datos de un reino existente a un nuevo reino con diferentes opciones de configuración, pase la nueva configuración a Realm.writeCopy().
En la configuración del nuevo dominio, debe path especificar.No puede escribir en una ruta que ya contenga un archivo.
Realm.writeCopy()Usando, puedes convertir entre los siguientes tipos de configuración:
LocalConfigurationtoLocalConfigurationFlexibleSyncConfigurationtoFlexibleSyncConfigurationInMemoryConfigurationtoInMemoryConfigurationLocalConfigurationa solo lecturaLocalConfigurationy viceversaInMemoryConfigurationaLocalConfigurationy viceversaFlexibleSyncConfigurationtoLocalConfigurationFlexibleSyncConfigurationtoInMemoryConfiguration
No puedes convertir de un LocalConfiguration o de un InMemoryConfiguration a un FlexibleSyncConfiguration.
Algunas consideraciones adicionales a tener en cuenta al utilizar Realm.writeCopy():
El archivo de destino no puede existir ya.
No se permite copiar un reino dentro de una transacción de escritura o durante la migración.
Al usar Device Sync, debe sincronizar todos los cambios locales con el servidor antes de escribir la copia. Esto garantiza que el archivo pueda usarse como punto de partida para una aplicación recién instalada. Se genera un error
Realm.writeCopy()si hay cargas pendientes.
El siguiente ejemplo copia los datos de un reino con un InMemoryConfiguration a un nuevo reino con un LocalConfiguration.
// 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");
También puede incluir una nueva clave de cifrado en la configuración del reino copiado o eliminar la clave de cifrado de la nueva configuración.
El siguiente ejemplo copia datos de un reino no cifrado con un LocalConfiguration a un reino cifrado con LocalConfiguration un.
// 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');