Code Monkey home page Code Monkey logo

flutter_slidable's Introduction

Pub BuyMeACoffee

Slidable is a Flutter Favorite package!

flutter_slidable

A Flutter implementation of slidable list item with directional slide actions that can be dismissed.

Sponsors

Our top sponsors are shown below! [Become a Sponsor]


Try the Flutter Chat Tutorial Β πŸ’¬

Migration from 0.6.0

You can read this small guide to migrate from the 0.6 to the 1.0 version: https://github.com/letsar/flutter_slidable/wiki/Migration-from-version-0.6.0-to-version-1.0.0

Features

  • Accepts start (left/top) and end (right/bottom) action panes.
  • Can be dismissed.
  • 4 built-in action panes.
  • 2 built-in slide action widgets.
  • 1 built-in dismiss animation.
  • You can easily create custom layouts and animations.
  • You can use a builder to create your slide actions if you want special effects during animation.
  • Closes when a slide action has been tapped (overridable).
  • Closes when the nearest Scrollable starts to scroll (overridable).
  • Option to disable the slide effect easily.

Install

In the pubspec.yaml of your flutter project, add the following dependency:

dependencies:
  flutter_slidable: <latest_version>

In your library add the following import:

import 'package:flutter_slidable/flutter_slidable.dart';

Getting started

Example:

Slidable(
  // Specify a key if the Slidable is dismissible.
  key: const ValueKey(0),

  // The start action pane is the one at the left or the top side.
  startActionPane: ActionPane(
    // A motion is a widget used to control how the pane animates.
    motion: const ScrollMotion(),

    // A pane can dismiss the Slidable.
    dismissible: DismissiblePane(onDismissed: () {}),

    // All actions are defined in the children parameter.
    children: const [
      // A SlidableAction can have an icon and/or a label.
      SlidableAction(
        onPressed: doNothing,
        backgroundColor: Color(0xFFFE4A49),
        foregroundColor: Colors.white,
        icon: Icons.delete,
        label: 'Delete',
      ),
      SlidableAction(
        onPressed: doNothing,
        backgroundColor: Color(0xFF21B7CA),
        foregroundColor: Colors.white,
        icon: Icons.share,
        label: 'Share',
      ),
    ],
  ),

  // The end action pane is the one at the right or the bottom side.
  endActionPane: const ActionPane(
    motion: ScrollMotion(),
    children: [
      SlidableAction(
        // An action can be bigger than the others.
        flex: 2,
        onPressed: doNothing,
        backgroundColor: Color(0xFF7BC043),
        foregroundColor: Colors.white,
        icon: Icons.archive,
        label: 'Archive',
      ),
      SlidableAction(
        onPressed: doNothing,
        backgroundColor: Color(0xFF0392CF),
        foregroundColor: Colors.white,
        icon: Icons.save,
        label: 'Save',
      ),
    ],
  ),

  // The child of the Slidable is what the user sees when the
  // component is not dragged.
  child: const ListTile(title: Text('Slide me')),
),

Motions

Any ActionPane has a motion parameter which allow you to define how the pane animates when the user drag the Slidable.

Behind Motion

The actions appear as if they where behind the Slidable:

Behind Motion

Drawer Motion

Animate the actions as if they were drawers, when the Slidable is moving:

Drawer Motion

Scroll Motion

The actions follow the Slidable while it's moving:

Scroll Motion

Stretch Motion

Animate the actions as if they were streched while the Slidable is moving:

Stretch Motion

Controller

You can use SlidableController to open or close the actions programmatically:

final controller = SlidableController();

// ...

Slidable(
  controller: controller,
  // ...
);

// ...

// Open the actions
void _handleOpen() {
  controller.openEndActionPane();
  // OR
  //controller.openStartActionPane();
}

void _handleOpen() {
  controller.close();
}

FAQ

You can read the FAQ here: https://github.com/letsar/flutter_slidable/wiki/FAQ

Sponsoring

I'm working on my packages on my free-time, but I don't have as much time as I would. If this package or any other package I created is helping you, please consider to sponsor me so that I can take time to read the issues, fix bugs, merge pull requests and add features to these packages.

Contributions

Feel free to contribute to this project.

If you find a bug or want a feature, but don't know how to fix/implement it, please fill an issue.
If you fixed a bug or implemented a feature, please send a pull request.

flutter_slidable's People

Contributors

alex-melnyk avatar bct-fbo avatar diegotori avatar ened avatar freewheelnat avatar gones avatar hillelcoren avatar johnstef99 avatar letsar avatar mideb avatar pablopl avatar qunccccccc avatar sestegra avatar timekone avatar tp avatar ueman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_slidable's Issues

Slidable freezes on tab bar only in release mode

Steps to Reproduce

  1. Create a Tab Widget
  2. Switch between tabs
  3. Now do a slidable.
  4. Switch between tabs.
  5. Do slidable again and now it freezes.

Exception

[ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter (26409): NoSuchMethodError: The method 'contains' was called on null.
E/flutter (26409): Receiver: null
E/flutter (26409): Tried calling: contains()
E/flutter (26409): #0      RenderBox.hitTest (package:flutter/src/rendering/box.dart:1862)
E/flutter (26409): #1      _RenderSliverMultiBoxAdaptor&RenderSliver&ContainerRenderObjectMixin&RenderSliverHelpers.hitTestBoxChild (package:flutter/src/rendering/sliver.dart:1475)
E/flutter (26409): #2      RenderSliverMultiBoxAdaptor.hitTestChildren (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:455)
E/flutter (26409): #3      RenderSliver.hitTest (package:flutter/src/rendering/sliver.dart:1137)
E/flutter (26409): #4      RenderSliverPadding.hitTestChildren (package:flutter/src/rendering/sliver_padding.dart:266)
E/flutter (26409): #5      RenderSliver.hitTest (package:flutter/src/rendering/sliver.dart:1137)
E/flutter (26409): #6      RenderViewportBase.hitTestChildren (package:flutter/src/rendering/viewport.dart:503)
E/flutter (26409): #7      RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #8      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:118)
E/flutter (26409): #9      RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #10     RenderIgnorePointer.hitTest (package:flutter/src/rendering/proxy_box.dart:2727)
E/flutter (26409): #11     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:118)
E/flutter (26409): #12     RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #13     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:118)
E/flutter (26409): #14     RenderProxyBoxWithHitTestBehavior.hitTest (package:flutter/src/rendering/proxy_box.dart:165)
E/flutter (26409): #15     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:118)
E/flutter (26409): #16     RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #17     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:118)
E/flutter (26409): #18     RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #19     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:118)
E/flutter (26409): #20     RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #21     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:118)
E/flutter (26409): #22     RenderCustomPaint.hitTestChildren (package:flutter/src/rendering/custom_paint.dart:500)
E/flutter (26409): #23     RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #24     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:118)
E/flutter (26409): #25     RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #26     _RenderFlex&RenderBox&ContainerRenderObjectMixin&RenderBoxContainerDefaultsMixin.defaultHitTestChildren (package:flutter/src/rendering/box.dart:2190)
E/flutter (26409): #27     RenderFlex.hitTestChildren (package:flutter/src/rendering/flex.dart:925)
E/flutter (26409): #28     RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #29     _RenderCustomMultiChildLayoutBox&RenderBox&ContainerRenderObjectMixin&RenderBoxContainerDefaultsMixin.defaultHitTestChildren (package:flutter/src/rendering/box.dart:2190)
E/flutter (26409): #30     RenderCustomMultiChildLayoutBox.hitTestChildren (package:flutter/src/rendering/custom_layout.dart:365)
E/flutter (26409): #31     RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #32     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:118)
E/flutter (26409): #33     RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #34     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.hitTestChildren (package:flutter/src/rendering/proxy_box.dart:118)
E/flutter (26409): #35     RenderBox.hitTest (package:flutter/src/rendering/box.dart:1863)
E/flutter (26409): #36     RenderPhysicalMode

flutter doctor

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel beta, v0.5.1, on Microsoft Windows [Version 10.0.17134.228], locale en-US)
[√] Android toolchain - develop for Android devices (Android SDK 28.0.0-rc2)
[√] Android Studio (version 3.1)
[√] IntelliJ IDEA Community Edition (version 2018.1)
[√] Connected devices (1 available)

β€’ No issues found!

Workarounds already done

  1. Use NeverScrollablePhysics for tab bar.

SlidableController not closing other slidable items

hi, it doesn't seem to work.
while I defined it correctly in the ctor I can still open several items and they all remain opened (I expected the other to auto close when another one is opened).
image

