AnimatedBottomNavigationBar is a customizable widget inspired by

Overview

animated-bottom-navigation-bar

AnimatedBottomNavigationBar is a customizable widget inspired by dribble shot.

Made in lanars.com.

pub package

With AnimatedBottomNavigationBar.builder you are able to customize tab view however you need. In this case you are responsible to handle an active(inactive) state of tabs.

Getting Started

To get started, place your AnimatedBottomNavigationBar in the bottomNavigationBar slot of a Scaffold. The AnimatedBottomNavigationBar respects FloatingActionButton location. For example:

Scaffold(
   body: Container(), //destination screen
   floatingActionButton: FloatingActionButton(
      //params
   ),
   floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
   bottomNavigationBar: AnimatedBottomNavigationBar(
      icons: iconList,
      activeIndex: _bottomNavIndex,
      gapLocation: GapLocation.center,
      notchSmoothness: NotchSmoothness.verySmoothEdge,
      leftCornerRadius: 32,
      rightCornerRadius: 32,
      onTap: (index) => setState(() => _bottomNavIndex = index),
      //other params
   ),
);

Customization

AnimatedBottomNavigationBar is customizable and works with 2, 3, 4, or 5 navigation elements.

Scaffold(
   bottomNavigationBar: AnimatedBottomNavigationBar(
      icons: iconList,
      activeIndex: _bottomNavIndex,
      onTap: (index) => setState(() => _bottomNavIndex = index),
      //other params
   ),
);

Scaffold(
   bottomNavigationBar: AnimatedBottomNavigationBar(
      icons: iconList,
      activeIndex: _bottomNavIndex,
      leftCornerRadius: 32,
      rightCornerRadius: 32,
      onTap: (index) => setState(() => _bottomNavIndex = index),
      //other params
   ),
);

Scaffold(
   floatingActionButton: FloatingActionButton(
      //params
   ),
   floatingActionButtonLocation: FloatingActionButtonLocation.endDocked,
   bottomNavigationBar: AnimatedBottomNavigationBar(
      icons: iconList,
      activeIndex: _bottomNavIndex,
      gapLocation: GapLocation.end,
      notchSmoothness: NotchSmoothness.defaultEdge,
      onTap: (index) => setState(() => _bottomNavIndex = index),
      //other params
   ),
);

Scaffold(
   floatingActionButton: FloatingActionButton(
      //params
   ),
   floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
   bottomNavigationBar: AnimatedBottomNavigationBar(
      icons: iconList,
      activeIndex: _bottomNavIndex,
      gapLocation: GapLocation.center,
      notchSmoothness: NotchSmoothness.defaultEdge,
      onTap: (index) => setState(() => _bottomNavIndex = index),
      //other params
   ),
);

Scaffold(
   floatingActionButton: FloatingActionButton(
      //params
   ),
   floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
   bottomNavigationBar: AnimatedBottomNavigationBar(
      icons: iconList,
      activeIndex: _bottomNavIndex,
      gapLocation: GapLocation.center,
      notchSmoothness: NotchSmoothness.softEdge,
      onTap: (index) => setState(() => _bottomNavIndex = index),
      //other params
   ),
);

Scaffold(
   floatingActionButton: FloatingActionButton(
      //params
   ),
   floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
   bottomNavigationBar: AnimatedBottomNavigationBar(
      icons: iconList,
      activeIndex: _bottomNavIndex,
      gapLocation: GapLocation.center,
      notchSmoothness: NotchSmoothness.smoothEdge,
      onTap: (index) => setState(() => _bottomNavIndex = index),
      //other params
   ),
);

Scaffold(
   floatingActionButton: FloatingActionButton(
      //params
   ),
   floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
   bottomNavigationBar: AnimatedBottomNavigationBar(
      icons: iconList,
      activeIndex: _bottomNavIndex,
      gapLocation: GapLocation.center,
      notchSmoothness: NotchSmoothness.verySmoothEdge,
      onTap: (index) => setState(() => _bottomNavIndex = index),
      //other params
   ),
);

Driving Navigation Bar Changes

You have to change the active navigation bar tab programmatically by passing a new activeIndex to the AnimatedBottomNavigationBar widget.

class _MyAppState extends State<MyApp> {
  int activeIndex;

