A flutter UI package provides a cell widget that has leading and trailing swipe action menu.

Overview

Language:

English |中文简体

flutter_swipe_action_cell

A package that can give you a cell that can be swiped ,effect is like iOS native

If you like this package,you can give me a star 😀 .The more stars this project has,the more time I will take in the project 😀

Get started

The null safety is available from 2.0.0 !

pub home page click here: pub
install:
flutter_swipe_action_cell: ^2.1.2

1.Preview:

Simple delete Perform first action when full swipe
Delete with animation More than one action
Effect like WeChat(confirm delete) Automatically adjust the button width
Effect like WeChat collection Page:Customize your button shape

With leading Action and trailing action
Edit mode

Full example:

Preview (YouTobe video)

And you can find full example code in example page

Examples

  • Example 1:Simple delete the item in ListView

  • Tip:put the code in the itemBuilder of your ListView

 SwipeActionCell(
      key: ObjectKey(list[index]),///this key is necessary
      trailingActions: <SwipeAction>[
        SwipeAction(
            title: "delete",
            onTap: (CompletionHandler handler) async {
              list.removeAt(index);
              setState(() {});
            },
            color: Colors.red),
      ],
      child: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Text("this is index of ${list[index]}",
            style: TextStyle(fontSize: 40)),
      ),
    );
  • Example 2:Perform first action when full swipe

SwipeActionCell(
      ///this key is necessary
      key: ObjectKey(list[index]),

      ///this is the same as iOS native
      performsFirstActionWithFullSwipe: true,
      trailingActions: <SwipeAction>[
        SwipeAction(
            title: "delete",
            onTap: (CompletionHandler handler) async {
              list.removeAt(index);
              setState(() {});
            },
            color: Colors.red),
      ],
      child: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Text("this is index of ${list[index]}",
            style: TextStyle(fontSize: 40)),
      ),
    );
  • Example 3:Delete with animation

SwipeActionCell(
     key: ObjectKey(list[index]),
     performsFirstActionWithFullSwipe: true,
     trailingActions: <SwipeAction>[
       SwipeAction(
           title: "delete",
           onTap: (CompletionHandler handler) async {
             
             /// await handler(true) : will delete this row
             ///And after delete animation,setState will called to 
             /// sync your data source with your UI

             await handler(true);
             list.removeAt(index);
             setState(() {});
           },
           color: Colors.red),
     ],
     child: Padding(
       padding: const EdgeInsets.all(8.0),
       child: Text("this is index of ${list[index]}",
           style: TextStyle(fontSize: 40)),
     ),
   );
  • Example 4:More than one action:

SwipeActionCell(
     key: ObjectKey(list[index]),

     performsFirstActionWithFullSwipe: true,
     trailingActions: <SwipeAction>[
       SwipeAction(
           title: "delete",
           onTap: (CompletionHandler handler) async {
             await handler(true);
             list.removeAt(index);
             setState(() {});
           },
           color: Colors.red),

       SwipeAction(
           widthSpace: 120,
           title: "popAlert",
           onTap: (CompletionHandler handler) async {
             ///false means that you just do nothing,it will close
             /// action buttons by default
             handler(false);
             showCupertinoDialog(
                 context: context,
                 builder: (c) {
                   return CupertinoAlertDialog(
                     title: Text('ok'),
                     actions: <Widget>[
                       CupertinoDialogAction(
                         child: Text('confirm'),
                         isDestructiveAction: true,
                         onPressed: () {
                           Navigator.pop(context);
                         },
                       ),
                     ],
                   );
                 });
           },
           color: Colors.orange),
     ],
     child: Padding(
       padding: const EdgeInsets.all(8.0),
       child: Text(
           "this is index of ${list[index]}",
           style: TextStyle(fontSize: 40)),
     ),
   );
  • Example 5:Delete like WeChat message page(need to confirm it:

return SwipeActionCell(
      key: ValueKey(list[index]),
      performsFirstActionWithFullSwipe: true,
      trailingActions: <SwipeAction>[
        SwipeAction(
          ///
          ///This attr should be passed to first action
          ///
          nestedAction: SwipeNestedAction(title: "确认删除"),
          title: "删除",
          onTap: (CompletionHandler handler) async {
            await handler(true);
            list.removeAt(index);
            setState(() {});
          },
          color: Colors.red,
        ),
        SwipeAction(
            title: "置顶",
            onTap: (CompletionHandler handler) async {
              ///false means that you just do nothing,it will close
              /// action buttons by default
              handler(false);
            },
            color: Colors.grey),
      ],
      child: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Text("this is index of ${list[index]}",
            style: TextStyle(fontSize: 40)),
      ),
    );
  • Example 6:Edit mode(just like iOS native effect)

