確認したいこと
FutureBuilderのFutureメソッド内でprintを利用して取得した値の確認をしています。
ホットリロード時にprintが何度か実行されてしまうのですが、適切な動作なのでしょうか?
※一度、stopしてからdebugを開始するとprintは1回ずつ実行されています。
発生している問題・エラーメッセージ
Debug
1Restarted application in 760ms. 2flutter: company:hoge 3flutter: department:app dev 4flutter: company:hoge 5flutter: company:hoge 6flutter: department:app dev 7flutter: department:app dev
該当のソースコード
Dart
1Future _getFutureValue(String collection, String documentId) async { 2 DocumentSnapshot docSnapshot = await FirebaseFirestore.instance 3 .collection(collection) 4 .doc(documentId) 5 .get(); 6 7 Map<String, dynamic> record = docSnapshot.data(); 8 _userName = record['userName']; 9 10 DocumentSnapshot companyDocSnapshot = await record['companyRef'].get(); 11 Map<String, dynamic> companyRecord = companyDocSnapshot.data(); 12 _companyName = companyRecord['companyName']; 13 14 print('company:'+_companyName); 15 16 DocumentSnapshot departmentDocSnapshot = await record['departmentRef'].get(); 17 Map<String, dynamic> departmentRecord = departmentDocSnapshot.data(); 18 _departmentName = departmentRecord['departmentName']; 19 20 print('department:'+_departmentName); 21 22 return ' '; 23}
試したこと
一度、stopしてからdebugを開始して動作確認を行った。
追記
Dart
1class PostsScreen extends StatefulWidget { 2 3 _PostsScreenState createState() => _PostsScreenState(); 4} 5 6class _PostsScreenState extends State<PostsScreen> { 7 final user = FirebaseAuth.instance.currentUser; 8 9 String _userName; 10 String _companyName; 11 String _departmentName; 12 13 14 Widget build(BuildContext context) { 15 return Scaffold( 16 appBar: AppBar( 17 // elevation: 0.0, 18 19 title: Text('Posts Screen'), 20 actions: [ 21 // ログアウト⽤ボタン 22 IconButton( 23 onPressed: () => _onSignOut(context), 24 icon: Icon(Icons.exit_to_app), 25 ), 26 ], 27 ), 28 body: Center( 29 30 child: FutureBuilder( 31 future: _getFutureValue(), 32 builder: (context, snapshot) { 33 // 通信中はスピナーを表示 34 if (snapshot.connectionState != ConnectionState.done) { 35 return CircularProgressIndicator(); 36 } 37 // エラー発生時はエラーメッセージを表示 38 if (snapshot.hasError) { 39 return Text(snapshot.error.toString()); 40 } 41 if (snapshot.hasData) { 42 print(snapshot.data.documents[3]['userName']); 43 print(snapshot.data.documents[3]['content']); 44 45 return Center( 46 child: Column( 47 children: <Widget>[ 48 Text(_userName ?? ''), 49 Text(_companyName ?? ''), 50 Text(_departmentName ?? ''), 51 Container( 52 width: double.infinity, 53 child: FlatButton( 54 // 新規登録ボタンをタップしたときの処理 55 onPressed: () => startClaps(context), 56 color: Colors.black, 57 textColor: Colors.white, 58 child: Text('つぎ'), 59 ), 60 ), 61 ], 62 ), 63 ); 64 return Text(snapshot.data); 65 } else { 66 return Text("データが存在しません"); 67 } 68 }, 69 ), 70 ), 71 ); 72 }