  /// Handler for when you want to programmatically change
  /// the active index. Calling `setState()` here causes
  /// Flutter to re-render the tree, which `AnimatedBottomNavigationBar`
  /// responds to by running its normal animation.
  void _onTap(int index) {
    setState((){
      activeIndex = index;
    });
  }

  Widget build(BuildContext context) {
    return AnimatedBottomNavigationBar(
      activeIndex: activeIndex,
      onTap: _onTap,
      //other params
    );
  }
}
Comments
  • NoSuchMethodError: The getter 'value' was called on null.

    NoSuchMethodError: The getter 'value' was called on null.

    ════════ Exception caught by widgets library ════════════════
    The following NoSuchMethodError was thrown building AnimatedBottomNavigationBar(dirty, dependencies: [_ScaffoldScope, _EffectiveTickerMode], state: _AnimatedBottomNavigationBarState#a9a1c):
    The getter 'value' was called on null.
    Receiver: null
    Tried calling: value
    

    pubsepc.yaml animated_bottom_navigation_bar: 0.1.2+2

    home.dart:

    Scaffload(
       ...
        bottomNavigationBar: AnimatedBottomNavigationBar(
            icons: [Icons.brightness_5, Icons.brightness_4],
            activeIndex: _bottomNavigationIndex,
            gapLocation: GapLocation.center,
            notchSmoothness: NotchSmoothness.verySmoothEdge,
            leftCornerRadius: 32,
            rightCornerRadius: 32,
            onTap: (index) => setState(() => _bottomNavigationIndex = index),
            //other params
          )
    );
    

    It's this line: width: widget.gapWidth * widget.notchAndCornersAnimation.value, line 212 animated_bottom_navigation_bar.dart

    opened by mehrdad-shokri 10
  • error happened when i migrated to flutter 2

    error happened when i migrated to flutter 2

    when i migrated to flutter 2 this error appears before that all was well.

    ============================================ The following _CastError was thrown during paint(): type 'Null' is not a subtype of type 'Offset' in type cast

    The relevant error-causing widget was: AnimatedBottomNavigationBar file:///Users/alexapps/AndroidStudioProjects/n8/lib/Widgets/bottom_navigation_bar.dart:103:56 When the exception was thrown, this was the stack: #0 List.length= (dart:core-patch/growable_array.dart:222:12) #1 CircularNotchedAndCorneredRectangle.getOuterPath (package:animated_bottom_navigation_bar/src/circular_notched_and_cornered_shape.dart:108:26) #2 CircularNotchedAndCorneredRectangleClipper.getClip (package:animated_bottom_navigation_bar/src/circular_notch_and_corner_clipper.dart:30:18) #3 _RenderCustomClip._updateClip (package:flutter/src/rendering/proxy_box.dart:1377:25) #4 RenderPhysicalShape.paint (package:flutter/src/rendering/proxy_box.dart:1998:7) ... The following RenderObject was being processed when the exception was fired: RenderPhysicalShape#4430a relayoutBoundary=up1 ... needs compositing ... parentData: offset=Offset(0.0, 725.1); id=_ScaffoldSlot.bottomNavigationBar (can use size) ... constraints: BoxConstraints(w=392.7, 0.0<=h<=781.1) ... size: Size(392.7, 56.0) ... elevation: 8.0 ... color: Color(0x00000000) ... shadowColor: Color(0x00000000) ... clipper: CircularNotchedAndCorneredRectangleClipper RenderObject: RenderPhysicalShape#4430a relayoutBoundary=up1 needs compositing parentData: offset=Offset(0.0, 725.1); id=_ScaffoldSlot.bottomNavigationBar (can use size) constraints: BoxConstraints(w=392.7, 0.0<=h<=781.1) size: Size(392.7, 56.0) elevation: 8.0 color: Color(0x00000000) shadowColor: Color(0x00000000) clipper: CircularNotchedAndCorneredRectangleClipper ... child: RenderPhysicalModel#6b7a5 relayoutBoundary=up2 NEEDS-PAINT ... needs compositing ... parentData: (can use size) ... constraints: BoxConstraints(w=392.7, 0.0<=h<=781.1) ... size: Size(392.7, 56.0) ... elevation: 0.0 ... color: Color(0xffffffff) ... shadowColor: Color(0xffffffff) ... shape: BoxShape.rectangle ... borderRadius: BorderRadius.zero ... child: _RenderInkFeatures#1ea29 relayoutBoundary=up3 NEEDS-PAINT ... parentData: (can use size) ... constraints: BoxConstraints(w=392.7, 0.0<=h<=781.1) ... size: Size(392.7, 56.0) ... child: RenderPadding#8864b relayoutBoundary=up4 NEEDS-PAINT ... parentData: (can use size) ... constraints: BoxConstraints(w=392.7, 0.0<=h<=781.1) ... size: Size(392.7, 56.0) ... padding: EdgeInsets.zero ... textDirection: ltr ... child: RenderConstrainedBox#7bfe7 relayoutBoundary=up5 NEEDS-PAINT ... parentData: offset=Offset(0.0, 0.0) (can use size) ... constraints: BoxConstraints(w=392.7, 0.0<=h<=781.1) ... size: Size(392.7, 56.0) ... additionalConstraints: BoxConstraints(0.0<=w<=Infinity, h=56.0)

    opened by mostafa3bdelkader 8
  • Getting an issue in production on a pixel4a device. Seems to work most other places

    Getting an issue in production on a pixel4a device. Seems to work most other places

    Non-fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: Floating action button must be a circle. Error thrown Instance of 'ErrorDescription'. at CircularNotchedAndCorneredRectangleClipper.getClip(circular_notch_and_corner_clipper.dart:22) at _RenderCustomClip._updateClip(proxy_box.dart:1382) at RenderPhysicalShape.paint(proxy_box.dart:2002) at RenderObject._paintWithContext(object.dart:2449) at PaintingContext.paintChild(object.dart:187) at RenderBoxContainerDefaultsMixin.defaultPaint(box.dart:2847) at RenderCustomMultiChildLayoutBox.paint(custom_layout.dart:408) at RenderObject._paintWithContext(object.dart:2449) at PaintingContext.paintChild(object.dart:187) at _RenderLayoutBuilder.paint(layout_builder.dart:343) at _RenderInkFeatures.paint(material.dart:555) at RenderObject._paintWithContext(object.dart:2449) at PaintingContext.paintChild(object.dart:187) at _RenderLayoutBuilder.paint(layout_builder.dart:343) at PaintingContext.pushLayer(object.dart:387) at RenderPhysicalModel.paint(proxy_box.dart:1929) at RenderObject._paintWithContext(object.dart:2449) at PaintingContext.paintChild(object.dart:187) at _RenderLayoutBuilder.paint(layout_builder.dart:343) at RenderObject._paintWithContext(object.dart:2449) at PaintingContext.paintChild(object.dart:187) at _RenderLayoutBuilder.paint(layout_builder.dart:343) at RenderObject._paintWithContext(object.dart:2449) at PaintingContext._repaintCompositedChild(object.dart:141) at PaintingContext.repaintCompositedChild(object.dart:100) at PipelineOwner.flushPaint(object.dart:995) at RendererBinding.drawFrame(binding.dart:499) at WidgetsBinding.drawFrame(binding.dart:883) at RendererBinding._handlePersistentFrameCallback(binding.dart:363) at SchedulerBinding._invokeFrameCallback(binding.dart:1144) at SchedulerBinding.handleDrawFrame(binding.dart:1081) at SchedulerBinding._handleDrawFrame(binding.dart:995)

    Another symptom is that only the middle button is being shown, see attached image. android: image

    iPhone: image

    Here's code:

    Widget build(BuildContext context) {
        final height = MediaQuery.of(context).size.height * .20;
        final p = Provider.of<Pool?>(context, listen: true);
        final pageLabels = [
          p?.name?.isNotEmpty == true ? p!.name : "My Pool",
          "Balance",
          "History",
          "Shop"
        ];
    
        var navLabels = ["My Pool", "Balance", "History", "Shop"];
    
        return Scaffold(
            backgroundColor: Colors.white,
            key: _scaffoldKey,
            drawer: _buildDrawer(),
            extendBody: true,
            appBar: _selectedIndex < 3
                ? PooliAppBar(
                    pageLabels[_selectedIndex],
                    openDrawer: () {
                      logEventArgs("app_bar_drawer",
                          parameters: {"from": navLabels[_selectedIndex]});
                      _scaffoldKey.currentState!.openDrawer();
                    },
                    titleWidget: _selectedIndex == 0 ? _buildPoolName(p) : null,
                    height: height,
                  )
                : null,
            floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
            floatingActionButton: FloatingActionButton(
              elevation: 8,
              backgroundColor: kBlue,
              child: Icon(
                FontAwesomeIcons.plus,
                color: Colors.white,
                size: 22,
              ),
              onPressed: () {
                logEventArgs("app_bar_add",
                    parameters: {"from": navLabels[_selectedIndex]});
                LogUtils.showLogPicker(context);
              },
            ),
            bottomNavigationBar: AnimatedBottomNavigationBar.builder(
              itemCount: _items.length,
              tabBuilder: (int index, bool isActive) {
                return Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      _buildItem(index, isActive),
                      Text(
                        navLabels[index],
                        style: isActive
                            ? bold(color: _selectedColor, size: 14)
                            : regular(color: _unselectedColor, size: 14),
                      )
                    ]);
              },
              backgroundColor: kBlue,
              activeIndex: _selectedIndex,
              gapLocation: GapLocation.center,
              notchSmoothness: NotchSmoothness.defaultEdge,
              leftCornerRadius: 12,
              rightCornerRadius: 12,
              splashSpeedInMilliseconds: 300,
              splashColor: kBlack,
              onTap: (index) => setState(() => _selectedIndex = index),
            ),
            body: Container(
                // key: Key(p?.id ?? "unk"),
                child: _whichContainer(_selectedIndex, p)));
      }
    

    What could be happening here?

    opened by klivin 7
  • FAB animation resizes/distorts bottom

    FAB animation resizes/distorts bottom

    When pressing on the FAB, the bottom sheet gets distorted (the corners change, the autosize text as well). This looks very unappealing to me and I have never seen this behaviour before. Is there any way to apply the scale animation but leave the bottom unchanged?

    opened by adrianvintu 7
  • Doesn't work on release mode on Android 11

    Doesn't work on release mode on Android 11

    CODE: return Scaffold( body: _pages[_nav.getIndex()], drawer: CustomDrawer(), floatingActionButton: FloatingActionButton( onPressed: () { Get.toNamed(Routes.CARTPAGE); }, ), floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, bottomNavigationBar: AnimatedBottomNavigationBar( icons: _iconList, splashColor: accentColor, activeColor: accentColor, inactiveColor: Colors.black.withOpacity(0.5), notchMargin: 10.0, activeIndex: _nav.getIndex(), gapLocation: GapLocation.center, leftCornerRadius: 32, rightCornerRadius: 32, notchSmoothness: NotchSmoothness.verySmoothEdge, onTap: (val) { _nav.changeIndex(val); }, ), );

    ERROR: Wrong gap location in AnimatedBottomNavigationBar towards FloatingActionButtonLocation => consider use GapLocation.end instead of GapLocation.center or change FloatingActionButtonLocation The relevant error-causing widget was AnimatedBottomNavigationBar

    opened by xirainfotech 6
  • AnimatedBottomNavigationBar Icons as List<Widgets> instead of List<IconData>

    AnimatedBottomNavigationBar Icons as List instead of List

    This suggestion will add more flexibility to add custom widgets instead of only plain icons. For example,

    A column that has an ImageAsset + Descriptive text.

    Screen Shot 2020-09-07 at 11 00 41 AM enhancement 
    opened by xSuperMu 4
  • How to make persistent bottom nav bar?

    How to make persistent bottom nav bar?

    Hi! I'm using this package as a bottom navigation bar. But in my case, bottom nav bar must be persistent(you can see persistent_bottom_nav_bar, go_router for examples). How to achieve this? I already tried giving selected tab index for nested routes, but while animating there's blink, like bottom nav bar items being larger for second(or even less) and restoring his actual size or bottom nav bar sliding to another position and returning back. But it's human noticeable for eyes. Can you guide me? How I must use it for persistent bottom bar? P.S. I have also floating action button as a menu button and some bottom bar items where on tap there will be just dialog(will not navigate to new screen. And if you're in nested route(say, you've clicked for one menu in menu screen), if I click to menu button, it must go back to menu screen.

    opened by tologonkudaiberdiuulu 2
  • Customize or disable ontap aniation

    Customize or disable ontap aniation

    Hello devs, thank you for putting this out for us, i would like to disable the ontap animation, but it dosent like there is way. i dont like the zoom animation

    opened by Raider-hub 2
  • Animation on the button.

    Animation on the button.

    Every time I press a different menu button there is animation on the button itself. If, however, I repeat the same button, the animation does not work. Is there a way to run the animation even by pressing the same button again? Thx.

    opened by fclauss72 2
  • Convert double to int to fix floating point comparison

    Convert double to int to fix floating point comparison

    The GapLocationException could be mistakenly thrown when comparing guest.center.dx == host.width / 2 as both values are doubles. This led to the navigation bar showing up as a blank state. Refer to the screen recording and screen shots attached for reference.

    Screenshot_20210818-132255

    https://user-images.githubusercontent.com/35050056/129859179-f5a35c7a-6d01-4aaa-a694-2cc8d46c7201.mp4

    opened by franciscrispin 2
  • Add item scale factor parameter

    Add item scale factor parameter

    I didn't like that I can't change the default icon scale after clicking. Now it can be specified. 1 - the scale is twice the standard size (default behavior), 0.5 -scale half of the standard, etc.

    opened by Oubi256 1
  • glitch with IndexedStack

    glitch with IndexedStack

    sometimes while navigation in IndexedStack the page does not update correctly.

    on the screen there is still a part of the previous page with a piece of the new one. looks the engine cannot render the page properly.

    opened by ViktorKirjanov 0
  • dynamic GapPosition have an unexpected effect

    dynamic GapPosition have an unexpected effect

    When I toggle tab bar, I need the FAB show and hide dynamically, meanwhile I set gapPosition dynamically. But it has splash effect, that's weird, so I wonder if it has some solution for this effect.

    Here is the video for effect.

    https://user-images.githubusercontent.com/20849786/195794605-9ac5de6a-ae8e-4adc-a543-1c06877c2e66.mov

    Part of code:

    AnimatedBottomNavigationBar.builder(
      itemCount: icons.length,
      notchSmoothness: NotchSmoothness.softEdge,
      tabBuilder: (int index, bool isActive) {
        return Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Image.asset(icons.elementAt(index)[isActive ? 1 : 0], width: isActive ? 34.w : 22.w, height: isActive ? 34.w : 22.w),
          ],
        );
      },
      backgroundColor: Colors.white,
      activeIndex: _bottomNavIndex,
      splashColor: Colors.black,
      splashSpeedInMilliseconds: 200,
      notchAndCornersAnimation: borderRadiusAnimation,
      gapLocation: _bottomNavIndex == 2 ? GapLocation.center : GapLocation.none,
      leftCornerRadius: 24,
      rightCornerRadius: 24,
    )
    
    opened by zmm2tysu 0