code:
...
final SlidableController slidableController = new SlidableController();
...
child: Slidable(
key: Key(_row.animalID),
controller: slidableController,
delegate: new SlidableBehindDelegate(),
actionExtentRatio: 0.25,
secondaryActions: [

....

onTap to dismiss without Slide to dismiss

I want to have an onTap to dismiss without SlideToDismiss because I dont want user to slide for dismiss. As for now, I only can enable the state.dismiss() if the state.dismissible is true. But state.dismissible is only true if slideToDismiss is not null. Please help to make state.dismiss() without slide to dismiss. Thanks

Whem you dissmised the application stall

I tested with your sample file and delete every row on the table doing a full swipe
I got an alert "item will be deleted" After that the application stop responding

I/flutter (30767): Another exception was thrown: NoSuchMethodError: The method 'stop' was called on null.

/flutter (30767): ══║ EXCEPTION CAUGHT BY ANIMATION LIBRARY β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
I/flutter (30767): The following assertion was thrown while notifying status listeners for AnimationController:
I/flutter (30767): Looking up a deactivated widget's ancestor is unsafe.
I/flutter (30767): At this point the state of the widget's element tree is no longer stable. To safely refer to a
I/flutter (30767): widget's ancestor in its dispose() method, save a reference to the ancestor by calling
I/flutter (30767): inheritFromWidgetOfExactType() in the widget's didChangeDependencies() method.
I/flutter (30767):
I/flutter (30767): When the exception was thrown, this was the stack:
I/flutter (30767): #0      Element._debugCheckStateIsActiveForAncestorLookup.<anonymous closure> (package:flutter/src/widgets/framework.dart:3215:9)
I/flutter (30767): #1      Element._debugCheckStateIsActiveForAncestorLookup (package:flutter/src/widgets/framework.dart:3224:6)
I/flutter (30767): #2      Element.visitAncestorElements (package:flutter/src/widgets/framework.dart:3305:12)
I/flutter (30767): #3      Notification.dispatch (package:flutter/src/widgets/notification_listener.dart:59:12)
I/flutter (30767): #4      _SlidableState&State&TickerProviderStateMixin&AutomaticKeepAliveClientMixin._ensureKeepAlive (package:flutter/src/widgets/automatic_keep_alive.dart:345:49)
I/flutter (30767): #5      _SlidableState&State&TickerProviderStateMixin&AutomaticKeepAliveClientMixin.updateKeepAlive (package:flutter/src/widgets/automatic_keep_alive.dart:366:9)
I/flutter (30767): #6      SlidableState._handleShowAllActionsStatusChanged (package:flutter_slidable/src/widgets/slidable.dart:993:5)
I/flutter (30767): #7      _AnimationController&Animation&AnimationEagerListenerMixin&AnimationLocalListenersMixin&AnimationLocalStatusListenersMixin.notifyStatusListeners (package:flutter/src/animation/listener_helpers.dart:161:19)
I/flutter (30767): #8      AnimationController._checkStatusChanged (package:flutter/src/animation/animation_controller.dart:531:7)
I/flutter (30767): #9      AnimationController._startSimulation (package:flutter/src/animation/animation_controller.dart:475:5)
I/flutter (30767): #10     AnimationController.animateWith (package:flutter/src/animation/animation_controller.dart:462:12)
I/flutter (30767): #11     AnimationController.fling (package:flutter/src/animation/animation_controller.dart:450:12)
I/flutter (30767): #12     SlidableState.close (package:flutter_slidable/src/widgets/slidable.dart:903:28)
I/flutter (30767): #13     SlidableController.activeState= (package:flutter_slidable/src/widgets/slidable.dart:593:19)
I/flutter (30767): #14     SlidableState.dispose (package:flutter_slidable/src/widgets/slidable.dart:889:24)
I/flutter (30767): #15     StatefulElement.unmount (package:flutter/src/widgets/framework.dart:3833:12)
I/flutter (30767): #16     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1697:13)
I/flutter (30767): #17     _InactiveElements._unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1695:7)
I/flutter (30767): #18     SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:4654:14)
I/flutter (30767): #19     _InactiveElements._unmount (package:flutter/src/widgets/framework.dart:1693:13)
I/flutter (30767): #20     ListIterable.forEach (dart:_internal/iterable.dart:39:13)
I/flutter (30767): #21     _InactiveElements._unmountAll (package:flutter/src/widgets/framework.dart:1706:25)
I/flutter (30767): #22     BuildOwner.finalizeTree.<anonymous closure> (package:flutter/src/widgets/framework.dart:2341:27)
I/flutter (30767): #23     BuildOwner.lockState (package:flutter/src/widgets/framework.dart:2173:15)
I/flutter (30767): #24     BuildOwner.finalizeTree (package:flutter/src/widgets/framework.dart:2340:7)
I/flutter (30767): #25     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:655:18)
I/flutter (30767): #26     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:214:5)
I/flutter (30767): #27     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter (30767): #28     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter (30767): #29     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
I/flutter (30767): #30     _invoke (dart:ui/hooks.dart:128:13)
I/flutter (30767): #31     _drawFrame (dart:ui/hooks.dart:117:3)
I/flutter (30767):
I/flutter (30767): The AnimationController notifying status listeners was:
I/flutter (30767):   AnimationController#305da(β—€ 1.000)
I/flutter (30767): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (30767): Another exception was thrown: Looking up a deactivated widget's ancestor is unsafe.
I/flutter (30767): Another exception was thrown: Looking up a deactivated widget's ancestor is unsafe.
I/flutter (30767): Another exception was thrown: Looking up a deactivated widget's ancestor is unsafe.
I/flutter (30767): Another exception was thrown: Looking up a deactivated widget's ancestor is unsafe.
I/flutter (30767): Another exception was thrown: Looking up a deactivated widget's ancestor is unsafe.
I/flutter (30767): Another exception was thrown: Looking up a deactivated widget's ancestor is unsafe.
I/flutter (30767): Another exception was thrown: Looking up a deactivated widget's ancestor is unsafe.
I/flutter (30767): Another exception was thrown: Looking up a deactivated widget's ancestor is unsafe.
I/flutter (30767): Another exception was thrown: Looking up a deactivated widget's ancestor is unsafe.
I/flutter (30767): Another exception was thrown: NoSuchMethodError: The method 'stop' was called on null.
I/flutter (30767): Another exception was thrown: NoSuchMethodError: The method 'stop' was called on null.
I/flutter (30767): Another exception was thrown: NoSuchMethodError: The method 'stop' was called on null.
I/flutter (30767): Another exception was thrown: NoSuchMethodError: The method 'stop' was called on null.
I/flutter (30767): Another exception was thrown: NoSuchMethodError: The method 'stop' was called on null.

dismissal null or not set make slidable feature/refactor crashed

I trying to make function slidable item's open() work by click on button so I changed to use branch feature/refactor, but this branch require init Slidable with dismissal, without this it crashed with below log.

E/flutter: [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
NoSuchMethodError: The method '[]' was called on null.
Receiver: null
Tried calling: [](Instance of 'SlideActionType')
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:50:5)
#1 SlidableState._dismissThreshold (package:flutter_slidable/src/widgets/slidable.dart:562:42)
#2 SlidableState.build (package:flutter_slidable/src/widgets/slidable.dart:897:27)
#3 StatefulElement.build (package:flutter/src/widgets/framework.dart:3825:27)
#4 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3739:15)
#5 Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
#6 StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
#7 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#8 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
#9 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#10 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
#11 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#12 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
#13 Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
#14 StatelessElement.update (package:flutter/src/widgets/framework.dart:3796:5)
#15 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#16 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
#17 Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
#18 ProxyElement.update (package:flutter/src/widgets/framework.dart:4006:5)
#19 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#20 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
#21 Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
#22 StatefulElement.update (package:flutter/src/widgets/framework.dart:3894:5)
#23 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#24 SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1034:36)
#25 SliverMultiBoxAdaptorElement.performRebuild.processElement (package:flutter/src/widgets/sliver.dart:984:34)
#26 List.forEach (dart:core-patch/growable_array.dart:278:8)
#27 SliverMultiBoxAdaptorElement.performRebuild (package:flutter/src/widgets/sliver.dart:995:36)
#28 SliverMultiBoxAdaptorElement.update (package:flutter/src/widgets/sliver.dart:961:7)
#29 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#30 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
#31 Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
#32 ProxyElement.update (package:flutter/src/widgets/framework.dart:4006:5)
#33 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#34 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
#35 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#36 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4601:32)
#37 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4992:17)
#38 _ViewportElement.update (package:flutter/src/widgets/viewport.dart:192:11)
#39 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#40 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
#41 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#42 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4883:14)
#43 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:15)
#44 SingleChildRenderObjectElement.update (pack

Please help me, thanks

Icons are out of range

First of all thanks for awesome work!
I'm new for Flutter and making demo just for learning purpose.
Just one issue got in my code the left and right side icons display out of range means its override on divider. Look at below Image.

simulator screen shot - iphone 8 plus - 2018-11-02 at 15 43 35

And below is my code.

Widget setupListTile(User userdata, int index) {
    return new Slidable(
      delegate: new SlidableDrawerDelegate(),
      actionExtentRatio: 0.25,
      child: Column(children: <Widget>[
        ListTile(
          leading: CircleAvatar(
            backgroundColor: Colors.blueAccent,
            child: Text(userdata.name[0].toUpperCase(),
                style: TextStyle(color: Colors.white)),
          ),
          title: Text('${userdata.name}'),
          subtitle: Text(userdata.company.name),
          onTap: () {
            _showSnackBar("Hey ${userdata.name}, How are you?");
          },
        ),
        Divider()
      ]),
      actions: <Widget>[
        new IconSlideAction(
          caption: 'Archive',
          color: Colors.blue,
          icon: Icons.archive,
          onTap: () => _showSnackBar('Archive'),
        ),
        new IconSlideAction(
          caption: 'Share',
          color: Colors.indigo,
          icon: Icons.share,
          onTap: () => _showSnackBar('Share'),
        ),
      ],
      secondaryActions: <Widget>[
        new IconSlideAction(
          caption: 'More',
          color: Colors.black45,
          icon: Icons.more_horiz,
          onTap: () => _showSnackBar('More'),
        ),
        new IconSlideAction(
          caption: 'Delete',
          color: Colors.red,
          icon: Icons.delete,
          onTap: () => _showSnackBar('Delete'),
        ),
      ],
    );
  }

Kindly guide me where I need to change?

Set SlidableController.activeState.open() with onTap

Thank you for an awesome Flutter implementation!
Is it possible to open the drawer and show all the iconslider actions through a onTap event on the Slidable? See the scenario on the two images below:
screenshot

Currently the only example that is given is to close the drawer as seen in Issue 33:
#33
However, if the Slidable is not in an activestate, the output of:
slidableController.activeState is null, and hence I am not able to do:
slidableController.activeState.open() because it will simply say:
"The method 'open' was called on null"

See the example code below:
codeexample

Does not work with ReorderableListView!

Slidable widget doesn't seem to work alongside ReorderableListView. When I use it alongside ReorderableListView, the slide gestures (left swipe, right swipe) do not have any effect. A fix for this would be very useful for those who want the convenience of having slidable menus alongside the ability to rearrange list items.

onTap doesnt close properly slider when calling setState in it

Hi,

When i call setState on onTap, the slider close promptly, and not by sliding back.

IconSlideAction( caption: 'Modifier', color: spYellow, icon: Icons.create, onTap: () { setState(() { titleController.text = session.title; }); showDialog( context: context, child: popupUpsertSession(session, _update) ); }, )

It's a minor detail, but if you can fix it,

Have a nice day !

SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

helllo, thank you for shared. see the problem when i integration to preject in my project. how to solve this issues. (my english not good so sory)
this problem output:
SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

help me please

Vertical

I guess one word is enough to describe the idea ;)
This is not a requirement but better have it in mind since designers will come with it one day or another.

Icon only slide action without occupying space

Hi,

Thanks very much for the great plugin!

Could we have an option to disable caption without occupying space?
If caption is empty, the vertical alignment of icons looks weird.

Below image shows the different, the red horizontal line helps to sort the problem.

action button alignment

Thanks
Imagination

On tap trigger dismiss animation?

Great widget library!

Is it possible to trigger the dismiss animation of the Slidable when a user taps a SlideAction?

Something like:

              onTap: () {
                 this.dismiss() // trigger animation of slidable leaving
              },

EXCEPTION CAUGHT BY WIDGETS LIBRARY NotificationListener<KeepAliveNotification>

This error happens when I have a List with a lot of element around 1000 elements and scrolled of them very fast,
flutter_slidable 0.4.5

---Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel master, v0.8.1-pre.51, on Microsoft Windows [Versión 10.0.17134.112], locale es-MX)
[!] Android toolchain - develop for Android devices (Android SDK 27.0.3)
! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
[√] Android Studio (version 3.1)
[√] VS Code (version 1.27.1)
[√] VS Code, 64-bit edition (version 1.26.1)
[√] Connected devices (1 available)

