Flutter頁面轉跳返回數據

和安卓原生一樣,Flutter 也可以返回數據到上一個頁面。安卓原生是通過不同的活動啓動方式來實現數據的返回,需要藉助回調函數,Flutter 是通過同步異步的方式實現的。

返回數據的方法是通過異步方法(async)打開頁面,然後同步(await)等待返回結果。

_navigaterToSecondPage(BuildContext context) async{
    //等待第二個頁面返回結果
    final result = await Navigator.push(
      context,
      new MaterialPageRoute(builder: (context) => new SecondPage()),
    );
    //底部顯示返回信息
    Scaffold.of(context).showSnackBar(new SnackBar(content: new Text("$result")));
}

返回數據。

Navigator.pop(context,'data2');

下面將實現一個例子,在首頁定義一個按鈕進入第二個頁面,在第二個頁面有兩個按鈕供用戶選擇,不同按鈕返回不同值,並在第一個頁面通過 snackbar 顯示返回數據。

1 .定義主頁。

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return Scaffold(
     appBar: AppBar(
       title: Text('導航返回數據demo'),
     ),
      body: Center(
        child: FirstPage(),
      ),
    );
  }
}

2 .添加一個按鈕,打開第二個頁面,等待返回值。

class FirstPage extends StatelessWidget {

  _navigaterToSecondPage(BuildContext context) async{
    //等待第二個頁面返回結果
    final result = await Navigator.push(
      context,
      new MaterialPageRoute(builder: (context) => new SecondPage()),
    );
    //底部顯示返回信息
    Scaffold.of(context).showSnackBar(new SnackBar(content: new Text("$result")));
  }

  @override
  Widget build(BuildContext context) {
    return new RaisedButton(
      onPressed: () {
        _navigaterToSecondPage(context);
      },
      child: Text('進入第二頁'),
    );
  }
}

3 .第二個頁面顯示兩個按鈕,對應返回不同值。

class SecondPage extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('第二個頁面'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new Padding(
              padding: EdgeInsets.all(20.0),
              child: RaisedButton(
                onPressed: () {
                  Navigator.pop(context,'data1');
                },
                child: Text('返回數據1'),
              ),
            ),
            new Padding(
              padding: EdgeInsets.all(20.0),
              child: RaisedButton(
                onPressed: () {
                  Navigator.pop(context,'data2');
                },
                child: Text('返回數據2'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

效果如下:
在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章