Docs Menu
Docs Home
/ /
Device Sync - Flutter SDK

Abrir un Realm sincronizado - Flutter SDK

Esta página describe cómo abrir un dominio sincronizado mediante Sincronización de dispositivos. Para saber cómo abrir y configurar dominios no sincronizados, consulta Abrir y cerrar un dominio.

Antes de abrir un reino con Flexible Sync en una aplicación Flutter:

  1. Configura Flexible Sync en el backend. Debes configurar Flexible Sync en el backend antes de poder usarlo con tu aplicación cliente.

  2. Inicializar el cliente de la aplicación.

  3. Autenticar un usuario en su proyecto cliente.

Para abrir un reino sincronizado, pase un usuario que haya iniciado sesión, una lista de esquemas de objetos de reino y argumentos nombrados opcionales adicionales a Configuration.flexibleSync()constructor. Este constructor devuelve una FlexibleSyncConfiguration. Luego, pase el FlexibleSyncConfiguration A Realm() para abrir una instancia del dominio. Los datos se sincronizan con App Services en segundo plano después de abrir el dominio.

final currentUser = await app.logIn(credentials);
final config = Configuration.flexibleSync(currentUser, [Tricycle.schema],
path: 'flex.realm');
final realm = Realm(config);

Una vez que abra un reino sincronizado, configure y administre las suscripciones de sincronización.

Para sincronizar todos los datos con App Services al abrir un dominio, use el método asíncrono Realm.open(). Esta operación sincroniza todos los datos disponibles antes de devolver el dominio.

Al abrirlo por primera vez, Realm.open() descarga todos los datos que coinciden con tus suscripciones de sincronización. Las siguientes aperturas solo descargan los cambios más recientes. Dependiendo del tamaño inicial del dominio y de las actualizaciones del conjunto de datos mientras el dispositivo no está sincronizando, el rendimiento puede ser más lento al abrirlo por primera vez y más rápido en las siguientes.

Si la aplicación cliente está sin conexión, Realm.open() no se resuelve. Debe comprobar si el dispositivo está conectado a internet antes de usar Realm.open(). Si el dispositivo no está conectado a internet, puede usar Realm() para abrir un dominio inmediatamente y sincronizar datos en segundo plano cuando haya conexión a internet disponible.

// Helper function to check if device is connected to the internet.
Future<bool> isDeviceOnline() async {
// ...logic to check if device is online
}
final config = Configuration.flexibleSync(currentUser, [Tricycle.schema]);
// Only use asynchronous open if app is online.
late Realm realm;
if (await isDeviceOnline()) {
// If the device is online, download changes and then open the realm.
realm = await Realm.open(config);
} else {
// If the device is offline, open the realm immediately
// and automatically sync changes in the background when the device is online.
realm = Realm(config);
}

Para rastrear el estado de la sincronización, pase un ProgressCallback al argumento opcional onProgressCallback llamado.

double progressEstimate = -1;
final realm = await Realm.open(config, onProgressCallback: (syncProgress) {
progressEstimate = syncProgress.progressEstimate;
print('Sync progress: ${progressEstimate * 100}% complete.');
if (progressEstimate == 1.0) {
// Transfer is complete
}
});

Tip

Si desea configurar notificaciones de progreso después de abrir un reino, use SyncSession.getProgressStream.

Para cancelar una sincronización en curso, pase una instancia de CancellationToken al argumento cancellationToken opcional. Llame a CancellationToken.cancel() para cancelar la sincronización.

final token = CancellationToken();
// Cancel the open operation after 30 seconds.
// Alternatively, you could display a loading dialog and bind the cancellation
// to a button the user can click to stop the wait.
Future<void>.delayed(
const Duration(seconds: 30),
() => token.cancel(CancelledException(
cancellationReason: "Realm took too long to open")));
// If realm does not open after 30 seconds with asynchronous Realm.open(),
// open realm immediately with Realm() and try to sync data in the background.
late Realm realm;
try {
realm = await Realm.open(config, cancellationToken: token);
} on CancelledException catch (err) {
print(err.cancellationReason); // prints "Realm took too long to open"
realm = Realm(config);
}

Ejemplo

Realm() frente a Realm.open()

En esta sección se comparan ejemplos de escenarios en los que es posible que desee utilizar Realm() en lugar de Realm.open() para abrir un reino en una aplicación.

Considere una aplicación que permita a los usuarios grabar y guardar sus recetas favoritas. Quizás quiera darles la opción de crear una nueva receta sin esperar a que se descarguen las actualizaciones, o incluso sin conexión. En este caso, es preferible usar Realm(). El usuario puede trabajar sin conexión, pero la aplicación sincroniza sus recetas la próxima vez que se conecta a la red.

Consideremos una aplicación de juego con versiones para tableta y teléfono. Un usuario juega tanto en una mesa como en un teléfono. Avanza tres niveles en la tableta. Posteriormente, abre el juego en un teléfono. En este caso, Realm.open() es una mejor manera de abrir el reino. Dado que Realm.open() sincroniza los datos antes de devolver el reino, garantiza que el progreso del usuario esté sincronizado en el teléfono antes de empezar a usar la aplicación, incluso si el tiempo de carga inicial puede ser más lento.

Para obtener más información sobre las opciones de configuración general del reino, consulte Configurar un reino.

Para manejar errores en su reino sincronizado usando propiedades de configuración adicionales, consulte Manejar errores de sincronización.

Una vez que haya terminado de trabajar con un reino sincronizado, ciérrelo para evitar pérdidas de memoria.

realm.close();
  • Administrar suscripciones de sincronización: aprenda a agregar, modificar y eliminar suscripciones de sincronización una vez que haya abierto un reino sincronizado.

  • Administrar sesión de sincronización: aprenda a administrar el estado de la sesión de sincronización, lo que incluye pausar y reanudar la sincronización, monitorear el progreso de carga y descarga y verificar la conexión de red.

  • Sincronizar datos de múltiples procesos: aprenda a sincronizar datos de múltiples procesos con un solo ámbito.

Volver

Agregar sincronización a una aplicación

En esta página