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

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

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

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

Dart

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

Q&A

解決済

1回答

1137閲覧

Flutterでウィジェット(widget)を継承したときのイベントがエラーになる

maeta

総合スコア12

Flutter

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

Dart

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

0グッド

0クリップ

投稿2020/06/16 06:48

編集2020/06/16 06:49

flutter 1.17.3

以下のようなコードを書いてTextFieldを共通的に使用しようとしました。
この状態だとテキストを入力してもエラーにはならないですが、
Tapのイベントも使用したくなり、修正しました。

dart

1 2 HogeTextField( 3 hintText: 'メールアドレスを入力してください', 4 labelText: 'メール', 5 ), 6 7 8 9class HogeTextField extends TextField { 10 HRTextField({ 11 String hintText, 12 String labelText, 13 TextEditingController controller, 14 void Function(String) onChanged, 15 }) : super( 16 controller: controller, 17 decoration: InputDecoration( 18 labelText: labelText, 19 hintText: hintText, 20 ), 21 onChanged: (text) => onChanged(text), 22 ); 23}

修正

dart

1class HogeTextField extends TextField { 2 HRTextField({ 3 String hintText, 4 String labelText, 5 TextEditingController controller, 6 void Function(String) onChanged, 7 void Function() onTap, //追加箇所 8 }) : super( 9 controller: controller, 10 decoration: InputDecoration( 11 labelText: labelText, 12 hintText: hintText, 13 ), 14 onChanged: (text) => onChanged(text), 15 //追加箇所 16 onTap: () => onTap(), 17 ); 18}

この修正をすると、エラーが出るようになりました。

エラー内容

debug

1════════ Exception caught by gesture ════════ 2The following NoSuchMethodError was thrown while handling a gesture: 3The method 'call' was called on null. 4Receiver: null 5Tried calling: call() 6 7When the exception was thrown, this was the stack 8#0 new HogeField.<anonymous closure> 9#1 _TextFieldSelectionGestureDetectorBuilder.onSingleTapUp 10#2 _TextSelectionGestureDetectorState._handleTapUp 11#3 TapGestureRecognizer.handleTapUp.<anonymous closure> 12#4 GestureRecognizer.invokeCallback 13... 14Handler: "onTapUp" 15Recognizer: _TransparentTapGestureRecognizer#83b67 16 debugOwner: _TextSelectionGestureDetectorState#92c89 17 state: ready 18 won arena 19 finalPosition: Offset(309.7, 395.0) 20 finalLocalPosition: Offset(299.7, 29.0) 21 button: 1 22 sent tap down 23════════════════════════════════════════════ 24

onChangedは何も描かなくてもエラーにならないのに、
onTapはなぜエラーになるのでしょうか?

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。

引数のonTapがnullならば処理をしないように書いてみました。

dart

1class HogeTextField extends TextField { 2 HRTextField({ 3 String hintText, 4 String labelText, 5 TextEditingController controller, 6 void Function(String) onChanged, 7 void Function() onTap, //追加箇所 8 }) : super( 9 controller: controller, 10 decoration: InputDecoration( 11 labelText: labelText, 12 hintText: hintText, 13 ), 14 onChanged: (text) => onChanged(text), 15 //追加箇所さらに更新 16 // onTap: () => onTap(), 17 onTap: () { 18 if (onTap != null) { 19 onTap(); 20 } 21 }, 22 ); 23}

onChangedは何もしないでもエラーにならないのに何故かは分からなかったですが。。。

投稿2020/06/16 09:09

maeta

総合スコア12

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

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

satokei

2020/06/30 09:09

以下のような記載で十分かと思います。 ------------------- onChanged: onChanged, onTap: onTap, ------------------- > onChangedは何もしないでもエラーにならない 単純にイベントが発生していないだけだと思います。
maeta

2020/06/30 09:22

早速試してみました。 問題ありませんでした。 なぜあの記載方法にしたのか経緯が不明ですが、 上手くいって良かったです。 ありがとうございます。
satokei

2020/06/30 09:24

よかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問