注意:無特殊說明,F(xiàn)lutter版本及Dart版本如下:
目前創(chuàng)新互聯(lián)建站已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、服務器托管、企業(yè)網(wǎng)站設(shè)計、天山網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
- Flutter版本: 1.12.13+hotfix.5
- Dart版本: 2.7.0
在學習Flutter的過程中我們第一個看見的控件應該就是MaterialApp,畢竟創(chuàng)建一個新的Flutter項目的時候,項目第一個組件就是MaterialApp,這是一個Material風格的根控件,基本用法如下:
MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('老孟'),
),
),
)
home
參數(shù)是App默認顯示的頁面,效果如下:
title
參數(shù)是應用程序的描述,在Android上,在任務管理器的應用程序快照上面顯示,在IOS上忽略此屬性,IOS上任務管理器應用程序快照上面顯示的是
Info.plist
文件中的
CFBundleDisplayName
。如果想根據(jù)區(qū)域顯示不同的描述使用
onGenerateTitle
,用法如下:
MaterialApp(
title: '老孟',
onGenerateTitle: (context) {
var local = Localizations.localeOf(context);
if (local.languageCode == 'zh') {
return '老孟';
}
return 'laomeng';
},
...
)
routes
、
initialRoute
、
onGenerateRoute
、
onUnknownRoute
是和路由相關(guān)的4個屬性,路由簡單的理解就是頁面,路由的管理通常是指頁面的管理,比如跳轉(zhuǎn)、返回等。
MaterialApp按照如下的規(guī)則匹配路由:
/
,
home
不為null則使用
home
。routes
指定的路由。onGenerateRoute
生成的路由,處理除
home
和
routes
以外的路由。onUnknownRoute
。是不是還是比較迷糊,不要緊,看下面的例子就明白了:
MaterialApp(
routes: {
'container': (context) => ContainerDemo(),
'fitted': (context) => FittedBoxDemo(),
'icon': (context) => IconDemo(),
},
initialRoute: '/',
home: Scaffold(
appBar: AppBar(
title: Text('老孟'),
),
),
onGenerateRoute: (RouteSettings routeSettings){
print('onGenerateRoute:$routeSettings');
if(routeSettings.name == 'icon'){
return MaterialPageRoute(builder: (context){
return IconDemo();
});
}
},
onUnknownRoute: (RouteSettings routeSettings){
print('onUnknownRoute:$routeSettings');
return MaterialPageRoute(builder: (context){
return IconDemo();
});
},
...
)
initialRoute
設(shè)置為
/
,那么加載
home
頁面。
如果
initialRoute
設(shè)置為
icon
,在
routes
中存在,所以加載
routes
中指定的路由,即IconDemo頁面。
如果
initialRoute
設(shè)置為
icons1
,此時
routes
中并不存在名稱為
icons1
的路由,調(diào)用
onGenerateRoute
,如果
onGenerateRoute
返回路由頁面,則加載此頁面,如果返回的是null,且
home
不為null,則加載
home
參數(shù)指定的頁面,如果
home
為null,則回調(diào)
onUnknownRoute
。
theme
、
darkTheme
、
themeMode
是關(guān)于主題的參數(shù),設(shè)置整個App的主題,包括顏色、字體、形狀等,修改主題顏色為紅色用法如下:
MaterialApp(
theme: ThemeData(
primaryColor: Colors.red
),
darkTheme: ThemeData(
primaryColor: Colors.red
),
themeMode: ThemeMode.dark,
效果如下:
locale
、
localizationsDelegates
、
localeListResolutionCallback
、
localeResolutionCallback
、
supportedLocales
是區(qū)域設(shè)置和國際化相關(guān)的參數(shù),如果App支持多國語言,那么就需要設(shè)置這些參數(shù),默認情況下,F(xiàn)lutter僅支持美國英語,如果想要添加其他語言支持則需要指定其他MaterialApp屬性,并引入flutter_localizations 包,到2019年4月,flutter_localizations包已經(jīng)支持52種語言,如果你想讓你的應用在iOS上順利運行,那么你還必須添加“flutter_cupertino_localizations”包。
在
pubspec.yaml
文件中添加包依賴:
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
flutter_cupertino_localizations: ^1.0.1
設(shè)置如下:
MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate
],
supportedLocales: [
const Locale('zh', 'CH'),
const Locale('en', 'US'),
],
...
)
supportedLocales
參數(shù)指定了當前App支持的語言。
localeResolutionCallback
和
localeListResolutionCallback
都是對語言變化的監(jiān)聽,比如切換系統(tǒng)語言等,
localeResolutionCallback
和
localeListResolutionCallback
的區(qū)別是
localeResolutionCallback
返回的第一個參數(shù)是當前語言的Locale,而
localeListResolutionCallback
返回當前手機支持的語言集合,在早期的版本手機沒有支持語言的集合,只顯示當前語言,在設(shè)置->語言和地區(qū)的設(shè)置選項效果如下:
在早期是沒有紅色區(qū)域的。
因此我們只需使用
localeListResolutionCallback
即可,通過用戶手機支持的語言和當前App支持的語言返回一個語言選項。
通常情況下,如果用戶的語言正好是App支持的語言,那么直接返回此語言,如果不支持,則返回一個默認的語言,用法如下:
MaterialApp(
localeListResolutionCallback:
(List<Locale> locales, Iterable<Locale> supportedLocales) {
if (locales.contains('zh')) {
return Locale('zh');
}
return Locale('en');
},
...
)
在App中也可以通過如下方法獲取區(qū)域設(shè)置:
Locale myLocale = Localizations.localeOf(context);
還有幾個方便調(diào)試的選項,debugShowMaterialGrid:打開網(wǎng)格調(diào)試
MaterialApp(
debugShowMaterialGrid: true,
效果如下:
showPerformanceOverlay:打開性能檢測
MaterialApp(
showPerformanceOverlay: true,
效果如下:
右上角有一個DEBUG的標識,這是系統(tǒng)在debug模式下默認顯示的,不顯示的設(shè)置如下:
MaterialApp(
debugShowCheckedModeBanner: true,
...
)
我想你一定能想到既然有Material風格的MaterialApp,那么也應該有Cupertino(ios)風格與之相對應,是的Cupertino風格的是CupertinoApp,CupertinoApp的屬性及用法和MaterialApp一模一樣,就不在具體介紹了。
歡迎加入Flutter的微信交流群( laomengit),一起學習,一起進步,生活不止眼前的茍且,還有詩和《遠方》。
當然我也非常希望您關(guān)注我個人的公眾號,里面有各種福利等著大家哦。
網(wǎng)站欄目:還記得第一個看到的Flutter組件嗎?-創(chuàng)新互聯(lián)
新聞來源:http://aaarwkj.com/article32/ddogpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、品牌網(wǎng)站設(shè)計、響應式網(wǎng)站、網(wǎng)站改版、品牌網(wǎng)站制作、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容