MaterialApp({
Key key,
this.title = '',
//----------------------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),
),
);
}
}