天天看點

Flutter基礎之Navigator路由跳轉

作者:搬磚小碼龍

簡介

Flutter中頁面之間的跳轉是由Navigator完成的,Navigator用來實作不同Widget之間的跳轉和資料傳遞。本文介紹頁面跳轉的兩種方式及資料傳遞,滿足日常開發需求。

頁面跳轉

先看效果

Flutter基礎之Navigator路由跳轉

直接跳轉

Navigator.push(BuildContext context, Route route)

Flutter提供的Navigator支援直接跳轉。如圖所示:

Flutter基礎之Navigator路由跳轉

Navigator調用push方法将SecondNavigatorRoute()執行個體 壓入棧中,進行頁面顯示。

注冊跳轉

Navigator.pushNamed(String routeName, arguments: arguments)

Flutter不僅提供了直接跳轉還支援自定義路由跳轉,使用 Navigator.pushName()函數,傳入需要跳轉頁面的路由,實作頁面跳轉,但是路由必須先要進行注冊。類似Android中的Activity需要在清單檔案中注冊一樣。頁面路由也需要注冊。

  1. 首頁在MyApp中進行路由注冊。
Flutter基礎之Navigator路由跳轉

routes 接收map作為值。定義路由和對應的頁面,将secondNavigatorRoute對應的路由注冊進去。

Flutter基礎之Navigator路由跳轉
  1. 注冊完路由後,使用Navigator.pushName進行頁面跳轉。
Flutter基礎之Navigator路由跳轉

跳轉傳回

Navigator.pop(BuildContext context, [ result ])

頁面之間的跳轉使用Navigator的push方法,對應的跳轉傳回需要調用Navigator的pop方法進行頁面的關閉。

Flutter基礎之Navigator路由跳轉

頁面傳值

Navigator.pushNamed(String routeName, arguments: arguments)

和Intent一樣,Flutter中的Navigator不僅可以進行頁面之間的跳轉,還可以進行頁面的傳值。

Flutter基礎之Navigator路由跳轉

Navigator的push方法的第二個參數arguments類型為可空的Object。通常用來表示需要傳遞的資料。

先看效果:

Flutter基礎之Navigator路由跳轉

在第一頁跳轉時,給arguments參數指派,當跳轉到第二頁時,接收第一頁傳遞過來的資料。

Flutter基礎之Navigator路由跳轉

接收傳遞的資料:

Flutter基礎之Navigator路由跳轉

使用ModalRoute.of(context)?.settings.arguments.toString()接收第一頁傳遞過來的資料,這裡傳遞的是字元串,是以直接toString顯示,如果傳遞的是map,接收時需要轉換成map接收。對比android,使用Flutter進行頁面傳遞資料不需要對資料進行序列化。

資料回傳

Navigator.pop(BuildContext context, [ T? result ])

在日常開發中我們都會遇到這樣的場景,從相冊中擷取圖檔,回傳給上一個頁面,Flutter同樣支援資料的回傳。

先來看Navigator.pop的構造函數。

Flutter基礎之Navigator路由跳轉

Navigator.pop函數同樣提供了result參數,用來回傳資料。下面看看具體使用。

Flutter基礎之Navigator路由跳轉

當第二頁收到第一頁傳遞來的資料後,需要做出回應。這裡調用Navigatpr.pop方法,同時回傳資料告訴第一頁資料已經收到。

Flutter基礎之Navigator路由跳轉

由于接收傳回資料是耗時操作,這裡使用async 和await接收傳回是資料。

資料列印如下:

Flutter基礎之Navigator路由跳轉

總結

Flutter中的頁面跳轉和資料傳遞比較簡單,看完本篇文章日常開發不成問題。如果使用路由跳轉,切記一定要提前注冊路由表。