v1.0.1page_animator
一个提供流畅页面过渡和动画的 Flutter 包,支持自定义效果。非常适合创建具有水平页面导航的引人入胜的用户界面。
StageCoding/page_animator open-source repository details.
以下为英文项目原文快照,最新内容请访问 GitHub。
A Flutter package that provides smooth page transitions and animations with customizable effects. Perfect for creating engaging user interfaces with horizontal page navigation.
The package supports various animation types through PageAnimatorType. Here's a comprehensive list of all available animations:
| Preview | Preview | Preview |
|---|---|---|
![]() |
![]() |
![]() |
Uncompressed gifanimatedSwitcher - Animated switcher transition |
Uncompressed gifnoAnimation - No animation effect, instant page switch |
Uncompressed gifhorizontalSimple - Simple horizontal slide transition |
![]() |
![]() |
![]() |
Uncompressed gifhorizontalFade - Horizontal slide with fade effect |
Uncompressed gifhorizontalFadeInverse - Horizontal slide with inverse fade effect |
Uncompressed gifverticalSimple - Simple vertical slide transition |
![]() |
![]() |
|
Uncompressed gifverticalFade - Vertical slide with fade effect |
Uncompressed gifverticalFadeInverse - Vertical slide with inverse fade effect |
You can change the animation type dynamically using the controller:
pageAnimatorController.type.value = PageAnimatorType.verticalFade;
Add this to your package's pubspec.yaml file:
dependencies:
page_animator: ^1.0.0
import 'package:page_animator/page_animator.dart';
PageAnimatorController:final pageAnimatorController = PageAnimatorController(
type: PageAnimatorType.horizontalFade,
);
PageAnimator widget:PageAnimator(
controller: pageAnimatorController,
onPageChanged: (int currentPage) {
print('Page offset: $currentPage');
},
leftMostIndex: -3,
rightMostIndex: 3,
children: [
// Your page widgets here
],
enableImmersiveSwitch: true,
)
The PageAnimator widget allows you to set bounds for page navigation using leftMostIndex and rightMostIndex parameters:
leftMostIndex: The minimum page offset that can be reached by swiping leftrightMostIndex: The maximum page offset that can be reached by swiping rightThese bounds can be changed in realtime, allowing you to dynamically control the navigation range. For example:
// Initially allow navigation indefinitelly
PageAnimator(
leftMostIndex: null,
rightMostIndex: null,
// ... other parameters
)
// Later, you can update the bounds
PageAnimator(
leftMostIndex: -3,
rightMostIndex: 3,
// ... other parameters
)
When a bound is reached, the page will stop scrolling in that direction, providing a natural end to the navigation.
Here's a complete example showing how to use the package:
class MyPage extends StatefulWidget {
@override
State<MyPage> createState() => _MyPageState();
}
class _MyPageState extends State<MyPage> {
final pageAnimatorController = PageAnimatorController(
type: PageAnimatorType.horizontalFade,
);
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageAnimator(
controller: pageAnimatorController,
onPageChanged: (int currentPage) {
print('Page offset: $currentPage');
},
leftMostIndex: -3,
rightMostIndex: 3,
children: [
for (final page in List.generate(3, (index) => index))
_buildPage(page),
],
enableImmersiveSwitch: true,
),
);
}
Widget _buildPage(int page) {
return Scaffold(
body: Center(
child: Text('Page $page'),
),
floatingActionButton: FloatingActionButton(
onPressed: () => pageAnimatorController.animateToOffset(1),
child: const Icon(Icons.skip_next),
),
);
}
}
The PageAnimatorController provides several methods to control page transitions:
animateToOffset(int offset): Animate to a specific page offsettype: Change the animation type dynamicallyswitcherActive: Control the page switcher stateContributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
children: List of widgets to display as pagesonPageChanged: Callback when page is changedleftMostIndex: The first page user can go torightMostIndex: The last page user can go tocontroller: PageAnimatorController instanceenableImmersiveSwitch: Optional boolean that controls whether to enable immersive mode while switcher is inactive, and automatically disable it when user enters switcher. If not specified, defaults to true.onDragStart: Optional callback when drag startsonDragEnd: Optional callback when drag endsonDragAnimationStart: Optional callback when animation startsonDragAnimationEnd: Optional callback when animation ends依赖清单 4 项
{"sdk":"flutter"}^0.21.2^5.0.0{"sdk":"flutter"}先按使用场景筛选,再比较项目活跃情况,最后到原始仓库核对使用要求。
“A repository is the most basic element of GitHub.”
GitHub Docs — About repositories ↗