Flutter页面过渡动画插件beamer_module的使用
简介
beamer_module
是一个帮助在 Flutter 中应用 beamer
的工具。通过该模块,您可以轻松实现页面之间的过渡动画。
安装
步骤 1: 创建 Juneflow 项目(如果不存在)
如果您还没有 Juneflow 项目,请按照以下指南创建:
步骤 2: 添加 beamer_module
打开终端并进入 Juneflow 项目的根目录,运行以下命令:
june add beamer_module
使用
配置路由
在 lib/util/config/beamer_module/_.dart
文件中配置路由。以下是完整的示例代码:
// 导入必要的包
import 'package:flutter/material.dart';
import 'package:beamer/beamer.dart';
// 定义路由路径
final LocationBuilder locationBuilder = (context, state) {
if (state.uri.path == '/page1') {
return Page1();
} else if (state.uri.path == '/page2') {
return Page2();
}
return Page1(); // 默认页面
};
// 初始化 BeamerDelegate
final BeamerDelegate routerDelegate = BeamerDelegate(
locationBuilder: locationBuilder,
);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp.router(
title: 'Beamer Module Demo',
debugShowCheckedModeBanner: false,
routerDelegate: routerDelegate,
routeInformationParser: BeamerParser(),
);
}
}
// 定义页面 1
class Page1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Page 1'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
Beamer.of(context).beamToNamed('/page2');
},
child: Text('Go to Page 2'),
),
),
);
}
}
// 定义页面 2
class Page2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Page 2'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
Beamer.of(context).beamToNamed('/page1');
},
child: Text('Go to Page 1'),
),
),
);
}
}
动画效果
默认情况下,beamer
提供了一些内置的过渡动画。您可以通过修改 locationBuilder
来自定义动画效果。例如,添加滑动动画:
final LocationBuilder locationBuilder = (context, state) {
if (state.uri.path == '/page1') {
return Page1();
} else if (state.uri.path == '/page2') {
return Page2();
}
return Page1(); // 默认页面
};
更多关于Flutter页面过渡动画插件beamer_module的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter页面过渡动画插件beamer_module的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
beamer
是一个用于 Flutter 的路由管理库,它可以帮助你更轻松地管理页面导航和过渡动画。beamer
本身并不直接提供页面过渡动画,但你可以结合 Flutter 的 PageRouteBuilder
或其他动画库来实现自定义的页面过渡效果。
以下是如何在 beamer
中使用自定义页面过渡动画的步骤:
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 beamer
依赖:
dependencies:
flutter:
sdk: flutter
beamer: ^1.0.0
然后运行 flutter pub get
来安装依赖。
2. 创建 BeamLocation
Beamer
使用 BeamLocation
来定义路由和页面。你可以在这里定义页面的过渡动画。
import 'package:beamer/beamer.dart';
import 'package:flutter/material.dart';
class HomeLocation extends BeamLocation<BeamState> {
[@override](/user/override)
List<BeamPage> buildPages(BuildContext context, BeamState state) {
return [
BeamPage(
key: const ValueKey('home'),
child: HomeScreen(),
// 自定义页面过渡动画
routeBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => child,
transitionsBuilder: (context, animation, secondaryAnimation, child) {
return FadeTransition(
opacity: animation,
child: child,
);
},
);
},
),
];
}
[@override](/user/override)
List<Pattern> get pathPatterns => ['/'];
}
class HomeScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Home')),
body: Center(
child: ElevatedButton(
onPressed: () {
Beamer.of(context).beamToNamed('/details');
},
child: Text('Go to Details'),
),
),
);
}
}
3. 定义其他页面和过渡动画
你可以为其他页面定义不同的过渡动画。例如,为 DetailsScreen
定义一个从右到左的滑动动画:
class DetailsLocation extends BeamLocation<BeamState> {
[@override](/user/override)
List<BeamPage> buildPages(BuildContext context, BeamState state) {
return [
BeamPage(
key: const ValueKey('details'),
child: DetailsScreen(),
routeBuilder: (BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => child,
transitionsBuilder: (context, animation, secondaryAnimation, child) {
var begin = Offset(1.0, 0.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,
);
},
);
},
),
];
}
[@override](/user/override)
List<Pattern> get pathPatterns => ['/details'];
}
class DetailsScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Details')),
body: Center(
child: ElevatedButton(
onPressed: () {
Beamer.of(context).beamBack();
},
child: Text('Go Back'),
),
),
);
}
}
4. 配置 BeamerDelegate
在 MaterialApp
中配置 BeamerDelegate
,并将 BeamLocation
添加到 BeamerDelegate
中:
void main() {
final beamerDelegate = BeamerDelegate(
locationBuilder: BeamerLocationBuilder(
beamLocations: [
HomeLocation(),
DetailsLocation(),
],
),
);
runApp(MyApp(beamerDelegate: beamerDelegate));
}
class MyApp extends StatelessWidget {
final BeamerDelegate beamerDelegate;
MyApp({required this.beamerDelegate});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp.router(
routerDelegate: beamerDelegate,
routeInformationParser: BeamerParser(),
);
}
}