flutter MaterialApp

MaterialApp({
  Key key,
  this.title = '', // 设备用于为用户识别应用程序的单行描述
  this.home, // 应用程序默认路由的小部件,用来定义当前应用打开的时候,所显示的界面
  this.color, // 在操作系统界面中应用程序使用的主色。
  this.theme, // 应用程序小部件使用的颜色。
  this.routes = const <String, WidgetBuilder>{}, // 应用程序的顶级路由表
  this.navigatorKey, // 在构建导航器时使用的键。
  this.initialRoute, // 如果构建了导航器,则显示的第一个路由的名称
  this.onGenerateRoute, // 应用程序导航到指定路由时使用的路由生成器回调
  this.onUnknownRoute, // 当 onGenerateRoute 无法生成路由(initialRoute除外)时调用
  this.navigatorObservers = const <NavigatorObserver>[], // 为该应用程序创建的导航器的观察者列表
  this.builder, // 用于在导航器上面插入小部件,但在由WidgetsApp小部件创建的其他小部件下面插入小部件,或用于完全替换导航器
  this.onGenerateTitle, // 如果非空,则调用此回调函数来生成应用程序的标题字符串,否则使用标题。
  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, // 在选中模式下打开一个小的“DEBUG”横幅,表示应用程序处于选中模式
}) 
//----------------------flutter MaterialApp ----------------------------------------------
import 'package:flutter/material.dart';
import 'homePage.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override Widget build(BuildContext context){
return MaterialApp(

// 在选中模式下打开一个小的“DEBUG”横幅,表示应用程序处于选中模式
debugShowCheckedModeBanner: false,

// 设备用于为用户识别应用程序的单行描述
title: 'flutter demo',

// 应用程序默认路由的小部件,用来定义当前应用打开的时候,所显示的界面
home: MyHomePage(title: 'flutterDemo'),

// 应用程序小部件使用的颜色。
theme: ThemeData(
primarySwatch: Colors.blue,
primaryColor: Colors.red
),


// 应用程序的顶级路由表
routes: {
'home':(BuildContext context) => HomePage(),
},

// const <NavigatorObserver>[], 为该应用程序创建的导航器的观察者列表
navigatorObservers: [
MyObserver()
],

// 应用程序导航到指定路由时使用的路由生成器回调
onGenerateRoute: (setting){
// 使用 PageRouteBuilder 类通过回调函数定义路由 下面使用 PageRouteBuilder 实现一个页面旋转淡出的效果
return PageRouteBuilder(
pageBuilder: (BuildContext context, ___, ____){
return HomePage();
},
opaque: false,
// 设置动画时长200毫秒
transitionDuration: Duration(milliseconds: 1000),
transitionsBuilder: (BuildContext context, Animation<double> animation,Animation<double> animatio1,Widget child){
// 渐变过渡
return FadeTransition(
opacity: animation,
child: ScaleTransition(
// Tween渐变
scale: Tween<double>(begin: 0.5,end: 1.0).animate(animation),
child:child
),
);

// 翻转缩放
// return RotationTransition(
// turns: Tween(begin: 0.0, end: 1.0).
// animate(
// CurvedAnimation(
// parent: animation,
// curve: Curves.fastOutSlowIn,
// )
// ),
// child: ScaleTransition(
// scale: Tween(begin: 0.0, end: 1.0).
// animate(CurvedAnimation(parent: animation, curve: Curves.fastOutSlowIn)),
// child: child,
// ),
// );


//左右滑动 Offset(1.0, 0.0) 上下滑动 Offset(0.0, 1.0),
// return SlideTransition(
// position: Tween<Offset>(
// begin: Offset(0.0, 1.0),
// end: Offset(0.0, 0.0)
// )
// .animate(CurvedAnimation(parent: animation, curve: Curves.fastOutSlowIn)),
// child: child,
// );


}
);
},

// 用于在导航器上面插入小部件,但在由WidgetsApp小部件创建的其他小部件下面插入小部件,或用于完全替换导航器
builder: (BuildContext context,Widget child){
return MediaQuery(data: MediaQuery.of(context).copyWith(
textScaleFactor: 1.2
),
child: child,
);
},

// 如果非空,则调用此回调函数来生成应用程序的标题字符串,否则使用标题。
onGenerateTitle: (context){
return 'flutter应用';
},

// 通常,移动应用管理着大量的路由,并且最容易的是使用名称来引用它们。路由名称通常使用路径结构:“/a/b/c”,主页默认为 “/”
// initialRoute 如果构建了导航器,则显示的第一个路由的名称
initialRoute: '/',
);


}

}

class MyObserver extends NavigatorObserver {
@override
void didPush(Route route, Route previousRoute) {
super.didPush(route, previousRoute);
print(route.settings.name);

}

}


class MyHomePage extends StatefulWidget {
MyHomePage({Key key,this.title}) : super(key: key);
final String title;

@override _MyHomePageState createState() => _MyHomePageState();

}

class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {

// 第一种构建路由 在push的时候使用自定义方法构建一个路由
// Navigator.push(context, MaterialPageRoute(
// builder: (context) {
// return HomePage();
// }
// )).then((value) => {
// //then 注意push系列的方法返回值是一个Future,可以用来接收参数
// print('value = $value')
// });

/* push动画使用方法
Navigator.push(context, MaterialPageRoute(builder: (context){ return test(); }));
改为Navigator.push(context, animation_route(test()));
*/

// 这个push会有自定义动画效果
Navigator.pushNamed(context, 'HomePage').then((value) => {
print('value = $value')
});

setState(() {

_counter ++;

});

}
@override Widget build(BuildContext context) {

return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('You have pushed the button this many times:'),
Text('$_counter',
style: Theme.of(context).textTheme.bodyText2,
),

],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: '跳转到下一个界面',
child: Icon(Icons.add_a_photo),
),
);
}

}

posted @ 2020-10-27 17:55  super1250  阅读(113)  评论(0编辑  收藏  举报