animated_stack_plus 1.0.1 copy "animated_stack_plus: ^1.0.1" to clipboard
animated_stack_plus: ^1.0.1 copied to clipboard

A flexible and modern animated Floating Action Button (FAB) stack for Flutter with custom icons, builders, and smooth animations.

animated_stack_plus #

pub version likes

AnimatedStackPlus Demo Mobile AnimatedStackPlus Demo Web

A flexible and modern animated Floating Action Button (FAB) stack menu for Flutter β€” inspired by the original animated_stack, but fully rebuilt with customizable builders, animations, and interaction handling.


Features #

  • Beautiful FAB-based sliding stack
  • Customizable top (column) and bottom (row) action layouts
  • Easy closeFab() callback passed to all actions
  • Separate open/close FAB icons as full Widgets (not just IconData)
  • Fully configurable animation duration, curves, and background color
  • Safe foreground interaction with optional blocking overlay
  • Click outside to dismiss the FAB menu
  • Works on mobile, tablet, and web
  • Modern Flutter compatibility with updated APIs

🧩 Getting Started #

Installation #

Add to your pubspec.yaml:

dependencies:
  animated_stack_plus: ^1.0.1

Then run:

flutter pub get

Import it:

import 'package:animated_stack_plus/animated_stack_plus.dart';

πŸ’‘ Usage Example #

Here’s a complete working example:

import 'package:animated_stack_plus/animated_stack_plus.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const ExampleApp());
}

class ExampleApp extends StatelessWidget {
  const ExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey =
        GlobalKey<ScaffoldMessengerState>();

    return MaterialApp(
      scaffoldMessengerKey: scaffoldMessengerKey,
      title: 'AnimatedStackPlus Example',
      home: AnimatedStack(
        backgroundColor: Colors.grey[200]!,
        fabBackgroundColor: Colors.teal,
        fabOpenIcon: const Icon(Icons.menu, color: Colors.white),
        fabCloseIcon: const Icon(Icons.close, color: Colors.white),
        scaleWidth: 100,
        scaleHeight: 100,

        // Column of buttons (top stack)
        columnWidgetBuilder: (closeFab) => Column(
          spacing: 20,
          children: [
            IconButton(
              style: IconButton.styleFrom(backgroundColor: Colors.pink),
              onPressed: () {
                closeFab();
                scaffoldMessengerKey.currentState?.showSnackBar(
                  const SnackBar(content: Text('Share button pressed')),
                );
              },
              icon: const Icon(Icons.share, color: Colors.white),
            ),
            IconButton(
              style: IconButton.styleFrom(backgroundColor: Colors.blue),
              onPressed: () {
                closeFab();
                scaffoldMessengerKey.currentState?.showSnackBar(
                  const SnackBar(content: Text('Contact button pressed')),
                );
              },
              icon: const Icon(Icons.call, color: Colors.white),
            ),
          ],
        ),

        // Row of buttons (bottom stack)
        bottomWidgetBuilder: (closeFab) => Row(
          children: [
            IconButton(
              style: IconButton.styleFrom(backgroundColor: Colors.orange),
              onPressed: () {
                closeFab();
                scaffoldMessengerKey.currentState?.showSnackBar(
                  const SnackBar(content: Text('Message button pressed')),
                );
              },
              icon: const Icon(Icons.message, color: Colors.white),
            ),
          ],
        ),

        // Foreground main screen
        foregroundWidget: Scaffold(
          appBar: AppBar(
            title: const Text('AnimatedStackPlus Example',
                style: TextStyle(color: Colors.white)),
            backgroundColor: Colors.teal,
            centerTitle: true,
          ),
          body: const Center(child: Text('Hello World')),
        ),
      ),
    );
  }
}

βš™οΈ Parameters #

Name Type Description
foregroundWidget Widget Main content shown under the FAB stack
columnWidgetBuilder Widget Function(VoidCallback closeFab) Builder for vertical (top) actions
bottomWidgetBuilder Widget Function(VoidCallback closeFab) Builder for horizontal (bottom) actions
fabBackgroundColor Color FAB background color
fabOpenIcon Widget Icon widget when the menu is closed
fabCloseIcon Widget Icon widget when the menu is open
scaleWidth / scaleHeight double How much the foreground scales when FAB opens
slideAnimationDuration Duration Duration of the slide animation
openAnimationCurve Curve Curve when opening the FAB stack
closeAnimationCurve Curve Curve when closing the FAB stack
enableClickToDismiss bool Whether tapping outside closes the menu
preventForegroundInteractions bool Prevents UI below the FAB from interaction when open
onForegroundCallback VoidCallback? Called when the FAB stack closes

🧠 Inspired By #

This package is based on the original animated_stack by Emadeddin Eibo, but rebuilt with:

  • Builder-based architecture for dynamic UI
  • Modern Flutter compatibility
  • Better tap handling and callbacks
  • Full control over icons, animations, and layout

πŸ“œ License #

MIT License


🀝 Contributions Welcome #

Found a bug or want to improve this widget?
Open an issue or pull request on GitHub:

πŸ‘‰ github.com/hbsgujjar111/animated_stack_plus

1
likes
160
points
140
downloads

Publisher

unverified uploader

Weekly Downloads

A flexible and modern animated Floating Action Button (FAB) stack for Flutter with custom icons, builders, and smooth animations.

Repository (GitHub)
View/report issues

Topics

#fab #animation #animatedstack #widget #flutter

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on animated_stack_plus