MaterialApp 是我們app開發(fā)中常用的符合MaterialApp Design設(shè)計理念的入口Widget,從源碼可以看出該widget的構(gòu)造方法中有多個參數(shù),但是基本上大多數(shù)參數(shù)是可以省略的。
MaterialApp({
Key key,
this.title = '', // 設(shè)備用于為用戶識別應用程序的單行描述
this.home, // 應用程序默認路由的小部件,用來定義當前應用打開的時候,所顯示的界面
this.color, // 在操作系統(tǒng)界面中應用程序使用的主色。
this.theme, // 應用程序小部件使用的顏色喘蟆。
this.routes = const <String, WidgetBuilder>{}, // 應用程序的頂級路由表
this.navigatorKey, // 在構(gòu)建導航器時使用的鍵。
this.initialRoute, // 如果構(gòu)建了導航器鼓鲁,則顯示的第一個路由的名稱
this.onGenerateRoute, // 應用程序?qū)Ш降街付酚蓵r使用的路由生成器回調(diào)
this.onUnknownRoute, // 當 onGenerateRoute 無法生成路由(initialRoute除外)時調(diào)用
this.navigatorObservers = const <NavigatorObserver>[], // 為該應用程序創(chuàng)建的導航器的觀察者列表
this.builder, // 用于在導航器上面插入小部件蕴轨,但在由WidgetsApp小部件創(chuàng)建的其他小部件下面插入小部件,或用于完全替換導航器
this.onGenerateTitle, // 如果非空骇吭,則調(diào)用此回調(diào)函數(shù)來生成應用程序的標題字符串橙弱,否則使用標題。
this.locale, // 此應用程序本地化小部件的初始區(qū)域設(shè)置基于此值燥狰。
this.localizationsDelegates, // 這個應用程序本地化小部件的委托棘脐。
this.localeListResolutionCallback, // 這個回調(diào)負責在應用程序啟動時以及用戶更改設(shè)備的區(qū)域設(shè)置時選擇應用程序的區(qū)域設(shè)置。
this.localeResolutionCallback, //
this.supportedLocales = const <Locale>[Locale('en', 'US')], // 此應用程序已本地化的地區(qū)列表
this.debugShowMaterialGrid = false, // 打開繪制基線網(wǎng)格材質(zhì)應用程序的網(wǎng)格紙覆蓋
this.showPerformanceOverlay = false, // 打開性能疊加
this.checkerboardRasterCacheImages = false, // 打開柵格緩存圖像的棋盤格
this.checkerboardOffscreenLayers = false, // 打開渲染到屏幕外位圖的圖層的棋盤格
this.showSemanticsDebugger = false, // 打開顯示框架報告的可訪問性信息的覆蓋
this.debugShowCheckedModeBanner = true, // 在選中模式下打開一個小的“DEBUG”橫幅龙致,表示應用程序處于選中模式
})
有Dart基礎(chǔ)知識可以很清楚看出蛀缝,MaterialApp的構(gòu)造方法中的每一個參數(shù)都是可以省略的,但是官方還是要求[home] ,[routes][onGenerateRoute]這三個參數(shù)至少要填寫一個净当。如果只給出路由内斯,則必須包含Navigator.defaultRouteName(/)條目,因為當應用程序以指定不受支持的路由的意圖啟動時像啼,將使用該條目。
基本示例:
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(home: MyApp()));
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Flutter Demo"),
),
body: Center(
child: Text('Hello Flutter'),
),
);
}
}
在 Dart2 后我們可以在創(chuàng)建對象的時候省略new和const潭苞。例如:Center()等同于new Center()
在上面的例子中我們傳入了home參數(shù)自定義了一個繼承于 StatelessWidget 的組件MyApp忽冻,MyApp的build方法返回一個Scaffold組件。
看下運行效果:
比如,我現(xiàn)在覺得app的默認主題顏色太丑了此疹,我想改成紅色僧诚,怎么辦呢?
很簡單蝗碎,只要我們改變MaterialApp中 theme 參數(shù)就行了湖笨。
void main() {
runApp(new MaterialApp(
home: MyApp(),
theme: ThemeData(
primaryColor: Colors.red,
),
));
}
重新運行看下效果:
是不是感覺很簡單。
同理蹦骑,大家可以根據(jù)需要去修改其他屬性慈省。