Calendar widget for flutter that is swipeable horizontally. This widget can help you build your own calendar widget highly customizable.

flutter_calendar_carousel Calendar widget for flutter that is swipeable horizontally. This widget can help you build your own calendar widget highly c

dooboolab 750 Jan 7, 2023
📸 Easy to use yet very customizable zoomable image widget for Flutter, Photo View provides a gesture sensitive zoomable widget. Photo View is largely used to show interacive images and other stuff such as SVG.

Flutter Photo View A simple zoomable image/content widget for Flutter. PhotoView enables images to become able to zoom and pan with user gestures such

Fire Slime Games 1.7k Jan 3, 2023
📸 Easy to use yet very customizable zoomable image widget for Flutter, Photo View provides a gesture sensitive zoomable widget.

?? Easy to use yet very customizable zoomable image widget for Flutter, Photo View provides a gesture sensitive zoomable widget. Photo View is largely used to show interacive images and other stuff such as SVG.

Blue Fire 1.7k Jan 7, 2023
Custom dropdown widget allows to add highly customizable widget in your projects with proper open and close animations and also comes with form required validation.

Custom Dropdown Custom Dropdown package lets you add customizable animated dropdown widget. Features Lots of properties to use and customize dropdown

Abdullah Chauhan 22 Dec 29, 2022
A customizable carousel slider widget in Flutter which supports inifinte scrolling, auto scrolling, custom child widget, custom animations and built-in indicators.