I/flutter ( 6914): ══║ EXCEPTION CAUGHT BY WIDGETS LIBRARY β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
I/flutter ( 6914): The following assertion was thrown building NotificationListener:
I/flutter ( 6914): 'package:flutter/src/rendering/object.dart': Failed assertion: line 2798 pos 14:
I/flutter ( 6914): '_debugUltimatePreviousSiblingOf(after, equals: _firstChild)': is not true.
I/flutter ( 6914):
I/flutter ( 6914): Either the assertion indicates an error in the framework itself, or we should provide substantially
I/flutter ( 6914): more information in this error message to help you determine and fix the underlying cause.
I/flutter ( 6914): In either case, please report this assertion by filing a bug on GitHub:
I/flutter ( 6914): https://github.com/flutter/flutter/issues/new
I/flutter ( 6914):
I/flutter ( 6914): When the exception was thrown, this was the stack:
I/flutter ( 6914): #2 _RenderSliverMultiBoxAdaptor&RenderSliver&ContainerRenderObjectMixin._insertIntoChildList (package:flutter/src/rendering/object.dart:2798:14)
I/flutter ( 6914): #3 _RenderSliverMultiBoxAdaptor&RenderSliver&ContainerRenderObjectMixin.insert (package:flutter/src/rendering/object.dart:2832:5)
I/flutter ( 6914): #4 RenderSliverMultiBoxAdaptor.insert (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:209:11)
I/flutter ( 6914): #5 SliverMultiBoxAdaptorElement.insertChildRenderObject (package:flutter/src/widgets/sliver.dart:932:18)
I/flutter ( 6914): #6 RenderObjectElement.attachRenderObject (package:flutter/src/widgets/framework.dart:4525:35)
I/flutter ( 6914): #7 RenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4291:5)
I/flutter ( 6914): #8 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4665:11)
I/flutter ( 6914): #9 Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
I/flutter ( 6914): #10 Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
I/flutter ( 6914): #11 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
I/flutter ( 6914): #12 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
I/flutter ( 6914): #13 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
I/flutter ( 6914): #14 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
I/flutter ( 6914): #15 Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
I/flutter ( 6914): #16 Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
I/flutter ( 6914): #17 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
I/flutter ( 6914): #18 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
I/flutter ( 6914): #19 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
I/flutter ( 6914): #20 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
I/flutter ( 6914): #21 ParentDataElement.mount (package:flutter/src/widgets/framework.dart:3967:11)
I/flutter ( 6914): #22 Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
I/flutter ( 6914): #23 Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
I/flutter ( 6914): #24 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
I/flutter ( 6914): #25 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
I/flutter ( 6914): #26 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3634:5)
I/flutter ( 6914): #27 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3781:11)
I/flutter ( 6914): #28 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3629:5)
I/flutter ( 6914): #29 Element.inflateWidget (package:flutter/src/widgets/framework.dart:2919:14)
I/flutter ( 6914): #30 Element.updateChild (package:flutter/src/widgets/framework.dart:2722:12)
I/flutter ( 6914): #31 SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:811:36)
I/flutter ( 6914): #32 SliverMultiBoxAdaptorElement.performRebuild (package:flutter/src/widgets/sliver.dart:769:34)
I/flutter ( 6914): #33 SliverMultiBoxAdaptorElement.update (package:flutter/src/widgets/sliver.dart:738:7)
I/flutter ( 6914): #34 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #35 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
I/flutter ( 6914): #36 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
I/flutter ( 6914): #37 ProxyElement.update (package:flutter/src/widgets/framework.dart:3921:5)
I/flutter ( 6914): #38 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #39 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
I/flutter ( 6914): #40 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #41 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4391:32)
I/flutter ( 6914): #42 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4781:17)
I/flutter ( 6914): #43 _ViewportElement.update (package:flutter/src/widgets/viewport.dart:192:11)
I/flutter ( 6914): #44 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #45 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
I/flutter ( 6914): #46 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
I/flutter ( 6914): #47 ProxyElement.update (package:flutter/src/widgets/framework.dart:3921:5)
I/flutter ( 6914): #48 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #49 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
I/flutter ( 6914): #50 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #51 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
I/flutter ( 6914): #52 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #53 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
I/flutter ( 6914): #54 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #55 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
I/flutter ( 6914): #56 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #57 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
I/flutter ( 6914): #58 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
I/flutter ( 6914): #59 StatefulElement.update (package:flutter/src/widgets/framework.dart:3811:5)
I/flutter ( 6914): #60 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #61 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
I/flutter ( 6914): #62 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #63 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
I/flutter ( 6914): #64 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #65 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
I/flutter ( 6914): #66 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #67 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4673:14)
I/flutter ( 6914): #68 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #69 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
I/flutter ( 6914): #70 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
I/flutter ( 6914): #71 StatelessElement.update (package:flutter/src/widgets/framework.dart:3714:5)
I/flutter ( 6914): #72 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #73 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
I/flutter ( 6914): #74 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
I/flutter ( 6914): #75 StatefulElement.update (package:flutter/src/widgets/framework.dart:3811:5)
I/flutter ( 6914): #76 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #77 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
I/flutter ( 6914): #78 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
I/flutter ( 6914): #79 StatefulElement.update (package:flutter/src/widgets/framework.dart:3811:5)
I/flutter ( 6914): #80 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #81 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
I/flutter ( 6914): #82 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
I/flutter ( 6914): #83 StatelessElement.update (package:flutter/src/widgets/framework.dart:3714:5)
I/flutter ( 6914): #84 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #85 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4391:32)
I/flutter ( 6914): #86 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4781:17)
I/flutter ( 6914): #87 Element.updateChild (package:flutter/src/widgets/framework.dart:2711:15)
I/flutter ( 6914): #88 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3665:16)
I/flutter ( 6914): #89 Element.rebuild (package:flutter/src/widgets/framework.dart:3507:5)
I/flutter ( 6914): #90 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2255:33)
I/flutter ( 6914): #91 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:653:20)
I/flutter ( 6914): #92 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5)
I/flutter ( 6914): #93 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter ( 6914): #94 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter ( 6914): #95 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
I/flutter ( 6914): #96 _invoke (dart:ui/hooks.dart:128:13)
I/flutter ( 6914): #97 _drawFrame (dart:ui/hooks.dart:117:3)
I/flutter ( 6914): (elided 2 frames from class _AssertionError)
I/flutter ( 6914): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 6914): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 2798 pos 14: '_debugUltimatePreviousSiblingOf(after, equals: _firstChild)': is not true.
I/flutter ( 6914): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 2798 pos 14: '_debugUltimatePreviousSiblingOf(after, equals: _firstChild)': is not true.
I/flutter ( 6914): Another exception was thrown: A RenderSliverPadding expected a child of type RenderSliver but received a child of type RenderErrorBox.
I/flutter ( 6914): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 3509 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.
I/flutter ( 6914): Another exception was thrown: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 3509 pos 14: 'owner._debugCurrentBuildTarget == this': is not true.

