最初にローカルのIndexedDBストアからデータをロードする必要があるDart+WebUIアプリがあります。IndexedDB APIは非同期であるため、データが読み込まれたときにコールバックを受け取ります。データベースを最初に開いて使用できるようになるまで、UI要素を表示したくありません。
UIを表示する前にデータベースの初期化を待つにはどうすればよいですか?
最初にローカルのIndexedDBストアからデータをロードする必要があるDart+WebUIアプリがあります。IndexedDB APIは非同期であるため、データが読み込まれたときにコールバックを受け取ります。データベースを最初に開いて使用できるようになるまで、UI要素を表示したくありません。
UIを表示する前にデータベースの初期化を待つにはどうすればよいですか?
私は自分のプロジェクトでWebUIの方法でそれを行っています:
...
<body>
<template if="showApplication">
<span>The app is ready.</span>
</template>
</body>
...
@observable bool showApplication = false;
main() {
// Initialize...
window.indexedDB.open(...).then((_) {
showApplication = true;
});
}
これには追加のボーナスもあります。個別のコード/Webコンポーネントは、db接続などに依存する前にアプリの状態を確認することもできます。
body
タグをvisibility:hidden
:で非表示にします
<body style="visibility:hidden">
<!-- content -->
</body>
そして、それを将来のthen()コールバックに表示します
window.indexedDB.open(dbName,
version: version,
onUpgradeNeeded: createObjectStore).then(handleDBOpened);
handleDBOpened(..) {
query('body').style.visibility = "visible"; // <-- show the body tag
}