第三百七十六回

文章目錄

  • 1 .概念介紹
  • 2. 實現方法
  • 3. 示例代碼

我們在上一章回中介紹了在頁面之間共傳遞數據相關的內容,本章回中將介紹如何攔截路由.閑話休提,讓我們一起Talk Flutter吧。

在這里插入圖片描述

1 .概念介紹

本章回中介紹的路由攔截是指在路由運行過程中,對路由做一些處理。在Flutter中通過路由來實現頁面之間的跳轉,如果想在跳轉過程中做一些事情怎么辦呢?那么就
需要路由攔截了。本章回中將詳細介紹如何實現路由攔截。

2. 實現方法

通常情況下路由都存放在MaterialApp組件的routes屬性中,我們也叫它路由表,該表中的內容明確指出了路由的方向,如果遇到一些不在路由表中的路由,不知道它
的方向,那么就可以對這種路由進行攔截。MaterialApp組件提供了兩個屬性:onGenerateRoute和onUnknownRoute。這兩個屬性都是方法類型,詳細如下:

  • 方法返回的值就是路由的方向,或者說路由跳轉到的頁面;
  • 方法的參數中包含路由參數中內容,比如路由名稱,路由參數等;
  • onGenerateRoute屬性優先于onUnknownRoute執行;
  • 如果onGenerateRoute屬性已經攔截了路由,那么onUnknownRoute屬性不再重復攔截;
    最后我在強調一下,這兩個屬性對應的方法只能攔截不在路由表中的路由,而且需要和pushNamed方法配合使用才可以。稍后我們將通過示例代碼來演示。

3. 示例代碼

