page_animator 1.0.1
page_animator: ^1.0.1 copied to clipboard
A Flutter package that provides smooth page transitions and animations with customizable effects. Perfect for creating engaging user interfaces with horizontal page navigation.
Page Animator #
A Flutter package that provides smooth page transitions and animations with customizable effects. Perfect for creating engaging user interfaces with horizontal page navigation.
Features #
- Multiple animation types for page transitions, switchable in realtime
- Infinite scrolling in both directions, with ability to set bounds in realtime
- Animated switcher - tap on a page, and it will zoom out, similar to Kindle reader
- Immersive mode support
Animation Types #
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;
Installation #
Add this to your package's pubspec.yaml
file:
dependencies:
page_animator: ^1.0.0
Usage #
- Import the package:
import 'package:page_animator/page_animator.dart';
- Create a
PageAnimatorController
:
final pageAnimatorController = PageAnimatorController(
type: PageAnimatorType.horizontalFade,
);
- Use the
PageAnimator
widget:
PageAnimator(
controller: pageAnimatorController,
onPageChanged: (int currentPage) {
print('Page offset: $currentPage');
},
leftMostIndex: -3,
rightMostIndex: 3,
children: [
// Your page widgets here
],
enableImmersiveSwitch: true,
)
Page Bounds #
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 right
These 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.
Example #
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),
),
);
}
}
Controller Methods #
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 state
Contributing #
Contributions are welcome! Please feel free to submit a Pull Request.
License #
This project is licensed under the MIT License - see the LICENSE file for details.
Parameters #
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