Requests: Ripple on tap, Icon and text sizes

Great work! Really useful

A few requests to make the package even better

  1. Add a ripple effect (Inkwell) on action tap
  2. Option to pass an Icon size
  3. Option to send in a custom TextStyle

I know most of these options are available if using the customizable "SlideAction" widget but it would be nice if the IconSlideAction could have these additions.

Max width of the action

Hello! Thank you very much for the library!
There is a question: is it possible to limit the width of the action?
With a wide screen and the parameter actionExtentRatio: 0.25, the actions are very wide.

Changing of SlideAction' size

It seems width of SlideAction is static. I tried to change width of SlideAction by changing child' Container width. But it doesn't work for me.
Is there any way to change width of SlideAction?

keepAlive Issue on Redux ListView-ListTile

This is the error log

V/BoostFramework(15064): BoostFramework() : mPerf = com.qualcomm.qti.Performance@255afe2
I/flutter (15064): ══║ EXCEPTION CAUGHT BY ANIMATION LIBRARY β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
I/flutter (15064): The following NoSuchMethodError was thrown while notifying status listeners for AnimationController:
I/flutter (15064): The getter 'keepAlive' was called on null.
I/flutter (15064): Receiver: null
I/flutter (15064): Tried calling: keepAlive
I/flutter (15064):
I/flutter (15064): When the exception was thrown, this was the stack:
I/flutter (15064): #0      KeepAlive.applyParentData (package:flutter/src/widgets/sliver.dart:1033)
I/flutter (15064): #1      RenderObjectElement._updateParentData (package:flutter/src/widgets/framework.dart:4509)
I/flutter (15064): #2      ParentDataElement._applyParentData.applyParentDataToChild (package:flutter/src/widgets/framework.dart:3973)
I/flutter (15064): #3      ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3688)
I/flutter (15064): #4      ParentDataElement._applyParentData.applyParentDataToChild (package:flutter/src/widgets/framework.dart:3976)
I/flutter (15064): #5      ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:3688)
I/flutter (15064): #6      ParentDataElement._applyParentData (package:flutter/src/widgets/framework.dart:3979)
I/flutter (15064): #7      ParentDataElement.applyWidgetOutOfTurn (package:flutter/src/widgets/framework.dart:4018)
I/flutter (15064): #8      _AutomaticKeepAliveState._updateParentDataOfChild (package:flutter/src/widgets/automatic_keep_alive.dart:135)
I/flutter (15064): #9      _AutomaticKeepAliveState._addClient (package:flutter/src/widgets/automatic_keep_alive.dart:86)
I/flutter (15064): #10     NotificationListener._dispatch (package:flutter/src/widgets/notification_listener.dart:125)
I/flutter (15064): #11     Notification.visitAncestor (package:flutter/src/widgets/notification_listener.dart:45)
I/flutter (15064): #12     Element.visitAncestorElements (package:flutter/src/widgets/framework.dart:3307)
I/flutter (15064): #13     Notification.dispatch (package:flutter/src/widgets/notification_listener.dart:59)
I/flutter (15064): #14     _SlidableState&State&TickerProviderStateMixin&AutomaticKeepAliveClientMixin._ensureKeepAlive (package:flutter/src/widgets/automatic_keep_alive.dart:345)
I/flutter (15064): #15     _SlidableState&State&TickerProviderStateMixin&AutomaticKeepAliveClientMixin.updateKeepAlive (package:flutter/src/widgets/automatic_keep_alive.dart:366)
I/flutter (15064): #16     SlidableState._handleShowAllActionsStatusChanged (package:flutter_slidable/src/widgets/slidable.dart:996)
I/flutter (15064): #17     _AnimationController&Animation&AnimationEagerListenerMixin&AnimationLocalListenersMixin&AnimationLocalStatusListenersMixin.notifyStatusListeners (package:flutter/src/animation/listener_helpers.dart:161)
I/flutter (15064): #18     AnimationController._checkStatusChanged (package:flutter/src/animation/animation_controller.dart:588)
I/flutter (15064): #19     AnimationController._startSimulation (package:flutter/src/animation/animation_controller.dart:532)
I/flutter (15064): #20     AnimationController.animateWith (package:flutter/src/animation/animation_controller.dart:519)
I/flutter (15064): #21     AnimationController.fling (package:flutter/src/animation/animation_controller.dart:507)
I/flutter (15064): #22     SlidableState.close (package:flutter_slidable/src/widgets/slidable.dart:906)
I/flutter (15064): #23     SlidableState._isScrollingListener (package:flutter_slidable/src/widgets/slidable.dart:928)
I/flutter (15064): #24     ChangeNotifier.notifyListeners (package:flutter/src/foundation/change_notifier.dart:161)
I/flutter (15064): #25     ValueNotifier.set:value (package:flutter/src/foundation/change_notifier.dart:217)
I/flutter (15064): #26     ScrollPosition.beginActivity (package:flutter/src/widgets/scroll_position.dart:617)
I/flutter (15064): #27     ScrollPositionWithSingleContext.beginActivity (package:flutter/src/widgets/scroll_position_with_single_context.dart:117)
I/flutter (15064): #28     ScrollPositionWithSingleContext.goBallistic (package:flutter/src/widgets/scroll_position_with_single_context.dart:149)
I/flutter (15064): #29     IdleScrollActivity.applyNewDimensions (package:flutter/src/widgets/scroll_activity.dart:149)
I/flutter (15064): #30     ScrollPosition.applyNewDimensions (package:flutter/src/widgets/scroll_position.dart:485)
I/flutter (15064): #31     ScrollPositionWithSingleContext.applyNewDimensions (package:flutter/src/widgets/scroll_position_with_single_context.dart:107)
I/flutter (15064): #32     ScrollPosition.applyContentDimensions (package:flutter/src/widgets/scroll_position.dart:456)
I/flutter (15064): #33     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1242)
I/flutter (15064): #34     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1438)
I/flutter (15064): #35     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:697)
I/flutter (15064): #36     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:270)
I/flutter (15064): #37     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:654)
I/flutter (15064): #38     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208)
I/flutter (15064): #39     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990)
I/flutter (15064): #40     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930)
I/flutter (15064): #41     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842)
I/flutter (15064): #42     _invoke (dart:ui/hooks.dart:128)
I/flutter (15064): #43     _drawFrame (dart:ui/hooks.dart:117)
I/flutter (15064):
I/flutter (15064): The AnimationController notifying status listeners was:
I/flutter (15064):   AnimationController#0cb7b(β—€ 0.000)
I/flutter (15064): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.
I/flutter (15064): Another exception was thrown: NoSuchMethodError: The getter 'keepAlive' was called on null.





