[解決済み] InitStateメソッドで非同期データをロードする方法はありますか?
2022-07-13 03:03:56
質問
InitStateメソッドで非同期データをロードする方法を探しています。私はGoogleAuthコードを使用しており、私はストリームが実行されるまで、ビルドメソッドを実行する必要があります。
私のinitStateメソッドは、次のとおりです。
@override
void initState () {
super.initState();
_googleSignIn.onCurrentUserChanged.listen((GoogleSignInAccount account) {
setState(() {
_currentUser = account;
});
});
_googleSignIn.signInSilently();
}
ご意見をお聞かせください。
どのように解決するのですか?
方法1: この場合 ストリームビルダー を使って行います。これを実行すると ビルダー メソッドが実行されます。 ストリーム のデータが変更されるたびに
以下は、私のサンプルプロジェクトの1つからのコードスニペットです。
StreamBuilder<List<Content>> _getContentsList(BuildContext context) {
final BlocProvider blocProvider = BlocProvider.of(context);
int page = 1;
return StreamBuilder<List<Content>>(
stream: blocProvider.contentBloc.contents,
initialData: [],
builder: (context, snapshot) {
if (snapshot.data.isNotEmpty) {
return ListView.builder(itemBuilder: (context, index) {
if (index < snapshot.data.length) {
return ContentBox(content: snapshot.data.elementAt(index));
} else if (index / 5 == page) {
page++;
blocProvider.contentBloc.index.add(index);
}
});
} else {
return Center(
child: CircularProgressIndicator(),
);
}
});
}
上記のコードで ストリームビルダー はコンテンツの変化を監視し、最初は空の配列を表示し、次に 円形進行状況インジケータ . 一旦APIコールをすると、取得したデータはコンテンツ配列に追加され、その配列はループを実行します。 ビルダー メソッドが実行されます。
ユーザーが下にスクロールすると、さらに多くのコンテンツが取得され、コンテンツ配列に追加され、再び ビルダー メソッドが実行されます。
あなたのケースでは、最初の読み込みだけが必要です。しかし、これはデータが取得されるまでの間、画面に何か他のものを表示するオプションを提供します。
これが役に立つことを願っています。
EDITです。
あなたの場合、以下のような感じになるかと思います。
StreamBuilder<List<Content>>(
stream: account, // stream data to listen for change
builder: (context, snapshot) {
if(account != null) {
return _googleSignIn.signInSilently();
} else {
// show loader or animation
}
});
方法2:
別の方法として
async
メソッドを作成し、それを
initState()
メソッドを呼び出します。
@override
void initState() {
super.initState();
asyncMethod();
}
void asyncMethod() async {
await asyncCall1();
await asyncCall2();
// ....
}
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン