https://book.flutterchina.club/chapter2/flutter_router.html
MaterialPageRoute繼承自PageRoute類,PageRoute類是一個抽象類,表示占有整個屏幕空間的一個模態路由頁面,它還定義了路由構建及切換時過渡動畫的相關接口及屬性。MaterialPageRoute 是Material組件庫提供的組件,它可以針對不同平台,實現與平台頁面切換動畫風格一致的路由切換動畫:
當打開頁面時,新的頁面會從屏幕右側邊緣一致滑動到屏幕左邊,直到新頁面全部顯示到屏幕上,而上一個頁面則會從當前屏幕滑動到屏幕左側而消失;當關閉頁面時,正好相反,當前頁面會從屏幕右側滑出,同時上一個頁面會從屏幕左側滑入。
下面我們介紹一下MaterialPageRoute 構造函數的各個參數的意義:
MaterialPageRoute({ WidgetBuilder builder, RouteSettings settings, bool maintainState = true, bool fullscreenDialog = false, })
builder是一個WidgetBuilder類型的回調函數,它的作用是構建路由頁面的具體內容,返回值是一個widget。我們通常要實現此回調,返回新路由的實例。settings包含路由的配置信息,如路由名稱、是否初始路由(首頁)。maintainState:默認情況下,當入棧一個新路由時,原來的路由仍然會被保存在內存中,如果想在路由沒用的時候釋放其所占用的所有資源,可以設置maintainState為false。fullscreenDialog表示新的路由頁面是否是一個全屏的模態對話框,在iOS中,如果fullscreenDialog為true,新頁面將會從屏幕底部滑入(而不是水平方向)。
Navigator
Navigator是一個路由管理的組件,它提供了打開和退出路由頁方法。Navigator通過一個棧來管理活動路由集合。通常當前屏幕顯示的頁面就是棧頂的路由。Navigator提供了一系列方法來管理路由棧,在此我們只介紹其最常用的兩個方法:
Future push(BuildContext context, Route route)
將給定的路由入棧(即打開新的頁面),返回值是一個Future對象,用以接收新路由出棧(即關閉)時的返回數據。
bool pop(BuildContext context, [ result ])
將棧頂路由出棧,result為頁面關閉時返回給上一個頁面的數據。
Navigator 還有很多其它方法,如Navigator.replace、Navigator.popUntil等,詳情請參考API文檔或SDK源碼注釋,在此不再贅述。下面我們還需要介紹一下路由相關的另一個概念“命名路由”。