flutter_carousel_widget A customizable carousel slider widget in Flutter. Features Infinite Scroll Custom Child Widget Auto Play Horizontal and Vertic

NIKHIL RAJPUT 7 Nov 26, 2022
A Flutter map widget inspired by Leaflet

flutter_map A Dart implementation of Leaflet for Flutter apps. Installation Add flutter_map to your pubspec: dependencies: flutter_map: any # or the

null 2.2k Dec 28, 2022
A Flutter map widget inspired by Leaflet

flutter_map A Dart implementation of Leaflet for Flutter apps. Usage Add flutter_map to your pubspec: dependencies: flutter_map: any # or the latest

AppTree Software, Inc 114 Dec 13, 2022
A Flutter map widget inspired by Leaflet

flutter_map A Dart implementation of Leaflet for Flutter apps. Installation Add flutter_map to your pubspec: dependencies: flutter_map: any # or the

null 2.2k Jan 3, 2023
Flutter page widget that is dismissed by swipe gestures, with Hero style animations, Inspired by Facebook and Instagram stories.

dismissible_page ?? ?? Creates page that is dismissed by swipe gestures, with Hero style animations, Inspired by FB, IG stories. Live Demo Contents Su

Tornike 76 Dec 22, 2022
A simple slide-to-unlock widget for Flutter inspired by the Android Slide To Act.

