属性
navigatorKey
GlobalKey<NavigatorState> ,navigator 键缓存的跳转页面管理,保存状态。同时也可以自己添加一个进行重写,
import 'package:flutter/widgets.dart';
class HomeNavigatorState extends NavigatorState {
@override
void initState() {
super.initState();
}
}
GlobalKey<HomeNavigatorState> globalKey = GlobalKey<HomeNavigatorState>();
return MaterialApp(
navigatorKey: globalKey,
);
不过官方推荐尽量少用 GlobalKey 键
home
启动后展示的第一个页面。 根据具体布局展示,返回一个 Widget 就好。如
class HelloPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('首页'),
),
body: Center(
child: Text('Hello Flutter'),
),
);
}
}
routes
页面路径的映射,使用如下
routes:{
Details.routeName: (context) => new Details(),
}
lib 的 details 路径下
class Details extends StatefulWidget {
static String routeName = "/details";
@override
_DetailsState createState() => new _DetailsState();
}
class _DetailsState extends State<Details> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("详情"),
),
body: Center(
child: Container(
color: Colors.blueAccent,
child: Text(
'第二页',
style: TextStyle(fontSize: 32),
),
),
),
);
}
}
然后跳转就可以直接使用
Navigator.of(context).pushNamed(Details.routeName);
initialRoute
指定自动跳转的的第二个页面
initialRoute:Details.routeName,
onGenerateRoute
当跳转的页面在 routes 属性未配置或者找不到的时候,则会调用该方法创建页面,反之,则不调用。如
需要配置的方法为
typedef RouteFactory = Route<dynamic> Function(RouteSettings settings);
所以使用如下
onGenerateRoute: (RouteSettings setting) {
return new PageRouteBuilder(
pageBuilder: (BuildContext context, Animation animation,
Animation secondaryAnimation) {
//生成的页面
return new Details();
},
);
},
onUnknownRoute
当跳转的页面在 routes 属性未配置或者找不到并且 onGenerateRoute 返回 null 的时候,则会调用该方法创建页面,反之,则不调用。使用方法和 onGenerateRoute 属性一样,通常这里用来做一些 404 页面。
onUnknownRoute: (RouteSettings setting) {
//当 onGenerateRoute 返回 null 的时候调用,通常处理一些未找到的页面
return new PageRouteBuilder(
pageBuilder: (BuildContext context, Animation animation,
Animation secondaryAnimation) {
//这里为返回的Widget
return Text('404');
},
);
},
navigatorObservers
List<NavigatorObserver> , NavigatorObserver 类方法的监听回调。包括
navigatorObservers:<NavigatorObserver>[
new NavigatorObserver(),
],
class HomeNavObserver extends NavigatorObserver{
@override
void didPush(Route route, Route previousRoute) {
// TODO: implement didPush
super.didPush(route, previousRoute);
}
@override
void didPop(Route route, Route previousRoute) {
// TODO: implement didPop
super.didPop(route, previousRoute);
}
@override
void didRemove(Route route, Route previousRoute) {
// TODO: implement didRemove
super.didRemove(route, previousRoute);
}
@override
void didReplace({Route newRoute, Route oldRoute}) {
// TODO: implement didReplace
super.didReplace(newRoute, oldRoute);
}
@override
void didStartUserGesture(Route route, Route previousRoute) {
// TODO: implement didStartUserGesture
super.didStartUserGesture(route, previousRoute);
}
@override
void didStopUserGesture() {
// TODO: implement didStopUserGesture
super.didStopUserGesture();
}
}
builder
加载页面前做一些隐性设置,如加载处理,国际化语言设置,字体大小设置,横竖屏方向设置等等,对应的方法为
typedef TransitionBuilder = Widget Function(BuildContext context, Widget child);
如加载页面前做个加载框
builder: (BuildContext context, Widget child) {
return Stack(
alignment: Alignment.center,
children: <Widget>[
child,
const CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation(Colors.red),
),
],
);
},
image.png
title
任务管理器的标题。
title:"任务管理器的标题",
image.png
onGenerateTitle
任务管理器的标题 。 和 title 属性一样,不同的是可以通过 context 来获取本地资源。设置的优先级高于 title 。
onGenerateTitle:(BuildContext context){
return MaterialLocalizations.of(context)....;
},
color
用于旧的 Android 操作系统上的应用程序栏着色 。新系统上没看到什么效果,忽略。
theme
设置应用的主题
theme: ThemeData(
//设置页面背景颜色白天黑夜模式
brightness: Brightness.light,
//MaterialColor 多种颜色混合的主题色
primarySwatch: Colors.cyan,
//Color,主题色
primaryColor: Colors.cyan,
//设置文字图标等白天黑夜模式
primaryColorBrightness: Brightness.light,
//白天模式颜色
primaryColorLight: Colors.white,
//黑夜模式颜色
primaryColorDark: Colors.black,
//如 FloatingActionButton 的背景颜色
accentColor: Colors.green,
//FloatingActionButton 白天黑夜模式
accentColorBrightness: Brightness.dark,
//canvas 绘制的地方的颜色
//canvasColor: Colors.black,
//scaffold 控件的默认背景颜色
scaffoldBackgroundColor: Colors.white,
//BottomAppBar 控件的默认背景颜色
bottomAppBarColor: Colors.blue,
//Card 控件的默认背景颜色
cardColor: Colors.blue,
// 分割线默认颜色,如 ListTiles 的分割线
dividerColor: Colors.blue,
//高亮默认颜色,如 FloatingActionButton 按下的颜色
//highlightColor: Colors.black,
//水波纹默认颜色,如 FloatingActionButton 控件点击的水波纹效果
splashColor: Colors.red,
//水波纹的自定义处理
splashFactory: new HandlerFactory(),
//如文本选中一行的默认颜色(暂不知道用在哪里)
selectedRowColor: Colors.white,
//未选中控件并且有点击事件(如 Checkbox 控件)的默认颜色
unselectedWidgetColor: Colors.black,
//禁用不可点击按钮或者复选框的默认颜色
disabledColor:Colors.red,
//button 并且 onPress 不为 null 的默认背景颜色
buttonColor:Colors.grey,
//button 并且 onPress 不为 null 的样式
buttonTheme:new ButtonThemeData(
),
//PaginatedDataTable 控件 在选项选中的时候 头部的默认背景颜色
secondaryHeaderColor:Colors.grey,
// TextField 文本被选中的颜色。
textSelectionColor:Colors.grey,
//TextField 光标的颜色
cursorColor:Colors.grey,
//选定文本句柄的默认颜色。
textSelectionHandleColor:Colors.red,
//如 进度条 ProgressIndicator 控件的默认背景颜色。
backgroundColor:Colors.grey,
//Dialog 控件的默认背景色
dialogBackgroundColor:Colors.grey,
//TabBar 控件指示器的默认颜色。
indicatorColor:Colors.grey,
//TextField 提示文本或占位符文本的默认文本颜色。
hintColor:Colors.grey,
//TextField 输入验证错误提示的默认文本颜色。
errorColor:Colors.red,
//Switch,Radio和Checkbox 等控件激活状态的默认颜色。
toggleableActiveColor:Colors.grey,
//字体路径
fontFamily:"lib/fonts/...",
//页面文本默认样式
textTheme:TextTheme(),
//状态栏或者标题栏的文本默认样式,对应 primaryColor。
primaryTextTheme:TextTheme(),
//如 FloatingActionButton 的样式,对应 primaryColor。
accentTextTheme:TextTheme(),
//对应 InputDecorator、TextField和TextFormField 属性InputDecoration。
inputDecorationTheme:new InputDecorationTheme(),
//图标的默认样式。
iconTheme:new IconThemeData(),
//标题栏或者状态栏的默认图标样式。
primaryIconTheme:new IconThemeData(),
//如 FloatingActionButton 的默认图标样式。
accentIconTheme:new IconThemeData(),
//Slider 系列控件的默认样式。
sliderTheme:new SliderThemeData(),
//tabBar 控件的默认样式。
tabBarTheme:new TabBarTheme(),
//card 控件的默认样式
cardTheme:new CardTheme(),
//Chip 控件的默认样式
chipTheme:new ChipThemeData(),
//widget 适配的平台。
platform:TargetPlatform.android,
//md 控件的点击范围。
materialTapTargetSize:new MaterialTapTargetSize(),
//对应平台的默认 MaterialPageRoute 转换。
pageTransitionsTheme:new PageTransitionsTheme(),
//AppBar 控件 默认样式
appBarTheme:new AppBarTheme(),
//BottomAppBarTheme 控件的默认样式
bottomAppBarTheme:new BottomAppBarTheme(),
//一组13种颜色,配置大多数组件的颜色属性。
//colorScheme:,
//弹窗默认样式
dialogTheme:DialogTheme(),
//floatingActionButton 的默认样式
floatingActionButtonTheme:new FloatingActionButtonThemeData(),
//TextTheme、primaryTextTheme和accentTextTheme的颜色文本主题值。
typography:new Typography(),
//Cupertino 控件默认样式
//cupertinoOverrideTheme:,
),
darkTheme
黑夜模式的主题样式,设置同 theme 属性
local
设置语言,null 为跟随系统
locale:Locale('zh','cn'),
_languageCode
static const Map<String, String> _deprecatedLanguageSubtagMap = const <String, String>{
'in': 'id', // Indonesian; deprecated 1989-01-01
'iw': 'he', // Hebrew; deprecated 1989-01-01
'ji': 'yi', // Yiddish; deprecated 1989-01-01
'jw': 'jv', // Javanese; deprecated 2001-08-13
'mo': 'ro', // Moldavian, Moldovan; deprecated 2008-11-22
'aam': 'aas', // Aramanik; deprecated 2015-02-12
'adp': 'dz', // Adap; deprecated 2015-02-12
'aue': 'ktz', // ǂKxʼauǁʼein; deprecated 2015-02-12
'ayx': 'nun', // Ayi (China); deprecated 2011-08-16
'bgm': 'bcg', // Baga Mboteni; deprecated 2016-05-30
'bjd': 'drl', // Bandjigali; deprecated 2012-08-12
'ccq': 'rki', // Chaungtha; deprecated 2012-08-12
'cjr': 'mom', // Chorotega; deprecated 2010-03-11
'cka': 'cmr', // Khumi Awa Chin; deprecated 2012-08-12
'cmk': 'xch', // Chimakum; deprecated 2010-03-11
'coy': 'pij', // Coyaima; deprecated 2016-05-30
'cqu': 'quh', // Chilean Quechua; deprecated 2016-05-30
'drh': 'khk', // Darkhat; deprecated 2010-03-11
'drw': 'prs', // Darwazi; deprecated 2010-03-11
'gav': 'dev', // Gabutamon; deprecated 2010-03-11
'gfx': 'vaj', // Mangetti Dune ǃXung; deprecated 2015-02-12
'ggn': 'gvr', // Eastern Gurung; deprecated 2016-05-30
'gti': 'nyc', // Gbati-ri; deprecated 2015-02-12
'guv': 'duz', // Gey; deprecated 2016-05-30
'hrr': 'jal', // Horuru; deprecated 2012-08-12
'ibi': 'opa', // Ibilo; deprecated 2012-08-12
'ilw': 'gal', // Talur; deprecated 2013-09-10
'jeg': 'oyb', // Jeng; deprecated 2017-02-23
'kgc': 'tdf', // Kasseng; deprecated 2016-05-30
'kgh': 'kml', // Upper Tanudan Kalinga; deprecated 2012-08-12
'koj': 'kwv', // Sara Dunjo; deprecated 2015-02-12
'krm': 'bmf', // Krim; deprecated 2017-02-23
'ktr': 'dtp', // Kota Marudu Tinagas; deprecated 2016-05-30
'kvs': 'gdj', // Kunggara; deprecated 2016-05-30
'kwq': 'yam', // Kwak; deprecated 2015-02-12
'kxe': 'tvd', // Kakihum; deprecated 2015-02-12
'kzj': 'dtp', // Coastal Kadazan; deprecated 2016-05-30
'kzt': 'dtp', // Tambunan Dusun; deprecated 2016-05-30
'lii': 'raq', // Lingkhim; deprecated 2015-02-12
'lmm': 'rmx', // Lamam; deprecated 2014-02-28
'meg': 'cir', // Mea; deprecated 2013-09-10
'mst': 'mry', // Cataelano Mandaya; deprecated 2010-03-11
'mwj': 'vaj', // Maligo; deprecated 2015-02-12
'myt': 'mry', // Sangab Mandaya; deprecated 2010-03-11
'nad': 'xny', // Nijadali; deprecated 2016-05-30
'ncp': 'kdz', // Ndaktup; deprecated 2018-03-08
'nnx': 'ngv', // Ngong; deprecated 2015-02-12
'nts': 'pij', // Natagaimas; deprecated 2016-05-30
'oun': 'vaj', // ǃOǃung; deprecated 2015-02-12
'pcr': 'adx', // Panang; deprecated 2013-09-10
'pmc': 'huw', // Palumata; deprecated 2016-05-30
'pmu': 'phr', // Mirpur Panjabi; deprecated 2015-02-12
'ppa': 'bfy', // Pao; deprecated 2016-05-30
'ppr': 'lcq', // Piru; deprecated 2013-09-10
'pry': 'prt', // Pray 3; deprecated 2016-05-30
'puz': 'pub', // Purum Naga; deprecated 2014-02-28
'sca': 'hle', // Sansu; deprecated 2012-08-12
'skk': 'oyb', // Sok; deprecated 2017-02-23
'tdu': 'dtp', // Tempasuk Dusun; deprecated 2016-05-30
'thc': 'tpo', // Tai Hang Tong; deprecated 2016-05-30
'thx': 'oyb', // The; deprecated 2015-02-12
'tie': 'ras', // Tingal; deprecated 2011-08-16
'tkk': 'twm', // Takpa; deprecated 2011-08-16
'tlw': 'weo', // South Wemale; deprecated 2012-08-12
'tmp': 'tyj', // Tai Mène; deprecated 2016-05-30
'tne': 'kak', // Tinoc Kallahan; deprecated 2016-05-30
'tnf': 'prs', // Tangshewi; deprecated 2010-03-11
'tsf': 'taj', // Southwestern Tamang; deprecated 2015-02-12
'uok': 'ema', // Uokha; deprecated 2015-02-12
'xba': 'cax', // Kamba (Brazil); deprecated 2016-05-30
'xia': 'acn', // Xiandao; deprecated 2013-09-10
'xkh': 'waw', // Karahawyana; deprecated 2016-05-30
'xsj': 'suj', // Subi; deprecated 2015-02-12
'ybd': 'rki', // Yangbye; deprecated 2012-08-12
'yma': 'lrr', // Yamphe; deprecated 2012-08-12
'ymt': 'mtm', // Mator-Taygi-Karagas; deprecated 2015-02-12
'yos': 'zom', // Yos; deprecated 2013-09-10
'yuu': 'yug', // Yugh; deprecated 2014-02-28
};
_countryCode
static const Map<String, String> _deprecatedRegionSubtagMap = const <String, String>{
'BU': 'MM', // Burma; deprecated 1989-12-05
'DD': 'DE', // German Democratic Republic; deprecated 1990-10-30
'FX': 'FR', // Metropolitan France; deprecated 1997-07-14
'TP': 'TL', // East Timor; deprecated 2002-05-20
'YD': 'YE', // Democratic Yemen; deprecated 1990-08-14
'ZR': 'CD', // Zaire; deprecated 1997-07-14
};
localizationsDelegates
国际化语言相关
localeListResolutionCallback
国际化语言相关回调
supportedLocales
支持的语言
supportedLocales: [
const Locale('en'), // English
const Locale('he'), // Hebrew
const Locale('zh'), // Chinese
// ... other locales the app supports
],
debugShowMaterialGrid
是否显示调试的网格
showPerformanceOverlay
是否显示 GPU 和 UI 曲线图
checkerboardRasterCacheImages
是否显示光栅缓存图像的棋盘格
checkerboardOffscreenLayers
是否显示层级图
showSemanticsDebugger
是否显示布局边界
debugShowCheckedModeBanner
是否显示右上角的 debug 标签
网友评论