Flutterの同期、非同期処理についてご教示いただきたく存じます。
firestoreよりデータを取得し、取得した値をaという変数に格納。
その後、if文にてaの変数の値によって処理を行うプログラムです。
Widgetの中に記載しております。
現状、[1]のget()まで処理が行われ、[2]のelse、最後に[3]のthenの中を処理しています。
本当であれば、[1]→[3]→[2]の順でif文の処理が行われるようにしたいです。
async、awaitを入れれば非同期処理を同期処理にできると思っていたのですが。。。。
何が原因でしょうか?同期、非同期について理解できていないためご教示いただけますと幸いです。
class Home extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[ Row(mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[ Container( child: Text('メニュー')), ]), Container( child: _buildChild(context), ), ], ), ), ); } Widget _buildChild(BuildContext context) { String uid = FirebaseAuth.instance.currentUser!.uid; String a = ""; Future<void> future1() async { await FirebaseFirestore.instance .collection('users') .doc(uid) .get() //[1] .then((DocumentSnapshot document) async { Map<String, dynamic> data = await document.data()! as Map<String, dynamic>; //[3] a = await data['username']; //data['username']には"aaa"が入ります }); } future1(); if (a == "aaa") { return Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Container( margin: EdgeInsets.only(top: 100), alignment: Alignment.center, child: Text('はじめまして')), ]); } return Padding( //[2] padding: EdgeInsetsDirectional.fromSTEB(0, 20, 0, 0), child: Row( mainAxisSize: MainAxisSize.max, children: [ Padding( padding: EdgeInsetsDirectional.fromSTEB(15, 0, 0, 0), child: Container( width: 280, height: 100, child: Column( mainAxisSize: MainAxisSize.max, children: [ Container( width: 280, height: 30, child: Padding( padding: EdgeInsetsDirectional.fromSTEB(0, 4, 0, 0), child: Text( 'こんにちは', textAlign: TextAlign.center, ), ), ), ], ), ), ), ], ), ); } }

回答1件
あなたの回答
tips
プレビュー