Flutter Slide To Act A simple slide-to-unlock widget for Flutter inspired by the Android Slide To Act. Getting started Add slide_to_act to your pubspe

Salvatore Giordano 79 Dec 25, 2022
Highly customizable, feature-packed calendar widget for Flutter

Table Calendar Highly customizable, feature-packed Flutter Calendar with gestures, animations and multiple formats. Table Calendar with custom styles

Aleksander Woźniak 1.5k Jan 7, 2023
Crop any widget/image in Android, iOS, Web and Desktop with fancy and customizable UI, in pure Dart code.

crop A Flutter package for cropping any widget, not only images. This package is entirely written in Dart and supports Android, iOS, Web and Desktop.

Mahdi 225 Jan 6, 2023
A customizable shadow for any widget

simple_shadow A customizable shadow for any widget Getting Started import: import 'package:simple_shadow/simple_shadow.dart'; example: SimpleShadow(

Marcelo Pinheiro Montanher 27 Nov 23, 2022
Customizable Flutter widget which syncronize ScrollView with PageView as tabs

scrollable_list_tab_scroller Customizable Flutter widget which syncronize ScrollView with PageView as tabs. Create a custom page view as tabs which sy

Railson Ferreira de Souza 4 Dec 21, 2022
Flutter package for creating a fully customizable and editable image widget.

EditableImage Flutter Package Flutter package for creating a fully customizable and editable image widget. The package has been written solely in Dart

Bulent Baris Kilic 5 Jun 13, 2022
Highly customizable, feature-packed calendar widget for Flutter

TableCalendar Highly customizable, feature-packed calendar widget for Flutter. TableCalendar with custom styles TableCalendar with custom builders Fea

Aleksander Woźniak 1.5k Jan 7, 2023
Widget to let the user search through a keyword string typed on a customizable keyboard in a single or multiple choices list presented as a dropdown in a dialog box or a menu.

searchable_dropdown Widget to let the user search through a keyword string typed on a customizable keyboard in a single or multiple choices list prese

Bobby Stenly Irawan 108 Sep 11, 2022
📅 Customizable flutter calendar widget including day and week views

?? Customizable, animated calendar widget including day, week, and month views. Navigation Animation Callbacks Changing the VisibleDateRange Available

Jonas Wanke 276 Jan 1, 2023
Flutter reaction button plugin it is fully customizable widget such as Facebook reaction button

Flutter Reaction Button Flutter button reaction it is fully customizable widget such as Facebook reaction button. Preview Demo Usage Include 'flutter_

Abdelouahed Medjoudja 174 Dec 19, 2022
A package that provides a highly customizable sheet widget that snaps to different vertical & horizontal positions

Snapping Sheet A package that provides a highly customizable sheet widget that snaps to different vertical & horizontal positions Can adapt to scrolla

Adam Jonsson 364 Dec 6, 2022