bounceable 1.0.0 copy "bounceable: ^1.0.0" to clipboard
bounceable: ^1.0.0 copied to clipboard

A Flutter widget that provides a smooth, customizable bounce animation effect on tap. Features iOS-like Cupertino motion physics for natural, delightful interactions.

Bounceable #

pub package License: MIT

A Flutter widget that provides smooth, customizable bounce animation effects on tap. Features iOS-like Cupertino motion physics for natural, delightful interactions.

Features #

  • Simple API - Just wrap any widget with Bounceable
  • Smooth animations - Uses Cupertino motion physics for iOS-like feel
  • Customizable - Adjust scale, enable/disable haptics, custom callbacks
  • Long press support - Built-in handling for long press gestures
  • Haptic feedback - Optional haptic feedback on long press
  • Performant - Minimal overhead with optimized animation handling

Installation #

Add bounceable to your pubspec.yaml:

dependencies:
  bounceable: ^1.0.0

Then run:

flutter pub get

Usage #

Basic Usage #

import 'package:bounceable/bounceable.dart';

Bounceable(
  onTap: () => print('Tapped!'),
  child: Container(
    padding: EdgeInsets.all(16),
    decoration: BoxDecoration(
      color: Colors.blue,
      borderRadius: BorderRadius.circular(12),
    ),
    child: Text('Tap me!'),
  ),
)

With Long Press #

Bounceable(
  onTap: () => print('Tapped!'),
  onLongPress: () => print('Long pressed!'),
  child: YourWidget(),
)

Shrink Effect (Instead of Grow) #

By default, the widget grows slightly when pressed. To create a shrink effect instead:

Bounceable(
  scaleFactorOnTap: 0.95, // Values < 1 create a shrink effect
  onTap: () => print('Tapped!'),
  child: YourWidget(),
)

Disable Haptic Feedback #

Bounceable(
  enableHapticFeedback: false,
  onLongPress: () => print('No haptic!'),
  child: YourWidget(),
)

Custom Scale Factor #

Bounceable(
  scaleFactorOnTap: 1.15, // 15% larger on press
  onTap: () => print('Big bounce!'),
  child: YourWidget(),
)

API Reference #

Bounceable #

Parameter Type Default Description
child Widget required The widget to wrap with the bounce effect
onTap VoidCallback? null Called when the widget is tapped
onLongPress VoidCallback? null Called when the widget is long pressed
onLongPressStart VoidCallback? null Called when a long press gesture starts
onTapUp Function(TapUpDetails)? null Called when the user releases after a tap
onTapDown Function(TapDownDetails)? null Called when the user starts a tap
onTapCancel VoidCallback? null Called when a tap is cancelled
scaleFactorOnTap double 1.075 The scale multiplier when pressed
hitTestBehavior HitTestBehavior? opaque How to behave during hit testing
enableHapticFeedback bool true Whether to provide haptic feedback on long press

Scale Factor Values #

  • > 1.0 - Widget grows when pressed (e.g., 1.075 = 7.5% larger)
  • < 1.0 - Widget shrinks when pressed (e.g., 0.95 = 5% smaller)
  • = 1.0 - No scale change (not recommended)

Performance Considerations #

  • Efficient animation - Uses SingleTickerProviderStateMixin for optimal performance
  • Proper disposal - Animation controller is correctly disposed when the widget is removed
  • Optimized rebuilds - Uses AnimatedBuilder so only the transform rebuilds, not the child widget
  • Lightweight - Minimal overhead added to your widget tree

Dependencies #

This package uses the motor package for smooth iOS-like spring animations.

Example #

Check out the example directory for a complete sample app demonstrating all features.

License #

MIT License - see the LICENSE file for details.

Author #

Created by Luca Kramberger

1
likes
160
points
74
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter widget that provides a smooth, customizable bounce animation effect on tap. Features iOS-like Cupertino motion physics for natural, delightful interactions.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, motor

More

Packages that depend on bounceable