///主要用來攔截不在routes屬性中定義的路由,需要和pushNamed方法配合使用才能回調該屬性對應的方法
onGenerateRoute:(settings) {if(settings.name == 'SecondRouter') {debugPrint('setting: ${settings.toString()}');return MaterialPageRoute(builder: (context){return SecondRouter(data: 'data from home');},///如果路由中包含參數,一定要給這個屬性賦值,不然路由中的參數為nullsettings: settings);}else {debugPrint('setting: ${settings.toString()}');return null;}
},
///主要用來攔截不在routes屬性中定義的路由,需要和pushNamed方法配合使用才能回調該屬性對應的方法
///優先級低于onGenerateRoute,只有onGenerateRoute方法返回Null時才回調此屬性對應的方法
onUnknownRoute: (settings) {debugPrint('unknown setting: ${settings.toString()}');return MaterialPageRoute(builder: (context){///這里可以創建一個未知錯誤的界面,遇到未知路由則跳轉到該界面return SecondRouter(data: 'data from home');});
},onPressed: () {debugPrint('second router clicked');///創建兩個路由,SecondRouter不會被攔截,因為routers屬性對應的路由表中有該屬性///ThirdRouter會被攔截,因它不在路由表中,先是onGenerateRoute攔截,但是沒有處理,轉到onUnknownRoute中Navigator.pushNamed(context, 'SecondRouter',arguments: 'data from arguments');Navigator.pushNamed(context, 'ThirdRouter',arguments: 'data from arguments');
}

上面的代碼中給出了路由攔截的代碼,并且添加了詳細的注釋。onPressed屬性中的代碼可以放到Button中,這樣可以在點擊按鈕的時候進行通過路由來跳轉。代碼中
攔截攔截路由后只打印出了路由中的參數,大家可以依據項目需求在這里添加一些業務邏輯。這里只列出了核心代碼,完整的代碼可以到Github上查看main.dart文件。
看官們,關于"如何攔截路由"相關的內容就介紹到這里,歡迎大家在評論區交流與討論!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712585.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712585.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712585.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

會了會了會了

public class text9 {/*在實際開發中,如果我們需要在多種情況中選擇其中一個,就可以用switch語句。當我m們撥打電話,會有一些按鍵選擇。假設我們撥打了一個機票預訂電話,電話中提示:1機票查詢2機票預訂3機票改簽4退出服務其他按鍵…

論文閱讀_代碼生成模型_CodeLlama

英文名稱: Code Llama: Open Foundation Models for Code 中文名稱: Code Llama:開放基礎代碼模型 鏈接: https://arxiv.org/abs/2308.12950 代碼: https://github.com/facebookresearch/codellama 作者: Baptiste Rozire, Jonas Gehring, Fabian Gloeckle, Sten So…

【前端素材】推薦優質在線花卉商城電商網頁Flowery平臺模板(附源碼)

一、需求分析 1、系統定義 在線花卉商城是一個通過互聯網提供花卉銷售服務的電子商務平臺,用戶可以在該平臺上瀏覽、選擇和購買各種花卉產品。 2、功能需求 在線花卉商城是一個通過互聯網提供花卉銷售服務的電子商務平臺,用戶可以在該平臺上瀏覽、選…

vscode在windows環境不能使用終端安裝依賴

會報這樣的錯誤提示 解決思路: 1、vscode用管理員打開 (非必須) 2、設置策略 打開 windows powerShell . 輸入命令 set-ExecutionPolicy RemoteSigned 然后 Y . 查看是否設置成功 get-executionpolicy 3、下載總是超時,設置鏡像源 查看鏡像源 npm …

【知識分享】vue制作一個頁面計算器

1.制作思路 制作一個簡單的頁面計算器可以分為以下幾個步驟: (1)創建 Vue 組件,包括顯示屏和按鈕組件。 (2)設置數據屬性,用于存儲計算器的當前狀態(如顯示屏上的數字&#xff09…

藍橋杯-天數

//此題屬于簡單 #include <iostream> using namespace std; int main() { int n; cin>>n; if(n2) { cout<<28; return 0; } if(n1||n3||n5||n7||n8||n10||n12)//一定要記得寫成n什么&#xff0c;每個都要寫&#xff0c;不要漏掉 { cou…

常見漏洞的流量特征

1、SQL注入漏洞 查看url / Referer字段/User-Agent字段/cookie字段 出現一些特殊字符&#xff08;eg&#xff1a;單引號【‘】、雙引號【“”】、括號【&#xff08;&#xff09;】、單引號括號【‘&#xff08;】、雙引號括號【“&#xff08;】等一些常見的特殊的字符&#…

數通HCIE和云計算HCIE哪個好一點?

數通是網絡的基礎知識&#xff0c;也是入門人員必學的方向&#xff0c;相對也會簡單些&#xff0c;學習數通&#xff0c;可以很好的學習其他的方向。數通的就業范圍也比較廣&#xff0c;運營商、企業、政府還是互聯網公司&#xff0c;都需要大量的數通工程師來搭建和維護網絡&a…

探索rsync遠程同步和SSH免密登錄的奧秘

目錄 集群分發腳本xsyncscp&#xff08;secure copy&#xff09;安全拷貝rsync 遠程同步工具集群分發腳本 SSH免密登錄免密登錄原理SSH免密登錄配置生成公鑰和私鑰授權測試 在現代科技飛速發展的時代&#xff0c;數據的備份和遷移成為了一個重要的課題。其中&#xff0c;rsync遠…

大數據畢業設計之前端04:管理系統為什么要自己實現圖標組件

關鍵字&#xff1a;BuildAdmin、Icon、圖標、Vue、ElementUI 前言 說到圖標&#xff0c;在BuildAdmin中用到的地方很多。比如上一篇中的折疊圖標&#xff0c;還有菜單欄圖標、導航菜單欄圖標等。常見的圖標有&#xff1a;ElementUI圖標、font-awesome、iconfont阿里圖標以及本…

94. 遞歸實現排列型枚舉 刷題筆記

思路 依次枚舉 每個位置用哪個數字 要求按照字典序最小來輸出 而每次搜索下一層時i都是從1開始 也就是說 如果有小的數可以填上 那么該方案會填上這個數字 例如 當n等于3 第一次搜索 1 2 3輸出后返回 返回后此時i3 第二個位置填3 1 3 2 輸出后返回 此時返回到第一層…

云計算 2月21號 (linux文件及用戶管理)

一、文件管理 1.1快捷鍵 編輯命令&#xff1a; Ctrl a &#xff1a;移到命令行首 Ctrl e &#xff1a;移到命令行尾 Ctrl u &#xff1a;從光標處刪除至命令行首 Ctrl k &#xff1a;從光標處刪除至命令行尾 Ctrl w &#xff1a;從光標處刪除至字首 Ctrl d &#x…

20240301-2-ZooKeeper面試題(二)

11. Chroot 特性 3.2.0 版本后&#xff0c;添加了 Chroot 特性&#xff0c;該特性允許每個客戶端為自己設置一個命名空間。如果一個客戶端設置了 Chroot&#xff0c;那么該客戶端對服務器的任何操作&#xff0c;都將會被限制在其自己的命名空間下。 通過設置 Chroot&#xff…

Win11遠程桌面登陸教程

必備軟件 Remote Desktop 這個軟件用于便捷操作 Tailscale 這個用于創建虛擬局域網讓兩臺設備處于同一個網段便于遠程連接 詳細步驟 0、打開電腦設置允許遠程連接模式 把這里的開關打開就行。 1、設置允許登陸的用戶以及密碼 在管理員模式下的宿主電腦上面輸入以下命令…

支付寶小程序中喚起支付(前后端)

Java后臺獲取支付寶支付唯一訂單號 /*** 支付寶小程序支付*/PostMapping(value "/xcxPayZFBTHREE")ResponseBodypublic Map<String,Object> xcxPayZFBTHREE(RequestBody byte[] req) {HashMap<String, Object> objectObjectMap new HashMap<>();…

jax可微分編程的筆記(7)

jax可微分編程的筆記(7) 第七章 優化算法 從優化理論的整體框架來看&#xff0c;任何優化問題都可以被分解為 模型的建立&#xff0c;損失函數的構造以及優化算法的選取這三個部分。 其中優化算法的具體形式&#xff0c;又依賴于步長下降方向和終止條件 的選取。 對于多維函…

JavaScript 瀏覽器元素滾動 scrollIntoView()

scrollIntoView() ? DOM 規范中沒有涉及的一個問題是如何滾動頁面中的某個區域。為填充這方面的缺失&#xff0c;不同瀏覽器實現了不同的控制滾動的方式。在所有這些專有方法中&#xff0c;HTML5 選擇了標準化 scrollIntoView()。 ? scrollIntoView() 方法存在于所有 HTML …

深度學習中常見的backbone、neck、head的理解

在深度學習中&#xff0c;常見的backbone、neck和head是指網絡結構的不同部分&#xff0c;它們各自承擔著不同的功能&#xff1a; Backbone&#xff08;骨干網絡&#xff09;&#xff1a;骨干網絡通常是指整個深度神經網絡的主要部分&#xff0c;負責提取輸入數據的特征。骨干網…

寒假作業Day 02

這是第二天的作業&#xff0c;fighting&#xff01; Day 02 一、選擇題 首先char* s[6]是指針數組&#xff0c;也就是其存儲的都是這些字符串的地址&#xff0c;其實際上的類型為char**&#xff0c;而fun函數傳入了s數組的首地址。而后續fun函數中打印字符&#xff0c;p[i]即…

ad18學習筆記十六:如何放置精準焊盤到特定位置,捕抓功能的講解

網上倒是一堆相關的指導 AD軟件熟練度提升&#xff0c;如何設置板框捕捉&#xff1f;_嗶哩嗶哩_bilibili 關于Altium Designer 20 的捕抓功能的講解_ad捕捉設置-CSDN博客 AD軟件捕捉進階實例&#xff0c;如何精確的放置布局元器件&#xff1f;_嗶哩嗶哩_bilibili AD繪制PCB…