/// To controller edit mode
SwipeActionEditController controller;

///在initState
@override
  void initState() {
    super.initState();
    controller = SwipeActionController();
  }
///To get the selected rows index
List<int> selectedIndexes = controller.getSelectedIndexes();


///open cell
controller.openCellAt(index: 2, trailing: true, animated: true);

///close cell
controller.closeAllOpenCell();

///toggleEditingMode
controller.toggleEditingMode()

///startEditMode
controller.startEditingMode()

///stopEditMode
controller.stopEditingMode()

///select cell
controller.selectCellAt(indexPaths:[1,2,3])

controller.deselectCellAt(indexPaths:[1,2,3])

///pass your data length to selectedAll
controller.selectAll(30
)

///deselect all cell
controller deselectAll()

ListView.builder(
        itemBuilder: (c, index) {
          return _item(index);
        },
        itemCount: list.length,
      );


 Widget _item(int index) {
     return SwipeActionCell(
       ///controller
       controller: controller,
       ///index is required if you want to enter edit mode
       index: index,
       performsFirstActionWithFullSwipe: true,
       key: ValueKey(list[index]),
       trailingActions: [
         SwipeAction(
             onTap: (handler) async {
               await handler(true);
               list.removeAt(index);
               setState(() {});
             },
             title: "delete"),
       ],
       child: Padding(
         padding: const EdgeInsets.all(15.0),
         child: Text("This is index of ${list[index]}",
             style: TextStyle(fontSize: 35)),
       ),
     );
   }
  • Example 7:customize shape

Widget _item(int index) {
    return SwipeActionCell(
      key: ValueKey(list[index]),
      trailingActions: [
        SwipeAction(
            nestedAction: SwipeNestedAction(
              ///customize your nested action content

              content: Container(
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(30),
                  color: Colors.red,
                ),
                width: 130,
                height: 60,
                child: OverflowBox(
                  maxWidth: double.infinity,
                  child: Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Icon(
                        Icons.delete,
                        color: Colors.white,
                      ),
                      Text('确认删除',
                          style: TextStyle(color: Colors.white, fontSize: 20)),
                    ],
                  ),
                ),
              ),
            ),

            ///you should set the default  bg color to transparent
            color: Colors.transparent,

            ///set content instead of title of icon
            content: _getIconButton(Colors.red, Icons.delete),
            onTap: (handler) async {
              list.removeAt(index);
              setState(() {});
            }),
        SwipeAction(
            content: _getIconButton(Colors.grey, Icons.vertical_align_top),
            color: Colors.transparent,
            onTap: (handler) {}),
      ],
      child: Padding(
        padding: const EdgeInsets.all(15.0),
        child: Text(
            "This is index of ${list[index]},Awesome Swipe Action Cell!! I like it very much!",
            style: TextStyle(fontSize: 25)),
      ),
    );
  }

  Widget _getIconButton(color, icon) {
    return Container(
      width: 50,
      height: 50,
      decoration: BoxDecoration(
        borderRadius: BorderRadius.circular(25),

        ///set you real bg color in your content
        color: color,
      ),
      child: Icon(
        icon,
        color: Colors.white,
      ),
    );
  }

About CompletionHandler in onTap function of SwipeAction

it means how you want control this cell after you tap it. If you don't want any animation,just don't call it and update your data and UI with setState()

