flutter - 放大数据存储 : How to know when sync is finished?

标签 flutter amazon-dynamodb aws-amplify datastore

我们如何知道 DataStore 已完成同步?

当用户登录后执行第一次 await DataStore.query(MyEntity) 时,DataStore 会立即返回,而不是等待数据与云端同步。

我想等待同步完成,并在数据尚未同步时加载。

最佳答案

您可以使用 Amplify.Hub.listen 监听数据存储 channel 上的事件。

详情:

 subscription = Amplify.Hub.listen([HubChannel.DataStore], (dynamic hubEvent) async {
      switch (hubEvent.eventName) {
        case 'networkStatus':
          _amplifyIsUp.value = hubEvent.payload.active;
          break;
        case 'subscriptionsEstablished':
          _amplifyMessage.value = 'Starting to sync from cloud...';
          break;
        case 'syncQueriesStarted':
          _amplifyIsSyncing.value = true;
          _amplifyMessage.value = 'Syncing...';
          break;
        case 'modelSynced':
          ModelSyncedEvent mse = hubEvent.payload;

          _amplifyMessage.value = '${mse.modelName} has been sync\'d from cloud...';
          break;
        case 'syncQueriesReady':
          _amplifyMessage.value = 'Done!';
          _amplifyIsSyncing.value = false;
          
          ///do your bits here
          onSyncsReady.call();
          
          break;
        case 'ready':
          _amplifyIsSyncing.value = false;

          break;
        case 'subscriptionDataProcessed':
   
          SubscriptionDataProcessedEvent sdpe = hubEvent.payload;
                  _amplifyMessage.value = 'Syncing ${sdpe.element.model.classType.modelName()}...';
         if (sdpe.element.model is DeviceStatus) {
            DeviceStatus ds = sdpe.element.model as DeviceStatus;
            if (ds.clientID == _clientService.client.id && ds.status == Status.REQUESTSTATUS) {
              _statusService.performHeartbeat();
              } 
          }
          break;
        case 'outboxMutationEnqueued':
          _amplifyIsSyncing.value = true;
          _amplifyHasDirt.value = true;
          break;
        case 'outboxMutationProcessed':
          OutboxMutationEvent ome = hubEvent.payload;
          _amplifyIsSyncing.value = false;
          break;
        case 'outboxStatus':
          OutboxStatusEvent ose = hubEvent.payload;
          if (ose.isEmpty) {
            _amplifyIsSyncing.value = false;
            _amplifyHasDirt.value = false;
          } else {
            _amplifyHasDirt.value = true;
          }

          break;
      }
    });

关于flutter - 放大数据存储 : How to know when sync is finished?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72035860/

相关文章:

java - 使用多个排序键查询 Dynamodb

javascript - JSON.parse Dynamodb

flutter - flutter:如何在带状态的构造函数中使用带参数的函数

stream - 基于 Dart/Flutter 中的过滤器更新流

graphql - AWS Amplify with GraphQL - 根据不同类型的用户定义身份验证规则

reactjs - 使用 Amplify 保留 AWS Cognito 用户

python - 如何使用 Amplify React 在 Python 中的 Post Confirmation Lambda Trigger 中获取 Cognito Identity Id?

amazon-web-services - 当 federatedSignIn(托管 UI)工作时,Aws amplify SignIn 方法返回不正确的用户名和密码

html - Flutter For Web 应用启动 TypeError 异常

flutter - 找出 ListView 中的哪些项目是可见的