🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Flutter

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

Dart

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

Q&A

解決済

1回答

1503閲覧

【Flutter】画面遷移における値の受け渡し

_kei

総合スコア26

Flutter

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

Dart

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

0グッド

0クリップ

投稿2021/03/05 20:06

前提・実現したいこと

遷移後画面Bで作成したデータを遷移前画面Aに受け渡し、そのデータをAにおいてText Widget を使って表示したいです。なぜ表示されないのか、どのようにしたら表示されるのか教えていただきたいです。

発生している問題・エラーメッセージ

エラーメッセージは出力されていませんが、なぜか思い通りに動作しません。

該当のソースコード

遷移前画面A(一部)

dart

1SizedBox( 2 width: 330, 3 child: RaisedButton( 4 child: Padding( 5 padding: EdgeInsets.only(top: 15, bottom: 15), 6 child: Text((text_10 == null) ? "null" : text_10, 7 style: TextStyle( 8 fontSize: 25, 9 fontWeight: FontWeight.w400, 10 fontFamily: 'Krona', 11 color: Colors.white)), 12 ), 13 color: Color.fromRGBO(220, 20, 60, 0.2), 14 ), 15 onPressed: () async { 16 if (mode == 0) { 17 final result_10 = 18 await Navigator.pushNamed(context, "/play_10"); 19 text_10 = result_10.toString(); 20 21 //debugPrint(result_10); 22 //debugPrint(text_10); 23            } else{ 24---------------以下略-----------------------------

遷移後画面B(一部)

dart

1onPressed: () { Navigator.pop(context, score_10); },

遷移後画面Bから渡された score_10 を遷移後画面Aにおいて Text((text_10 == null) ? "null" : text_10, で表示したいのですが、表示されません。

試したこと

debuggerを用いてデータの受け渡しが上手く行うことができているのかを確認しました。

Aのコードの

dart

1debugPrint(result_10); 2debugPrint(text_10);

により自分の期待している結果がコンソールに出力されました(上手くデータの受け渡しができている)が、なぜかText Widgetで text_10 の値が表示されません。(文字列nullが表示されます)

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

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

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

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

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

guest

回答1

0

ベストアンサー

Dartでは、画面の更新がしたい時はsetState内にその内容を記述しないと変更が検知されません。

dart

1setState(() { 2 text_10 = result_10.toString(); 3});

のように記述すると良いでしょう。

投稿2021/03/06 09:57

tmsah

総合スコア101

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

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

_kei

2021/03/06 12:30

ご回答ありがとうございます。 回答内容を基に書いてみましたが、うまく実装することができませんでした。誠に恐縮ですが、回答のsetState関数のコードをどこに記述すればよいかヒントをいただきたいです。 【補足】 AのファイルのonPressed内に記述したところ、「The method 'setState' isn't defined for the type 'Top'.」というエラーメッセージが出力されました。(Aファイル名top.dart)また、Bに記述しようにもresult_10、text_10のスコープ外になってしまい、エラーとなってしまいます。
tmsah

2021/03/06 14:03

なるほど、もしかしてこのTopクラスはStatelessWidgetを継承していますか? であればStatefulWidgetを継承したクラスに書き直す必要があります。 setStateはStatefulWidgetクラス(正確にはStateクラス)内でしか使えません。 書き直す部分が色々と出てくると思いますが、新たに調べて頑張ってください。 とりあえず、画面の更新は(ページ自体を作り直すのでなければ)StatefulWidgetを作ってその中でsetStateしないと実現できない、ということを分かっていただけたらと思います。
_kei

2021/03/06 14:24

ご返信ありがとうございます。 返信内容やStatefulWidgetの調査を基に実装したところ、自分の意図通りに機能しました。 分かりやすい回答内容、迅速な返信に心より感謝申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問