If you want some animation:

  • handler(true) : Means this row will be deleted(You should call setState after it)

  • await handler(true) : Means that you will await the animation to complete(you should call setState after it so that you will get an animation)

  • handler(false) : means it will not delete this row.By default,it just close this cell's action buttons.

  • await handler(false) : means it will wait the close animation to complete.

About all parameter:

I wrote them in my code with dart doc comments.You can read them in source code.

Previous Bug List with related issues

  • issue7 (SwipeActionEditController can't delete cells correctly) --> fixed after v1.1.0
Comments
  • [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: LateInitializationError: Field 'offsetFillActionContentCurve' has not been initialized.

    [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: LateInitializationError: Field 'offsetFillActionContentCurve' has not been initialized.

    I get this error sometimes when tapping on an action with nested action.

    [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: LateInitializationError: Field 'offsetFillActionContentCurve' has not been initialized.

    bug viewed 
    opened by naamapps 26
  • Cannot get size from a render object that has been marked dirty for layout

    Cannot get size from a render object that has been marked dirty for layout

    问题描述: 在列表视图滑动到最后几行时,就会报出如下红字: "Cannot get size from a render object that has been marked dirty for layout" 已经被该问题困扰了几天.

    issue貌似来自: package:flutter_swipe_action_cell/core/cell.dart:929:50

    @override void didUpdateWidget(_ContentWidget oldWidget) { super.didUpdateWidget(oldWidget); WidgetsBinding.instance.addPostFrameCallback((timeStamp) { if (mounted) widget.onLayoutUpdate(context.size); }); }

    完整的报错信息:

    ════════ Exception caught by scheduler library ═══════════════════════════ The following assertion was thrown during a scheduler callback: Cannot get size from a render object that has been marked dirty for layout.

    The size of this render object is ambiguous because this render object has been modified since it was last laid out, which typically means that the size getter was called too early in the pipeline (e.g., during the build phase) before the framework has determined the size and position of the render objects during layout.

    The size getter was called for the following element: _ContentWidget state: __ContentWidgetState#a7aaf The render object from which the size was to be obtained was: RenderTransform#45058 NEEDS-LAYOUT NEEDS-PAINT ... parentData: not positioned; offset=Offset(0.0, 0.0) (can use size) ... constraints: BoxConstraints(0.0<=w<=346.0, 0.0<=h<=Infinity) ... size: Size(346.0, 72.0) ... transform matrix: [0] 1.0,0.0,0.0,0.0 [1] 0.0,1.0,0.0,0.0 [2] 0.0,0.0,1.0,0.0 [3] 0.0,0.0,0.0,1.0 ... origin: null ... alignment: null ... textDirection: ltr ... transformHitTests: false

    Consider using debugPrintMarkNeedsLayoutStacks to determine why the render object in question is dirty, if you did not expect this.

    When the exception was thrown, this was the stack: #0 Element.size. (package:flutter/src/widgets/framework.dart:3875:9) #1 Element.size (package:flutter/src/widgets/framework.dart:3893:6) #2 __ContentWidgetState.didUpdateWidget. (package:flutter_swipe_action_cell/core/cell.dart:929:50) #3 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15) #4 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1063:9) ...

    pubspec.yaml使用的版本 flutter_swipe_action_cell: ^1.2.3

    我的源码片段 是在ListView的itemBuilder中使用的:

    Widget renderItemType([BuildContext context,List list,int idx]){ return SwipeActionCell( key: ObjectKey(list[idx]), child: ListItem(key:ValueKey(list[idx].code),leftTime:list[idx].lastTime,bigTitle:list[idx].name,subTitle:list[idx].code), trailingActions: [ SwipeAction( title: '删除', style:TS.textWhite14, color: Colors.red, icon: Icon(Icons.delete,color: Colors.white,), onTap: (CompletionHandler handler) async { await handler(true); list.removeAt(idx); setState(() {}); },

        ),
      ],
    );
    

    }

    我的开发环境: flutter doctor -v [√] Flutter (Channel unknown, 1.22.3, on Microsoft Windows [Version 6.1.7601], locale zh-CN) • Flutter version 1.22.3 at D:\android\flutter • Framework revision 8874f21e79 (3 weeks ago), 2020-10-29 14:14:35 -0700 • Engine revision a1440ca392 • Dart version 2.10.3 • Pub download mirror https://pub.flutter-io.cn • Flutter download mirror https://storage.flutter-io.cn

    [√] Android toolchain - develop for Android devices (Android SDK version 29.0.3) • Android SDK at D:\android\Sdk • Platform android-29, build-tools 29.0.3 • ANDROID_HOME = D:\android\Sdk • Java binary at: D:\android\Studio\jre\bin\java • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01) • All Android licenses accepted.

    [√] Android Studio (version 4.0) • Android Studio at D:\android\Studio • Flutter plugin installed • Dart plugin version 193.7547 • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

    opened by TerryLiu 19
  • Empty actions list

    Empty actions list

    Hey really nice package! I have a little problem, I want to show actions with a condition. My application can be RTL and LTR, I need to set the leading actions if the direction of the app is ltr and trailing actions need to be empty. If the direction of the app is rtl I need to set the trailing actions and the leading actions need to be empty. However, errors show up if the list of the actions is empty. I looked at the code, and saw you initialize the actions with defaultActions list. This is fine, but if I over swipe the item, there is a slight red background which is shown (an empty SwipeAction I suppose). Here is a gif to show the issue: VideoCrop1605800497478

    I think you should allow null or an empty actions list. Or fix the red background of the empty SwipeAction in the defaultActions list. Thanks!

    bug waiting response beta bugfix waiting for testing 
    opened by naamapps 13
  • 最新版本 2.2.2 导致打包失败

    最新版本 2.2.2 导致打包失败

    更换到 2.2.1 打包修复 Flutter 2.10.5版本

    Running Gradle task 'assembleProfile'...                        
    ../../../flutter/.pub-cache/hosted/pub.dartlang.org/flutter_swipe_action_cell-2.2.2/lib/core/cell.dart:1055:29: Error: Method 'addPostFrameCallback' cannot be called on 'WidgetsBinding?' because it is potentially null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../flutter/packages/flutter/lib/src/widgets/binding.dart').
    Try calling using ?. instead.
        WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
                                ^^^^^^^^^^^^^^^^^^^^
    ../../../flutter/.pub-cache/hosted/pub.dartlang.org/flutter_swipe_action_cell-2.2.2/lib/core/cell.dart:1063:29: Error: Method 'addPostFrameCallback' cannot be called on 'WidgetsBinding?' because it is potentially null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../flutter/packages/flutter/lib/src/widgets/binding.dart').
    Try calling using ?. instead.
        WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
                                ^^^^^^^^^^^^^^^^^^^^
    ../../../flutter/.pub-cache/hosted/pub.dartlang.org/flutter_swipe_action_cell-2.2.2/lib/core/swipe_pull_align_button.dart:59:29: Error: Method 'addPostFrameCallback' cannot be called on 'WidgetsBinding?' because it is potentially null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../flutter/packages/flutter/lib/src/widgets/binding.dart').
    Try calling using ?. instead.
        WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
                                ^^^^^^^^^^^^^^^^^^^^
    ../../../flutter/.pub-cache/hosted/pub.dartlang.org/flutter_swipe_action_cell-2.2.2/lib/core/swipe_pull_button.dart:68:29: Error: Method 'addPostFrameCallback' cannot be called on 'WidgetsBinding?' because it is potentially null.
     - 'WidgetsBinding' is from 'package:flutter/src/widgets/binding.dart' ('../../../flutter/packages/flutter/lib/src/widgets/binding.dart').
    Try calling using ?. instead.
        WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
                                ^^^^^^^^^^^^^^^^^^^^
    
    
    opened by josercc 12
  • Height is not updated correctly

    Height is not updated correctly

    Hey, I have encountered a bug. When the child of the SwipeActionCell is changing its height, the swipe actions height is not updated to match the child. Here is a video:

    https://user-images.githubusercontent.com/37176893/169868940-b4044c79-d50b-481b-aa2e-5e8eb631d8aa.mp4

    And here is the widget:
    import 'package:flutter/material.dart';
    import 'package:flutter_swipe_action_cell/flutter_swipe_action_cell.dart';
    
    class Bug extends StatefulWidget {
      const Bug({super.key});
    
      @override
      State<Bug> createState() => _BugState();
    }
    
    class _BugState extends State<Bug> {
      bool isAdded = false;
      @override
      Widget build(BuildContext context) {
        return Column(
          children: [
            SwipeActionCell(
              key: const Key('bug'),
              leadingActions: [
                SwipeAction(
                  onTap: (_) {},
                  icon: const Icon(Icons.bug_report),
                ),
              ],
              child: Container(
                width: double.infinity,
                padding: const EdgeInsets.all(10),
                color: Colors.blue,
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: [
                    const Text('bug'),
                    if (isAdded) const Text('added'),
                  ],
                ),
              ),
            ),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  isAdded = !isAdded;
                });
              },
              child: const Text('Toggle'),
            ),
          ],
        );
      }
    }
    
    

    Thanks in advanced :)

    bug developing viewed fixed 
    opened by naamapps 11
  • Bad state: No element

    Bad state: No element

    When the exception was thrown, this was the stack: 
    #0      List.first (dart:core-patch/growable_array.dart:332:5)
    #1      SwipeActionCellState._closeNestedAction (package:flutter_swipe_action_cell/core/cell.dart:661:33)
    #2      SwipeActionCellState._scrollListener (package:flutter_swipe_action_cell/core/cell.dart:415:7)
    #3      ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:308:24)
    #4      ValueNotifier.value= (package:flutter/src/foundation/change_notifier.dart:412:5)
    #5      ScrollPosition.beginActivity (package:flutter/src/widgets/scroll_position.dart:884:25)
    #6      ScrollPositionWithSingleContext.beginActivity (package:flutter/src/widgets/scroll_position_with_single_context.dart:114:11)
    #7      ScrollPositionWithSingleContext.drag (package:flutter/src/widgets/scroll_position_with_single_context.dart:264:5)
    
    canEdit ? [
                        SwipeAction(
                            title: '编辑',
                            onTap: (CompletionHandler handler) async {
                              editAction?.call();
                            },
                            color: Colors.amber),
                      ] : []
    

    滚动的时候报错

    viewed 
    opened by Adrift001 11
  • 没有展开或者收回的回调

    没有展开或者收回的回调

    看了源码,只有一个开始滑动的回调 CellFingerOpenEvent,还有编辑模式的回调,找不到侧滑展开的回调和侧滑收回的回调,有什么好的办法监听到这两个事件吗

        // 监听侧滑 这个回调方法展开和收回都会执行,而且无法判断是展开还是收回
        SwipeActionStore.getInstance().bus.on<CellFingerOpenEvent>().listen((CellFingerOpenEvent event) {
          ValueKey<String> valueKey = event.key as ValueKey<String>;
          print('--->>> open: ${valueKey.value}  ${_swipeActionController.selectedSet.length}');
        });
    

    version: flutter_swipe_action_cell: ^2.1.1 flutter version: 2.5.2 channel stable

    viewed 
    opened by zhaopingfu 6
  • Two issues - Awaiting handler not working & SwipeNestedAction not closing when calling handler(false)

    Two issues - Awaiting handler not working & SwipeNestedAction not closing when calling handler(false)

    Hey, I have found 2 issues.

    1. Awaiting the handler doesn't seem to work, I call handler(false) because I have my own animation when removing items from the list, but I want my animation to run after the slidable is closed. So I need to await the handler but its not waiting.
    2. SwipeNestedAction is not closing (stays in place) when calling handler(false) on tap. As I said, I have my own animations so when removing something from the list the nested action just stays there without closing. Need to point out that I have a custom content in all of the SwipeActions including the SwipeNestedAction (exactly like your example in the readme).

    Thanks!

    enhancement waiting response implemented viewed 
    opened by naamapps 6
  • Crash when dragging the swipe action cell item out of screen

    Crash when dragging the swipe action cell item out of screen

    ════════ Exception caught by widgets library ═══════════════════════════════════
    The following NoSuchMethodError was thrown building Container(bg: BoxDecoration(color: Color(0xff050505)), margin: EdgeInsets(1.0, 0.0, 1.0, 0.0)):
    The getter 'position' was called on null.
    Receiver: null
    Tried calling: position
    
    The relevant error-causing widget was
        Container 
    When the exception was thrown, this was the stack
    #0      Object.noSuchMethod  (dart:core-patch/object_patch.dart:51:5)
    #1      _SwipeActionCellState._addScrollListener 
    package:flutter_swipe_action_cell/core/swipe_action_cell.dart:207
    #2      _SwipeActionCellState.didChangeDependencies 
    package:flutter_swipe_action_cell/core/swipe_action_cell.dart:191
    #3      StatefulElement._firstBuild 
    package:flutter/…/widgets/framework.dart:4716
    #4      ComponentElement.mount 
    package:flutter/…/widgets/framework.dart:4531
    ...
    ════════════════════════════════════════════════════════════════════════════════
    
    ════════ Exception caught by widgets library ═══════════════════════════════════
    'package:flutter/src/widgets/framework.dart': Failed assertion: line 5028 pos 14: '_dependents.isEmpty': is not true.
    The relevant error-causing widget was
        MediaQuery 
    lib/main.dart:98
    ════════════════════════════════════════════════════════════════════════════════
    
    ════════ Exception caught by scheduler library ═════════════════════════════════
    Cannot get size from a render object that has not been through layout.
    ════════════════════════════════════════════════════════════════════════════════
    
    opened by gliese667c 6
  • Ignore drag gestures if no actions are provided

    Ignore drag gestures if no actions are provided

    Use case: chat in the tab - with reply by swipe from one edge and switch tab by swipe from other edge. At the moment horizontal drag in both axis intercepted by GestureDetector even if trailing or leading actions are empty.

    tested good 
    opened by NaikSoftware 5
  • 当trailingActions个数为一个的时候,删除按钮侧滑不能完全展示

    当trailingActions个数为一个的时候,删除按钮侧滑不能完全展示

    截屏2021-05-17 下午4 42 01

    截屏2021-05-17 下午4 42 21

    Widget _item(BuildContext ctx, int index) { return SwipeActionCell( controller: controller, index: index, key: ValueKey(list[index]),

      ///animation default value below...
      normalAnimationDuration: 500,
      deleteAnimationDuration: 400,
      performsFirstActionWithFullSwipe: true,
      trailingActions: [
        SwipeAction(
            title: "取消删除",
            // nestedAction: SwipeNestedAction(title: "confirm"),
            onTap: (handler) async {
              await handler(true);
    
              list.removeAt(index);
              setState(() {});
            }),
        // SwipeAction(title: "action2", color: Colors.grey, onTap: (handler) {}),
      ],
    

    action数组为一个的时候 取消删除 显示不完整

    waiting response viewed 
    opened by GFDreamer 5
  • How to create a useful issue(如何提一个有用的issue)

    How to create a useful issue(如何提一个有用的issue)

    1. If you come across some bugs

    you can try lastest version of this package.

    2. If The bugs are found in lastest version,you should:

    • Provide demo code for me to reproduce bug quickly.The code can run directly
    • Provide a description for me .It can be text,or GIF or video to show me where the bug is.

    If you have some enhancement advice

    Just write in your issue directly.😀(Not write in this issue)

    template issue 
    opened by luckysmg 0
Releases(3.0.4)
Owner
WenJingRui
Clouds wait for wind , while I pursue the dream
WenJingRui
Card Swipe Animation Ruchika GuptaCard Swipe Animation [404⭐] - Swipe cards template by Ruchika Gupta.

FlutterCardSwipe Card Swipe Animation Creating the swipe view as used in the Tinder. Swipe right is considered accepted and swipe left is rejected.It

Ruchika Gupta 517 Dec 27, 2022
A Flutter package to create a nice circular menu using a Floating Action Button.

FAB Circular Menu A Flutter package to create a nice circular menu using a Floating Action Button. Inspired by Mayur Kshirsagar's great FAB Microinter

Mariano Cordoba 198 Jan 5, 2023
This is a repository for Flutter Focused Menu, an easy to implement package for adding Focused Long Press Menu to Flutter Applications

Focused Menu This is an easy to implement package for adding Focused Long Press Menu to Flutter Applications Current Features Add Focused Menu to Any

Paras Jain 160 Dec 26, 2022
The Health==Wealth app aims to make leading a healthy lifestyle simple, fun and rewarding for students.

The Health==Wealth app aims to make leading a healthy lifestyle simple, fun and rewarding for students. Students can also track and see their progress through the app.

null 2 Jun 25, 2022
Sample flutter project to show exchange Rates of leading cryptos to different currencies in the world.

bitcointicker A bitcoin ticker project Getting Started This project is a starting point for a Flutter application. A few resources to get you started

null 0 Feb 15, 2022
Arissettingsmenuexm - Settings Menu with different choices by clicking on a Popup Menu Button in Flutter

Flutter Tutorial - Settings Menu & AppBar Dropdown Menu Show a Flutter Settings

Behruz Hurramov 1 Jan 9, 2022
Flutter-pop-up-menu - Pop up Menu - Mobile Devices Programming

Pop Up Menu App A flutter demo app with a pop up menu button Developer Alexander Sosa (https://www.linkedin.com/in/alexander-sosa-asillanes/) Technolo

Alexander Sosa 0 Jan 3, 2022
This package will animate a floating action button at the center and icons at the bottomNavigationBar using AnimatedContainer and SlideTransition respectively.

floating_bottom_bar This package will animate a floating action button at the center and icons at the bottomNavigationBar using AnimatedContainer and

MindInventory 11 Oct 10, 2022
Floating Action Button Widget For Flutter

Flutter Tutorial - FloatingActionButton Widget (FAB) Embed the FloatingActionBut

Behruz Hurramov 0 Dec 27, 2021
GitHub Action that uses the Dart Package Analyzer to compute the Pub score of Dart/Flutter packages

Dart/Flutter package analyzer This action uses the pana (Package ANAlysis) package to compute the score that your Dart or Flutter package will have on

Axel Ogereau-Peltier 45 Dec 29, 2022
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 customizable Flutter library that provides a circular context menu

Flutter Pie Menu ?? A customizable Flutter library that provides a circular context menu similar to Pinterest's. Usage Wrap the widget that will react

Raşit Ayaz 14 Jan 4, 2023
A Flutter widget to show an icon collection to pick. This widget extend TextField and has a similar behavior as TextFormField

icon_picker A Flutter widget to show an icon collection to pick. This widget extend TextField and has a similar behavior as TextFormField Usage In the

m3uzz Soluções em TI 11 Sep 27, 2022
Cupertino back gesture - Flutter package to set custom width of iOS back swipe gesture area

cupertino_back_gesture A Flutter package to set custom width of iOS back swipe gesture area. Usage To use this package, add cupertino_back_gesture as

null 28 Dec 7, 2022
Flutter package for displaying and animating Scalable Vector Graphics 1.1 files. The package has been written solely in Dart Language.

Animated SVG | Flutter Package Flutter package for displaying and animating Scalable Vector Graphics 1.1 files. The package has been written solely in

Bulent Baris Kilic 5 Jul 19, 2022
A Contextual action bar workaround for flutter

Flutter contextual action bar(CAB) CAB & Flutter CAB is a top app bar that replace the application app bar to provide contextual actions to selected i

null 17 Sep 16, 2022
A action bottom sheet that adapts to the platform (Android/iOS).

Adaptive action sheet A action bottom sheet that adapts to the platform (Android/iOS). iOS Android Getting Started Add the package to your pubspec.yam

Daniel Ioannou 26 Sep 26, 2022
Master Channel cannot use Glass Floating Action Button

Problem Master Channel cannot use GlassFloatingActionButton. About This package

null 7 Oct 2, 2022
Adaptive dialog - Show alert dialog or modal action sheet adaptively according to platform.

adaptive_dialog Show alert dialog or modal action sheet adaptively according to platform. showOkAlertDialog Convenient wrapper of showAlertDialog. iOS

Masayuki Ono (mono) 244 Dec 17, 2022