Add option to disable sliding

There are circumstances when you don't want a widget to be slidable all the item, rather conditionally.

A field enabled that takes a boolean would be much appreciated. When true (by default), sliding is allowed to happen, otherwise no sliding can occur.

Any way to make the border of the slideable more round?

Hello!

I want to use slideable on a list of cards, but since the Card Widget has a rounder border than the slidable Widget, it looks very odd. I originally wanted to make a fork that had the correct border with elevation and more "round" edges, but I can't find the lines where you define the border of the slidable. I therefore do not know what to change. I know it is a small issue, but any help is still greatly appreciated. Thanks in advance.

AnimationBuilder RangeError

While sliding a Slidable, it sometimes throws the following exception:

I/flutter (13152): ══║ EXCEPTION CAUGHT BY WIDGETS LIBRARY β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
I/flutter (13152): The following RangeError was thrown building AnimatedBuilder(animation: AnimationController#4bf67(β–Ά
I/flutter (13152): 0.191; paused), dirty, state: _AnimatedState#6161d):
I/flutter (13152): RangeError (index): Invalid value: Only valid value is 0: 1
I/flutter (13152):
I/flutter (13152): When the exception was thrown, this was the stack:
I/flutter (13152): #0 List.[] (dart:core/runtime/libgrowable_array.dart:141:60)
I/flutter (13152): #1 SlidableDrawerDelegate.buildStackActions... (package:flutter_slidable/src/widgets/slidable.dart:571:63)
I/flutter (13152): #2 new List.generate (dart:core/list.dart:162:28)
I/flutter (13152): #3 SlidableDrawerDelegate.buildStackActions.. (package:flutter_slidable/src/widgets/slidable.dart:565:32)
I/flutter (13152): #4 AnimatedBuilder.build (package:flutter/src/widgets/transitions.dart:633:12)
I/flutter (13152): #5 _AnimatedState.build (package:flutter/src/widgets/transitions.dart:96:48)
I/flutter (13152): #6 StatefulElement.build (package:flutter/src/widgets/framework.dart:3730:27)
I/flutter (13152): #7 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3642:15)
I/flutter (13152): #8 Element.rebuild (package:flutter/src/widgets/framework.dart:3495:5)
I/flutter (13152): #9 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2242:33)
I/flutter (13152): #10 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:626:20)
I/flutter (13152): #11 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5)
I/flutter (13152): #12 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter (13152): #13 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter (13152): #14 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
I/flutter (13152): #15 _invoke (dart:ui/hooks.dart:120:13)
I/flutter (13152): #16 _drawFrame (dart:ui/hooks.dart:109:3)

