Flutter自定义路由过渡动画插件custom_route_transition_sa的使用
Flutter自定义路由过渡动画插件custom_route_transition_sa
的使用
Description
此包用于处理页面之间的自定义路由过渡动画。
Use Example
CustomRouteTransitionSa(
context: context,
child: Page2(),
animation: AnimationType.fadeIn,
duration: Duration(milliseconds: 100), // 可选值
replacement: true, // 可选值
);
Author
该包的作者是Santiago Albisser,希望将其开源,以便社区的帮助能够改进此包。
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:custom_route_transition_sa/custom_route_transition_sa.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
initialRoute: 'page1',
routes: {
'page1': (context) => const Page1(),
'page2': (context) => const Page2()
},
);
}
}
class Page1 extends StatelessWidget {
const Page1({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blueGrey,
appBar: AppBar(
title: const Text('Page1'),
backgroundColor: Colors.transparent,
),
body: Center(
child: MaterialButton(
color: Colors.white,
onPressed: () {
// 使用自定义路由过渡动画跳转到Page2
Navigator.push(
context,
CustomRouteTransitionSa(
child: const Page2(),
context: context,
animation: AnimationType.fadeIn,
duration: Duration(milliseconds: 100),
replacement: true,
),
);
},
child: const Text('去往Page2')),
),
);
}
}
class Page2 extends StatelessWidget {
const Page2({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.green,
appBar: AppBar(
title: const Text('Page2'),
backgroundColor: Colors.transparent,
),
body: const Center(
child: Text('Page2'),
),
);
}
}
更多关于Flutter自定义路由过渡动画插件custom_route_transition_sa的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自定义路由过渡动画插件custom_route_transition_sa的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
custom_route_transition_sa
是一个 Flutter 插件,用于实现自定义的路由过渡动画。它允许你为页面之间的导航创建独特的过渡效果,而不是使用 Flutter 默认的过渡动画。以下是使用 custom_route_transition_sa
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 custom_route_transition_sa
插件的依赖:
dependencies:
flutter:
sdk: flutter
custom_route_transition_sa: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在你的 Dart 文件中导入插件:
import 'package:custom_route_transition_sa/custom_route_transition_sa.dart';
3. 使用自定义过渡动画
custom_route_transition_sa
插件提供了 CustomRouteTransition
类,你可以使用它来定义自定义的过渡动画。
以下是一个简单的示例,展示如何使用 CustomRouteTransition
实现一个页面从底部滑入的过渡效果:
import 'package:flutter/material.dart';
import 'package:custom_route_transition_sa/custom_route_transition_sa.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Custom Route Transition Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: FirstScreen(),
);
}
}
class FirstScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('First Screen'),
),
body: Center(
child: ElevatedButton(
child: Text('Go to Second Screen'),
onPressed: () {
Navigator.push(
context,
CustomRouteTransition(
child: SecondScreen(),
transitionType: TransitionType.slideUp, // 从底部滑入
duration: Duration(milliseconds: 500), // 过渡时间
),
);
},
),
),
);
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Second Screen'),
),
body: Center(
child: ElevatedButton(
child: Text('Go Back'),
onPressed: () {
Navigator.pop(context);
},
),
),
);
}
}
4. 过渡动画类型
CustomRouteTransition
提供了多种过渡动画类型,你可以通过 transitionType
参数来指定:
TransitionType.slideUp
: 从底部滑入TransitionType.slideDown
: 从顶部滑入TransitionType.slideLeft
: 从右侧滑入TransitionType.slideRight
: 从左侧滑入TransitionType.fade
: 淡入淡出TransitionType.scale
: 缩放TransitionType.rotate
: 旋转
5. 自定义过渡动画
如果你需要更复杂的过渡动画,你可以自定义 PageRouteBuilder
来实现。CustomRouteTransition
实际上是对 PageRouteBuilder
的封装,你可以直接使用 PageRouteBuilder
来创建更复杂的过渡效果。
Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => SecondScreen(),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
var begin = Offset(0.0, 1.0);
var end = Offset.zero;
var curve = Curves.ease;
var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
return SlideTransition(
position: animation.drive(tween),
child: child,
);
},
),
);