網站首頁 編程語言 正文
正文
在 Web/Mobile
應用程序中,導航是一個很重要的特性,因為它允許你從一個頁面跳轉到另一個頁面。
在 flutter
應用程序中,我們可以使用 push(), pop()
方法實現導航,或者編寫我們自己的路由。
準備工作
我們假設 FirstScreen
和 SecondScreen
是兩個不同的類,分別在各自的 FirstScreen.dart
和 SecondScreen.dart
文件內。
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
的內容如下:
import 'package:flutter/material.dart'; import 'package:navigation/FirstScreen.dart'; void main() { runApp(MaterialApp( home: FirstScreen())); }
第一種導航方式
我們可以使用 Navigator.push()
方法和 Navigator.pop()
方法進行頁面/屏幕導航。
為了觸發 RaisedButton
事件后從 FirstScreen
導航到 SecondScreen
。我們需要在 FirstScreen
的 build()
方法里面的 RaisedButton
中 onPressed(){}
添加如下的事件:
onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) => SecondScreen())); },
Navigator.push()
方法將給定的路由推送到路由棧中,這個路由是由 Navigator
類來維護。
現在,我們可以使用 MaterialPageRoute
路由 或者我們可以創建自己的路由。
將一個新的路由添加到棧中,我們可以通過一個 builder
函數創建一個 MaterialPageRoute
的實例。builder
函數可以創建我們想在頁面中展示的掛件。
(context) => SecondScreen()
指向 SecondSreen
上下文。
為了通過 RaisedButton
點擊事件,從 SecondScreen
返回到 FirstScreen
頁面:我們需要在 SecondScreen
頁面中添加如下的內容:
onPressed: () { Navigator.pop(context); }
這里的 pop()
方法是將導航棧中最新的路由彈出。
第二種導航方式
通過 MaterialApp
構造函數額外提供的屬性: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
屬性定義應用應該從哪個路由開始。routes
屬性定義有哪些路由是可以獲取的,且路由導航到哪些掛件。
這里,當路由導航到 /firstScreen
時,FirstScreen
掛件將構建。
現在,我們將 FirstScreen
的 onPressed(){}
的方法更改如下:
onPressed: () { Navigator.pushNamed(context, '/secondScreen'); }
這里使用命名路由 Navigator.pushNamed()
導航到第一個頁面。
在 SecondScreen
的 onPressed(){}
事件中,還是保留使用 Navigator.pop()
方法:
onPressed: () { Navigator.pop(context); }
原文鏈接:https://juejin.cn/post/7148583217912610824
相關推薦
- 2023-03-20 C#?EF去除重復列DistinctBy方式_C#教程
- 2022-10-13 Android自定義View實現簡單水波紋效果_Android
- 2023-03-30 C/C++經典楊輝三角問題解決方案_C 語言
- 2022-06-08 基于Apache?Hudi在Google云構建數據湖平臺的思路詳解_Linux
- 2021-11-18 C/C++?Qt?TableDelegate?自定義代理組件使用詳解_C 語言
- 2022-11-14 Go語言Goroutinue和管道效率詳解_Golang
- 2022-03-27 Linux上搭載Nginx負載均衡配置使用案例詳解_nginx
- 2023-01-11 Android?nonTransitiveRClass資源沖突問題淺析_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支