Slidable prevent all other swipe action

If you use this plugin into a tabView, you'll not be able to swipe to change tab, even if you use only one side of Slidable. It should not stop propagation of swipe event if no action is define for the given orientation

Flickering when child contains FutureBuilder

Hi,

First of all, thanks for creating this widget!

I've run into a small issue when using a Slidable widget that has a child containing a FutureBuilder widget, and I hope this an appropriate place to ask. Here is the code (slightly shortened) in question:

return Slidable(
      delegate: SlidableScrollDelegate(),
      actionExtentRatio: 0.25,
      secondaryActions: <Widget>[
        IconSlideAction(
          caption: 'Delete',
          color: Colors.red,
          icon: Icons.delete,
          onTap: () => removeLocation(location),
        ),
      ],
      child: ListTile(
        onTap: () {
          Navigator.pushNamed(context, Routes.closeUp);
        },
        leading: FutureBuilder<WeatherData>(
            future: location.weatherData,
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                return SizedBox(
                  width: 64.0,
                  height: 64.0,
                  child: ClipRRect(
                    borderRadius: BorderRadius.circular(64.0),
                    child: Image(
                      image: NetworkImage(snapshot.data.iconUrl),
                    ),
                  ),
                );
              }
              return CircularProgressIndicator();
            }),
      ),
    );

Now, this works fine however when the screen is redrawn (after a tap anywhere on the screen, for example), there is a slight flicker caused by (I think) the FutureBuilder going back to the ConnectionState.waiting status.

The FutureBuilder docs state the following which I think could be related:

A side-effect of this is that providing a new but already-completed future to a FutureBuilder will result in a single frame in the ConnectionState.waiting state. This is because there is no way to synchronously determine that a Future has already completed.

The futures I'm passing into the FutureBuilder are not being changed on my end (When I move the ListTile widget outside of the Slidable widget, the flicker goes away), but I was wondering if perhaps there might be something going on under the hood in Slidable that is causing this state to be affected.

If you have any ideas/suggestions as to what might be going on, or ways to avoid the flickering, it would be much appreciated.

Thanks.

Fire action automatically without tap

Hi,
I want to implement a behavior where the action\event is fired automatically after the action box is completely visible (or to a certain extent), without the user having to tap the box. After that the action box is automatically closed back. Can I achieve this using this plugin?
Thank you!

Activate only 1 action at a time?

Hi, Thanks for great plugin.

In my Slidable -> secondaryActions: [ -> I have a 3 IconSlideAction. If user slides the ListTile it shows this 3 IconSlideAction widget. If I tap same time to 2 or 3 icons its opens all of them. I have to close 1 by 1. again if accidentally press between 2 icon it opens both. How can activate 1 action at a time? Thanks

Lefthand child scrambled when touched outside of item

Appeared in Version 0.3.0

Slidable(
        key: Key(item.id.toString()),
...
        actionExtentRatio: 0.15,
        delegate: SlidableStrechDelegate(),
        actions: <Widget>[
          Center(child: Text('ID ${item.id}', style: TextStyle(color: Colors.grey)))
        ],
...
      )

Slide out look:
image

When I touch outside (e.g. list scroll):
image

initState is being called on the Silidable child when it closes or opens

Is this a bug? This behavior is not expected to happen. One example could be a network request inside the slidable's child, where you don't want to call this operation every time the user interacts with the slidable.

Here is a sample code.

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_slidable/flutter_slidable.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Sample",
      home: Scaffold(
        appBar: AppBar(
          title: Text("The child reloads when sliding"),
        ),
        body: Column(
          children: <Widget>[
            Slidable(
              child: StfulChild(),
              delegate: SlidableBehindDelegate(),
              actions: <Widget>[
                Icon(Icons.share),
              ],
              secondaryActions: <Widget>[
                Icon(Icons.add),
              ],
            )
          ],
        ),
      ),
    );
  }
}

