Flutter使用push pop方法及路由進(jìn)行導(dǎo)航詳解
正文
在 Web/Mobile
應(yīng)用程序中,導(dǎo)航是一個(gè)很重要的特性,因?yàn)樗试S你從一個(gè)頁(yè)面跳轉(zhuǎn)到另一個(gè)頁(yè)面。
在 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)行頁(yè)面/屏幕導(dǎo)航。
為了觸發(fā) RaisedButton
事件后從 FirstScreen
導(dǎo)航到 SecondScreen
。我們需要在 FirstScreen
的 build()
方法里面的 RaisedButton
中 onPressed(){}
添加如下的事件:
onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) => SecondScreen())); },
Navigator.push()
方法將給定的路由推送到路由棧中,這個(gè)路由是由 Navigator
類來(lái)維護(hù)。
現(xiàn)在,我們可以使用 MaterialPageRoute
路由 或者我們可以創(chuàng)建自己的路由。
將一個(gè)新的路由添加到棧中,我們可以通過一個(gè) builder
函數(shù)創(chuàng)建一個(gè) MaterialPageRoute
的實(shí)例。builder
函數(shù)可以創(chuàng)建我們想在頁(yè)面中展示的掛件。
(context) => SecondScreen()
指向 SecondSreen
上下文。
為了通過 RaisedButton
點(diǎn)擊事件,從 SecondScreen
返回到 FirstScreen
頁(yè)面:我們需要在 SecondScreen
頁(yè)面中添加如下的內(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è)頁(yè)面。
在 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)文章
蘋果公司推出的新編程語(yǔ)言Swift簡(jiǎn)介和入門教程
這篇文章主要介紹了蘋果公司推出的新編程語(yǔ)言Swift簡(jiǎn)介和入門教程,Swift是蘋果于WWDC 2014.6.3發(fā)布的編程語(yǔ)言,主要用來(lái)替代Objective-C,需要的朋友可以參考下2014-06-06iOS開發(fā)中WebView的基本使用方法簡(jiǎn)介
這篇文章主要介紹了iOS開發(fā)中WebView的基本使用方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-11-11iOS 鍵盤輸入限制(只能輸入字母,數(shù)字,禁止輸入特殊符號(hào))
本文主要介紹了iOS中鍵盤輸入限制(只能輸入字母,數(shù)字,禁止輸入特殊符號(hào))的方法。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04IOS中MMDrawerController第三方抽屜效果的基本使用示例
這篇文章主要介紹了IOS中MMDrawerController第三方抽屜效果的基本使用示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02分享一個(gè)iOS下實(shí)現(xiàn)基本繪畫板功能的簡(jiǎn)單方法
這篇文章主要介紹了iOS下實(shí)現(xiàn)基本繪畫板功能的簡(jiǎn)單方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-10-10iOS應(yīng)用設(shè)計(jì)模式開發(fā)中對(duì)簡(jiǎn)單工廠和工廠方法模式的運(yùn)用
這篇文章主要介紹了iOS應(yīng)用設(shè)計(jì)模式開發(fā)中對(duì)簡(jiǎn)單工廠和工廠方法模式的運(yùn)用,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-03-03iOS bounds學(xué)習(xí)筆記以及仿寫UIScrollView部分功能詳解
這篇文章主要為大家詳細(xì)介紹了iOS bounds學(xué)習(xí)筆記,以及仿寫UIScrollView部分功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05