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

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

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

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

Q&A

解決済

2回答

2130閲覧

Flutter: TextButtonのonPressed内で変数を呼び出せない

massanmesu

総合スコア36

Flutter

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

0グッド

0クリップ

投稿2021/07/16 01:51

TextFieldに入力した文字列を出力するTextButtonがあります。
イメージ説明
変数newTaskNameに入力中の値を代入し、ボタンをタップ時に出力する、という処理を書きたいのですが、TextButtonのonPressed(){}で変数を呼び出そうとするとエラーになります。

dart

1import 'package:flutter/material.dart'; 2 3class AddTask extends StatelessWidget { 4 AddTask(this.addTaskCallBack); 5 6 final Function addTaskCallBack; 7 8 9 Widget build(BuildContext context) { 10 11 // TextFieldの入力値が代入される変数 12 String newTaskName; 13 14 return SingleChildScrollView( 15 child: Container( 16 padding: 17 EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), 18 color: const Color(0xff6a6a6a), 19 child: Container( 20 padding: const EdgeInsets.all(20.0), 21 decoration: const BoxDecoration( 22 color: Colors.white, 23 borderRadius: BorderRadius.only( 24 topLeft: Radius.circular(20.0), 25 topRight: Radius.circular(20.0), 26 ), 27 ), 28 child: Column( 29 crossAxisAlignment: CrossAxisAlignment.stretch, 30 children: [ 31 Text( 32 'Add Task', 33 textAlign: TextAlign.center, 34 style: TextStyle(color: Colors.pink.shade100, fontSize: 30.0), 35 ), 36 TextField( 37 autofocus: true, 38 textAlign: TextAlign.center, 39 decoration: InputDecoration( 40 border: UnderlineInputBorder( 41 borderSide: BorderSide(color: Colors.pink.shade100)), 42 ), 43 onChanged: (value) { 44 newTaskName = value; // 入力中の文字列を変数に代入 45 print(newTaskName); 46 }, 47 ), 48 const SizedBox( 49 height: 20.0, 50 ), 51 TextButton( 52 onPressed: () { 53 print(newTaskName); // 出力 54 }, 55 child: Container( 56 color: Colors.pink.shade100, 57 height: 50.0, 58 child: const Center( 59 child: Text( 60 'Add', 61 style: TextStyle(color: Colors.white, fontSize: 18.0), 62 ), 63 ), 64 ), 65 ) 66 ], 67 ), 68 ), 69 ), 70 ); 71 } 72} 73

イメージ説明

新しいバージョンになってからTextButtonのonPressedの中では変数は使えなくなったのでしょうか?
TextFieldのonChangedの中ではアクセスできているので原因がわかりません。

ご助力お願いします。

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

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

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

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

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

guest

回答2

0

自己解決

変数の型をオプショナル型に変更したらエラーが消えました。

おそらく、先にボタンを押す可能性があるため値がない場合を考慮した型にする必要があったのかと思われます。

× String newTaskName; ○ String? newTaskName;

そして値がnullの場合の処理を書けば問題なく動きました。

TextButton( onPressed: () { × print(newTaskName); ○ print(newTaskName ?? 'Empty Text'); },

ご協力ありがとうございました。

投稿2021/07/17 01:44

massanmesu

総合スコア36

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

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

0

late String newTaskName;
とかで消えます?

投稿2021/07/16 03:27

endiv

総合スコア161

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

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

massanmesu

2021/07/16 08:21

試しましたが症状は一緒です。 もう少し調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問