質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

1回答

291閲覧

Futureメソッド内のprint動作について

no1knows

総合スコア3365

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2021/02/11 10:31

編集2021/02/17 00:36

確認したいこと

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 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiroshihorie

2021/02/14 09:26

_getFutureValueを呼び出しているコード等、もっと詳細がないと判断が難しいですね。
no1knows

2021/02/14 11:18

ありがとうございます。追記させていただきました!
guest

回答1

0

「printが何度か実行されてしまうのですが、適切な動作なのでしょうか?」
何をしたらprintが何度も実行されてしまうのでしょうか。
Flutterのbuildメソッドは必要に応じてFlutter側から何度も呼び出されますので
buildが何度も呼ばれる前提で設計しておくことをお勧めします。
例えばデータを読み込む処理等が必要な場合は値をキャッシュしておくなど。

投稿2021/02/16 14:16

hiroshihorie

総合スコア192

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

no1knows

2021/02/17 00:35

説明不足でした。申し訳ありません。 ホットリロード時にprintが何度も実行されてしまいます。 stopしてからdebugを開始するとprintは1回ずつ実行されている状態です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問