MaterialApp在上一篇文章講到它是App程序中最重要的組件,可以構(gòu)建出了app基本的輪廓、主題和色彩。下面我們來認(rèn)識下它吧。
有一個(gè)TextStyle類型的屬性_errorTextStyle 和ThemeMode枚舉。以及下列一些屬性
{
this.navigatorKey,? ?
this.scaffoldMessengerKey,
this.home,
Map<String, WidgetBuilder> this.routes = const <String, WidgetBuilder>{},
this.initialRoute,
this.onGenerateRoute,
this.onGenerateInitialRoutes,
this.onUnknownRoute,
List<NavigatorObserver> this.navigatorObservers = const <NavigatorObserver>[],
this.builder,
this.title = '',
this.onGenerateTitle,
this.color,
this.theme,
this.darkTheme,
this.highContrastTheme,
this.highContrastDarkTheme,
this.themeMode = ThemeMode.system,
this.locale,
this.localizationsDelegates,
this.localeListResolutionCallback,
this.localeResolutionCallback,
this.supportedLocales = const <Locale>[Locale('en', 'US')],
this.debugShowMaterialGrid = false,
this.showPerformanceOverlay = false,
this.checkerboardRasterCacheImages = false,
this.checkerboardOffscreenLayers = false,
this.showSemanticsDebugger = false,
this.debugShowCheckedModeBanner = true,? ?
this.shortcuts,
this.actions,
this.restorationScopeId,
this.scrollBehavior,
this.useInheritedMediaQuery = false,
}
屬性較多,重點(diǎn)介紹常用屬性:
title 標(biāo)題。在Android上,標(biāo)題顯示在任務(wù)管理器的應(yīng)用程序快照上方,當(dāng)用戶按下“最近的應(yīng)用程序”按鈕時(shí),會(huì)顯示這些快照。在iOS上,無法使用此值。在web上,它用作頁面標(biāo)題,顯示在瀏覽器的打開選項(xiàng)卡列表中
debugShowCheckedModeBanner 在調(diào)試模式下打開一個(gè)小“DEBUG”橫幅,模擬機(jī)(右上角)debug標(biāo)記是否隱藏,默認(rèn)true是顯示
home
應(yīng)用程序默認(rèn)路由的小部件([Navigator.defaultRouteName],即/)。
這是正常啟動(dòng)應(yīng)用程序時(shí)首先顯示的路由,除非指定了[initialRoute]。
如果home指定了,那么 routes屬性中就不能再注冊根路由,記不能有 {"/": (context) => 一個(gè)組件,} home 將會(huì)取代根路由。
如果[initialRoute]指定了路由則不顯示home的部件而顯示initialRoute路由;如果[initialRoute]指定的路由無法顯示,又將會(huì)顯示home的部件。
routes 路由地址注冊,將要跳轉(zhuǎn)的頁面的標(biāo)識,在跳轉(zhuǎn)的地方使用
Navigator.pushNamed(context, '/routName')就可以實(shí)現(xiàn)
initialRoute
初始化路由的名稱。如果有[navigator],則顯示的是它,也是第一條路由。
默認(rèn)為[dart:ui.PlatformDispatcher.defaultRouteName],這可能會(huì)被啟動(dòng)應(yīng)用程序的代碼覆蓋。
只有在提供了路線(通過[home]、[routes]、[onGenerateRoute]或[onUnknownRoute])的情況下,才能構(gòu)建[navigator];如果不是,[initialRoute]必須為null,[navigator]不得為null。
如果應(yīng)用程序中initialRoute沒有實(shí)現(xiàn)或者實(shí)現(xiàn)錯(cuò)誤從而找不到相應(yīng)的路由,那么將忽略指定的[initialRoute]指定路由,而使用“/”根路由或者使用[home]指定的部件。
如果[initialRoute]指定了路由則不顯示home的部件而顯示initialRoute路由,initialRoute路由“返回上一級頁面”的操作將是返回到[home]指定的部件。
onGenerateRoute 將應(yīng)用導(dǎo)航到命名路由時(shí)使用的路由生成器回調(diào)。
onGenerateInitialRoutes
如果提供了[initialRoute],則用于生成初始路由的路由生成器回調(diào)。
如果未設(shè)置此屬性,則基礎(chǔ)[Navigator.onGenerateInitialRoutes]將默認(rèn)為[Navigator.defaultGenerateInitialRoutes]。
onUnknownRoute
當(dāng)[onGenerateRoute]無法生成路由(initialRoute除外)時(shí)調(diào)用。
此回調(diào)通常用于錯(cuò)誤處理。例如,此回調(diào)可能始終生成一個(gè)“未找到”頁面,描述未找到的路由。
theme
此應(yīng)用程序的材質(zhì)小部件的默認(rèn)視覺屬性,如顏色、字體和形狀。
還可以指定第二個(gè)[darkTheme(暗主題)][ThemeData(主題數(shù)據(jù))]值,用于提供用戶界面的暗版本。如果提供了[darkTheme(暗主題)],則[themeMode(主題模式)]將控制使用哪個(gè)主題。
此屬性的默認(rèn)值是[ThemeData.light()]。
navigatorKey
構(gòu)建[導(dǎo)航器]時(shí)要使用的鍵。
如果指定了[navigatorKey],則可以直接操作[Navigator],而無需首先通過[Navigator.of]:從[navigatorKey]獲取[BuildContext],使用[GlobalKey.currentState]獲取器。
如果更改,將創(chuàng)建一個(gè)新的[導(dǎo)航器],從而丟失過程中的所有應(yīng)用程序狀態(tài);在這種情況下,還必須更改[navigatorObservers],因?yàn)橐郧暗挠^察員將附加到以前的導(dǎo)航器。
只有當(dāng)[onGenerateRoute]不為null時(shí),才會(huì)生成[導(dǎo)航器];如果為null,[navigatorKey]也必須為null。
color
操作系統(tǒng)界面中應(yīng)用程序使用的主顏色。
例如,在Android上,這是應(yīng)用程序切換器中應(yīng)用程序使用的顏色。
useInheritedMediaQuery
如果為true,則將使用繼承的MediaQuery。如果它不可用,或者是錯(cuò)誤的,那么將從窗口構(gòu)建一個(gè)。
不能為null,默認(rèn)為false。
ScrollBehavior
[滾動(dòng)行為]描述[可滾動(dòng)]小部件的行為。提供[滾動(dòng)行為]可以設(shè)置應(yīng)用程序中的默認(rèn)[滾動(dòng)物理],并管理[滾動(dòng)條]和[發(fā)光或滾動(dòng)指示器]等[可滾動(dòng)]裝飾。
如果為null,則默認(rèn)為[材質(zhì)CrollBehavior]。
記: