Flutter使用push pop方法及路由進(jìn)行導(dǎo)航詳解
正文
在 Web/Mobile 應(yīng)用程序中,導(dǎo)航是一個(gè)很重要的特性,因?yàn)樗试S你從一個(gè)頁面跳轉(zhuǎn)到另一個(gè)頁面。
在 flutter 應(yīng)用程序中,我們可以使用 push(), pop() 方法實(shí)現(xiàn)導(dǎo)航,或者編寫我們自己的路由。
準(zhǔn)備工作
我們假設(shè) FirstScreen 和 SecondScreen 是兩個(gè)不同的類,分別在各自的 FirstScreen.dart 和 SecondScreen.dart 文件內(nèi)。
FirstScreen.dart 文件如下:
import 'package:flutter/material.dart';
import 'package:navigation/SecondScreen.dart';
class FirstScreen extends StatefulWidget {
@override
_FirstScreenState createState() => _FirstScreenState();
}
class _FirstScreenState extends State<FirstScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("First Screen"),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
"Hello to First Screen",
style: TextStyle(
fontSize: 20,
),
),
SizedBox(
height: 10,
),
Center(
child: RaisedButton(
onPressed: () {},
child: Text(
"First Screen",
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold
),
),
),
),
],
),
);
}
}
SecondScreen.dart 文件如下:
import 'package:flutter/material.dart';
class SecondScreen extends StatefulWidget {
@override
_SecondScreenState createState() => _SecondScreenState();
}
class _SecondScreenState extends State<SecondScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Second Screen"),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
"Welcome on Second Screen",
style: TextStyle(
fontSize: 20,
),
),
SizedBox(
height: 10,
),
Center(
child: RaisedButton(
onPressed: () {},
child: Text(
"Second Screen",
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold
),
),
),
),
],
),
);
}
}
main.dart 的內(nèi)容如下:
import 'package:flutter/material.dart';
import 'package:navigation/FirstScreen.dart';
void main() {
runApp(MaterialApp(
home: FirstScreen()));
}
第一種導(dǎo)航方式
我們可以使用 Navigator.push() 方法和 Navigator.pop() 方法進(jìn)行頁面/屏幕導(dǎo)航。
為了觸發(fā) RaisedButton 事件后從 FirstScreen 導(dǎo)航到 SecondScreen。我們需要在 FirstScreen 的 build() 方法里面的 RaisedButton 中 onPressed(){} 添加如下的事件:
onPressed: () {
Navigator.push(context, MaterialPageRoute(builder: (context) => SecondScreen()));
},
Navigator.push() 方法將給定的路由推送到路由棧中,這個(gè)路由是由 Navigator 類來維護(hù)。
現(xiàn)在,我們可以使用 MaterialPageRoute路由 或者我們可以創(chuàng)建自己的路由。
將一個(gè)新的路由添加到棧中,我們可以通過一個(gè) builder 函數(shù)創(chuàng)建一個(gè) MaterialPageRoute 的實(shí)例。builder 函數(shù)可以創(chuàng)建我們想在頁面中展示的掛件。
(context) => SecondScreen() 指向 SecondSreen 上下文。
為了通過 RaisedButton 點(diǎn)擊事件,從 SecondScreen 返回到 FirstScreen 頁面:我們需要在 SecondScreen 頁面中添加如下的內(nèi)容:
onPressed: () {
Navigator.pop(context);
}
這里的 pop() 方法是將導(dǎo)航棧中最新的路由彈出。
第二種導(dǎo)航方式
通過 MaterialApp 構(gòu)造函數(shù)額外提供的屬性:initialRoute 和 routes。
import 'package:flutter/material.dart'
import 'package:navigation/FirstScreen.dart'
import 'package:navigation/SecondScreen.dart'
void main() {
runApp(MaterialApp(
initialRoute: '/firstScreen',
routes: {
'/firstScreen': (context) => FirstScreen(),
'/secondScreen': (context) => SecondScreen(),
},
home: FirstScreen(),
));
}
initialRoute 屬性定義應(yīng)用應(yīng)該從哪個(gè)路由開始。routes 屬性定義有哪些路由是可以獲取的,且路由導(dǎo)航到哪些掛件。
這里,當(dāng)路由導(dǎo)航到 /firstScreen 時(shí),FirstScreen 掛件將構(gòu)建。
現(xiàn)在,我們將 FirstScreen 的 onPressed(){} 的方法更改如下:
onPressed: () {
Navigator.pushNamed(context, '/secondScreen');
}
這里使用命名路由 Navigator.pushNamed() 導(dǎo)航到第一個(gè)頁面。
在 SecondScreen 的 onPressed(){} 事件中,還是保留使用 Navigator.pop() 方法:
onPressed: () {
Navigator.pop(context);
}

以上就是Flutter使用push pop方法及路由進(jìn)行導(dǎo)航詳解的詳細(xì)內(nèi)容,更多關(guān)于Flutter push pop方法路由導(dǎo)航的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
iOS 鍵盤輸入限制(只能輸入字母,數(shù)字,禁止輸入特殊符號(hào))
本文主要介紹了iOS中鍵盤輸入限制(只能輸入字母,數(shù)字,禁止輸入特殊符號(hào))的方法。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04
IOS中MMDrawerController第三方抽屜效果的基本使用示例
這篇文章主要介紹了IOS中MMDrawerController第三方抽屜效果的基本使用示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
分享一個(gè)iOS下實(shí)現(xiàn)基本繪畫板功能的簡單方法
這篇文章主要介紹了iOS下實(shí)現(xiàn)基本繪畫板功能的簡單方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-10-10
iOS應(yīng)用設(shè)計(jì)模式開發(fā)中對(duì)簡單工廠和工廠方法模式的運(yùn)用
這篇文章主要介紹了iOS應(yīng)用設(shè)計(jì)模式開發(fā)中對(duì)簡單工廠和工廠方法模式的運(yùn)用,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03
iOS bounds學(xué)習(xí)筆記以及仿寫UIScrollView部分功能詳解
這篇文章主要為大家詳細(xì)介紹了iOS bounds學(xué)習(xí)筆記,以及仿寫UIScrollView部分功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05

