モケラ

Tech Sheets

mokelab

Flutterで、結果のある画面遷移をする

最終更新日:2019-05-02

Flutterでは、Androidの startActivityForResult() のように、遷移先の画面から入力結果を受け取るような画面遷移もできます。

結果を期待した画面遷移をする

遷移先の画面が結果を返してくれる場合は、 画面遷移時、await Navigator.push() とすることで結果を受け取れます。

FloatingActionButton(
  onPressed: () async { // awaitを使うのでasyncにする
    bool result = await Navigator.push(
      this.context,
      MaterialPageRoute(
        builder: (context) => NextPage())
      );
      this.setState(() {
        // バックボタンが押されたりした場合はnullになる
        if (result != null && result) {
           _counter += 100;
        }
      });
    },
    // 中略
)

呼び出し元に結果を返す

遷移先の画面で、呼び出し元に結果を返すには Navigator.pop(context, 結果) を呼びます。

例として、中央に配置したテキストをタップしたら呼び出し元に true を返すようにしてみます。

class NextPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Next Page")),
      body: Center(
        child: GestureDetector(
          child: Text("画面その2だよ"),
          // タップされたら、呼び出し元に結果を返す
          onTap: () { Navigator.pop(context, true); },
        )
      ),      
    );    
  }
}

一覧に戻る