class StfulChild extends StatefulWidget {
  _StfulChildState createState() => _StfulChildState();
}

class _StfulChildState extends State<StfulChild> {
  bool loading = true;

  @override
  void initState() {
    super.initState();
    Future.delayed(Duration(seconds: 1)).then((_) {
      if (mounted)
        setState(() {
          loading = false;
        });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.green,
      height: 100,
      child: Center(
        child: loading ? CircularProgressIndicator() : Text("Loaded"),
      ),
    );
  }
}

BUG: Slidable doesn't work in list view

screen shot 2018-09-15 at 2 20 59 pm

Here is a trivial example:
https://gist.github.com/abacaj/dabe0948d0b070306881e69a8a11d0c5

Nothing special, just generating the items and showing a slidable widget... when scrolling down and trying to push a view to Navigator the widget breaks and gives this exception from flutter listview:

I/flutter ( 9039): Another exception was thrown: 'package:flutter/src/rendering/object.dart': Failed assertion: line 2798 pos 14: '_debugUltimatePreviousSiblingOf(after, equals: _firstChild)': is not true.

Here is a video of the issue happening in Android:
https://streamable.com/288te

Steps to reproduce:

  1. copy above code into main.dart
  2. run it on android
  3. scroll down to bottom of list view
  4. click the black button at the top right
  5. press back on android to go back
  6. see exception

Not sure what I've done wrong here, the code is very trivial.

NoSuchMethodError after update to 0.5.0

I'm getting following error after update to 0.5.0 version

I/flutter (21118): ══║ EXCEPTION CAUGHT BY WIDGETS LIBRARY β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
I/flutter (21118): The following NoSuchMethodError was thrown building Slidable(dirty, dependencies:
I/flutter (21118): [_ScrollableScope], state: SlidableState#1c8cb(tickers: tracking 1 ticker)):
I/flutter (21118): The method '[]' was called on null.
I/flutter (21118): Receiver: null
I/flutter (21118): Tried calling: [](Instance of 'SlideActionType')
I/flutter (21118):
I/flutter (21118): When the exception was thrown, this was the stack:
I/flutter (21118): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:50:5)
I/flutter (21118): #1 SlidableState._dismissThreshold
package:flutter_slidable/…/widgets/slidable.dart:562
I/flutter (21118): #2 SlidableState.build
package:flutter_slidable/…/widgets/slidable.dart:897
I/flutter (21118): #3 StatefulElement.build
package:flutter/…/widgets/framework.dart:3825
I/flutter (21118): #4 ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:3739

widget.dismissal is null in _dismissThreshold

Adding some dummy check for null value in dismissal solves error (no idea why ?? operator is not working when ?. returns null...)

SlidableController

Since i have added controller to my slidable, i encounter other error that i don't know where they come, i see error when i pop page [ statefulWidget ], but when i comment line of controller, all pass good.

captureslidable
captureslidable2

Enable / Disable

Like for form fields I need to enable/disable the slide behaviour.

onTap doesn't work

Adding a callback function for IconSlideAction to onTap doesn't work no matter what I do.

ItemBuilder for animated SlideAction

So the idea would be using an itemBuilder for SlideAction that mimics the AnimatedList so we can access the Animation when creating the child. This way I can also animate Opacity in my case.

Two showAllActionsThreshold: (one for opening and one for closing)

From my point of view, opening the slideable is at first not pretty ease (if you compare it to WhatsApp / Telegram), but it gets wonderful smooth if I set howAllActionsThreshold: 0.20. Is there a same kind of threshold for swiping the items back in? Guess we need two thresholds then?

Close slidable after tab on SlideAction

In iOS, clicking on a button will also close the slidable. This makes sense, since for example deleting a record will result in the next row being displayed in the slidable otherwise.

execute callback when sliding or when finishes to slide

Hello @letsar

My flutter app have a list of items (each one is a Slidable Object). I would like to execute a callback event when user start sliding the item.

My case: when I slide right to left (to show some secondary actions), I would like to hide a button in the screen. When user slide left to right (to hide secondary actions), I would like to show this button again.

I looked the source code and FAQ and didn't find anything. Am I missing something?

Programmatically open slider

Would like to present the side buttons to the user for a little while and then close it, all without any touch interactions.

Refactoring ideas

  • For performances reasons and to be more in the Flutter spirit, transform all delegates to widgets.
  • Let the animations be the entry point and not the drag action, so that we could animate programmatically the slidable widget.
  • Improve the code of the Delegates by removing the LayoutBuilder and by using FractionallySizedBox.

Add a SlidableController

A SlidableController could open/close any Slidable.
This can be useful if we want to close Slidables while scrolling, or if we want to close all the other Slidables while opening one.

dismiss on button tap

Hi is it possible to dismiss row on button tap?
I would like to display confirmation dialog first and if user hit ok, dismiss the row.
Thank you!

Animate remove row after tapping delete, similar to Dismissible

Thanks for doing such an great job with this widget.
One of the most common iOS actions is to slide a row across and then tap on delete.
Then (after possibly prompting the user) programmatically triggering an animation that removes the row (similar to the way the Dismissible widget animates).
Any thoughts about how one might go about implementing this functionality?

Icons are rendered strangely

Hi, thanks for building this awesome Widget, it's really helpful.

I'm running into a small issue, when I open the options, the icon is streched in a weird way.
screen shot 2018-07-28 at 8 19 57 pm

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.