【Flutter初学者のエラー日記】エラー文は出ないのに、 画面遷移 できない事件

Flutter

さてと、FloatingActionButton押して次の画面に 画面遷移 させてっと。。。

ん?ボタン押されてることはDebug画面で確認できるのに、遷移しないぞ!?

というエラーに2時間ほど格闘したので、備忘録としてFlutter初学者エラー集に収めておこうと今回の記事を書きました😇

ではでは、対処法行ってみよう!

注意⚠️:遷移元のファイルをAとし、遷移先のファイルをBとします

スポンサーリンク

原因

原因はズバリ、遷移先の画面で生成されたElevatedButtonのonPressed属性にありました🧑‍💻

私は、遷移先の画面で登録ボタンをクリックしたら、前の画面に戻るという処理を行うためにファイルBに

ElevatedButton(
            onPressed: tapRegistration(context),
            child: Text(
              "登録",
              style: TextStyle(fontSize: 20),
            ),
tapRegistration(BuildContext context) {
    //TODO DBに登録
    print("押されたよおお");
 
    Navigator.of(context).pop();
    // Navigator.pop(context, true);
  }

という記述をしていました

onPressedでは、ボタンが押された時の処理を書きますが、今回はtapRegistrationメソッドを実行し、遷移元に画面遷移する処理(pop)をしようとしました

通常onPressedは

onPressed: ()=> 実行するメソッド(pop)
onPressed:(){
実行したいメソッド(pop);
~
}

というふうに無名関数を呼んで、その中で実行したいメソッドを呼んでくる書き方が一般的なのですが、今回私は

 onPressed: 実行したいメソッド(pop),

という風に、無名関数を挟まずにメソッドを記述しました

ただ、これは間違った書き方ではないんですけどね🤔

なので、もし同じようにonPressed属性にpopする処理が書かれたメソッドを呼んでいる場合は、

onPressed: ()=> 実行したいメソッド(pop)

という風に書き直してみてください🍯

すると画面遷移できる様になりました!

何が起きていたのか?

はっち〜
はっち〜

画面遷移できる様になったけど、何が起きてたんだろ?

と考えた私は、もう一度

 onPressed: 実行したいメソッド(pop),

に書き換え、今回は実行したいメソッドで画面遷移先に戻るためにpopを行わず、print(“押されたよ”)とだけ記述しデバック画面を確認しました

するとどうでしょう!

ボタンが押されてないのにも関わらず、押されたと判断され、「押されたよ」が出力されています!!

原因はわかりませんがどうやらonPressed属性で

()=>を省いてメソッドのみ記述すると、自動的に記述されたメソッドが呼ばれてしまうようです

なので、今回の例で言うと

画面遷移元でボタンを押して実際には遷移してたけど、遷移先で自動的にpopが呼ばれて、遷移できてない様に見えた

みたいですね笑

はっち〜
はっち〜

ややこしや〜

でも無事に遷移できる様になってよかった!

最後に

本当に、なんともない所でコケて何時間も時間を浪費する経験って辛いですよね笑

また、なかなか解決できないエラーが出てきたら投稿したいと思います🍯

ここまで読んでいただいて、ありがとうございます!それではブーン🐝

コメント

タイトルとURLをコピーしました