main.dart
import 'package:flutter/material.dart';
import 'pages.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: FirstPage());
}
}
pages.dart
import 'package:flutter/material.dart';
import 'custome_router.dart';
//Navigator.of(context)
// .push(MaterialPageRoute(builder: (BuildContext context) {
// return SecondPage();
// }));
class FirstPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blue,
appBar: AppBar(
title: Text('FirstPage', style: TextStyle(fontSize: 36.0)),
elevation: 0.0, //融合APPbar 消失虚线
),
body: Center(
child: MaterialButton(
child: Icon(
Icons.navigate_next,
color: Colors.white,
size: 64.0,
),
onPressed: () {
Navigator.of(context).push(CustomeRoute(SecondPage()));
},
),
));
}
}
class SecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.pinkAccent,
appBar: AppBar(
title: Text(
'SecondPage',
style: TextStyle(fontSize: 36.0),
),
backgroundColor: Colors.pinkAccent,
leading: Container(),
elevation: 0.0, //融合APPbar 消失虚线
),
body: Center(
child: MaterialButton(
child: Icon(Icons.navigate_before, color: Colors.white, size: 64.0),
onPressed: () => Navigator.of(context).pop(),
),
));
}
}
custome_router.dart
import 'package:flutter/material.dart';
//可以自定义动画效果 PageRouteBuilder
class CustomeRoute extends PageRouteBuilder {
final Widget widget;
CustomeRoute(this.widget)
: super(
transitionDuration: Duration(seconds: 3),
pageBuilder: (BuildContext context, Animation<double> animation1,
Animation<double> animation2) {
return widget;
},
transitionsBuilder: (BuildContext context,
Animation<double> animation1,
Animation<double> animation2,
Widget child) {
//渐隐渐现路由效果 FadeTransition
// return FadeTransition(
// opacity: Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
// parent: animation1, curve: Curves.fastOutSlowIn)),
// child: child);
//缩放路由效果 ScaleTransition
// return ScaleTransition(
// scale: Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
// parent: animation1, curve: Curves.fastOutSlowIn)),
// child: child,
// );
/** */
//旋转加缩放效果 RotationTransition + ScaleTransition
// return RotationTransition(
// turns: Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
// parent: animation1, curve: Curves.fastOutSlowIn)),
// child: ScaleTransition(
// scale: Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
// parent: animation1, curve: Curves.fastOutSlowIn)),
// child: child,
// ),
// );
//左右滑动路由动画 SlideTransition
return SlideTransition(
position: Tween<Offset>(
begin: Offset(-1.0, 0.0), end: Offset(0.0, 0.0))
.animate(CurvedAnimation(
parent: animation1, curve: Curves.fastOutSlowIn)),
child: child,
);
});
}