DataStore イベント
DataStore は定期的に状態通知を Amplify の Hub に発行します。Hub にサブスクライブして、DataStore の内部状態を理解することができます。イベントは以下の場合に発行されます:
- デバイスがネットワーク接続を失うか、または回復する場合
- データがクラウドと同期される場合
- まだ同期されていない保留中の変更がある場合
以下の DataStore イベントが定義されています:
networkStatus
DataStore が起動した時と、ネットワークステータスが変更されるたびに発行されます
HubPayload NetworkStatusEvent には以下が含まれます:
active(Bool):DataStore がクラウドに接続できるネットワーク上にある場合は true、それ以外の場合は false
subscriptionsEstablished
DataStore がすべてのモデルへのサブスクリプションの確立を完了した時に発行されます
HubPayload:N/A
syncQueriesStarted
DataStore が初期同期クエリを実行しようとする時に発行されます
HubPayload syncQueriesStartedEvent には以下が含まれます:
models([String]):各モデルのnameの配列
modelSynced
Dispatched once for each model after the model instances have been synced from the cloud
HubPayload modelSyncedEvent contains:
modelName(String): the name of the model that was syncedisFullSync(Bool):trueif the model was synced with a "full" query to retrieve all modelsisDeltaSync(Bool):trueif the model was synced with a "delta" query to retrieve only changes since the last syncadded(Int): the number of new model instances added to the local storeupdated(Int): the number of existing model instances updated in the local storedeleted(Int): the number of model instances deleted from the local store
syncQueriesReady
すべてのモデルがクラウドから同期されたときに発行されます
HubPayload:N/A
ready
DataStore 全体が準備完了した時に発行されます。この時点ですべてのデータが利用可能です
HubPayload:N/A
outboxMutationEnqueued
Dispatched when a local change has been newly staged for synchronization with the Cloud
HubPayload outboxMutationEvent contains:
modelName(String): the name of the model that is awaiting publication to the Cloudelement:model(Model): the model instance that will be published
outboxMutationProcessed
Dispatched when a local change has finished synchronization with the Cloud and is updated locally
HubPayload outboxMutationEvent contains:
modelName(String): the name of the model that has finished processingelement:model(Model): the model instance that is processed_version(Int): version of the model instance_lastChangedAt(Int): last change time of model instance (unix time)_deleted(Bool): true if the model instance has been deleted in Cloud
outboxStatus
以下の場合に発行されます:
- DataStore が起動する場合
- ローカル変更がアウトボックスにキューイングされるたびに
- ローカル変更の処理が完了するたびに
HubPayload OutboxStatusEvent には以下が含まれます:
isEmpty(Bool):クラウドへのアップロードがまだ保留中のローカル変更がないことを示すブール値
使用方法
ネットワークステータスがアクティブであるかどうかを確認するには、以下のリスナーを設定できます:
void main() { runApp(MyApp());}
class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key);
State<MyApp> createState() => _MyAppState();}
class _MyAppState extends State<MyApp> { late StreamSubscription<DataStoreHubEvent> hubSubscription;
// Initialize a boolean indicating if the network is up bool networkIsUp = false;
// Initialize the libraries ...
void observeEvents() { hubSubscription = Amplify.Hub.listen(HubChannel.DataStore, (hubEvent) { if (hubEvent.eventName == 'networkStatus') { final status = hubEvent.payload as NetworkStatusEvent?; setState(() { networkIsUp = status?.active ?? false; }); } }); }
// Build function and UI elements ...
void dispose() { hubSubscription?.cancel(); super.dispose(); }}