Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Open ActionPane at the Slidable build time #276

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
139 changes: 91 additions & 48 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,58 +5,58 @@ packages:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev"
source: hosted
version: "2.8.1"
version: "2.11.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.1.1"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.1"
version: "1.3.0"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.dev"
source: hosted
version: "1.1.0"
version: "1.1.1"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
version: "1.15.0"
version: "1.18.0"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.dartlang.org"
sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
url: "https://pub.dev"
source: hosted
version: "1.0.0"
version: "1.0.6"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
version: "1.3.1"
flutter:
dependency: "direct main"
description: flutter
Expand All @@ -74,27 +74,62 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
leak_tracker:
dependency: transitive
description:
name: leak_tracker
sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa"
url: "https://pub.dev"
source: hosted
version: "10.0.0"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0
url: "https://pub.dev"
source: hosted
version: "2.0.1"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47
url: "https://pub.dev"
source: hosted
version: "2.0.1"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev"
source: hosted
version: "0.12.16+1"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
url: "https://pub.dev"
source: hosted
version: "0.12.10"
version: "0.8.0"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
url: "https://pub.dev"
source: hosted
version: "1.7.0"
version: "1.11.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev"
source: hosted
version: "1.8.0"
version: "1.9.0"
sky_engine:
dependency: transitive
description: flutter
Expand All @@ -104,58 +139,66 @@ packages:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted
version: "1.8.1"
version: "1.10.0"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev"
source: hosted
version: "1.10.0"
version: "1.11.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.1.2"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
version: "1.2.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.dev"
source: hosted
version: "1.2.0"
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
url: "https://pub.dev"
source: hosted
version: "0.4.2"
typed_data:
version: "0.6.1"
vector_math:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
vector_math:
version: "2.1.4"
vm_service:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
name: vm_service
sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "13.0.0"
sdks:
dart: ">=2.12.0 <3.0.0"
dart: ">=3.2.0-0 <4.0.0"
flutter: ">=1.22.0"
3 changes: 1 addition & 2 deletions lib/src/actions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,7 @@ class CustomSlidableAction extends StatelessWidget {
onPressed: () => _handleTap(context),
style: OutlinedButton.styleFrom(
backgroundColor: backgroundColor,
primary: effectiveForegroundColor,
onSurface: effectiveForegroundColor,
foregroundColor: effectiveForegroundColor,
shape: const RoundedRectangleBorder(),
side: BorderSide.none,
),
Expand Down
4 changes: 3 additions & 1 deletion lib/src/gesture_detector.dart
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,9 @@ class _SlidableGestureDetectorState extends State<SlidableGestureDetector> {
void handleDragStart(DragStartDetails details) {
startPosition = details.localPosition;
lastPosition = startPosition;
dragExtent = dragExtent.sign *
dragExtent = (widget.controller.ratio != 0 && dragExtent != 0
? dragExtent.sign
: widget.controller.ratio.sign) *
overallDragAxisExtent *
widget.controller.ratio *
widget.controller.direction.value;
Expand Down
2 changes: 1 addition & 1 deletion lib/src/scrolling_behavior.dart
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class _SlidableScrollingBehaviorState extends State<SlidableScrollingBehavior> {

void addScrollingNotifierListener() {
if (widget.closeOnScroll) {
scrollPosition = Scrollable.of(context)?.position;
scrollPosition = Scrollable.maybeOf(context)?.position;
if (scrollPosition != null) {
scrollPosition!.isScrollingNotifier.addListener(handleScrollingChanged);
}
Expand Down
18 changes: 18 additions & 0 deletions lib/src/slidable.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class Slidable extends StatefulWidget {
this.direction = Axis.horizontal,
this.dragStartBehavior = DragStartBehavior.down,
this.useTextDirection = true,
this.preOpenedActionPane = ActionPaneType.none,
required this.child,
}) : super(key: key);

Expand Down Expand Up @@ -101,6 +102,11 @@ class Slidable extends StatefulWidget {
/// {@macro flutter.widgets.ProxyWidget.child}
final Widget child;

/// Determines the ActionPane that will be opened at the widget's build without animation.
///
/// By default, the action pane is [ActionPaneType.none]
final ActionPaneType preOpenedActionPane;

@override
_SlidableState createState() => _SlidableState();

Expand All @@ -127,6 +133,7 @@ class _SlidableState extends State<Slidable>
late final SlidableController controller;
late Animation<Offset> moveAnimation;
late bool keepPanesOrder;
ActionPaneType preOpenedActionPane = ActionPaneType.none;

@override
bool get wantKeepAlive => !widget.closeOnScroll;
Expand Down Expand Up @@ -168,6 +175,16 @@ class _SlidableState extends State<Slidable>
controller
..enableEndActionPane = endActionPane != null
..endActionPaneExtentRatio = endActionPane?.extentRatio ?? 0;

if (widget.preOpenedActionPane != preOpenedActionPane) {
preOpenedActionPane = widget.preOpenedActionPane;
if (preOpenedActionPane == ActionPaneType.end && endActionPane != null) {
controller.ratio = -controller.endActionPaneExtentRatio;
} else if (preOpenedActionPane == ActionPaneType.start &&
startActionPane != null) {
controller.ratio = controller.startActionPaneExtentRatio;
}
}
}

void updateIsLeftToRight() {
Expand Down Expand Up @@ -213,6 +230,7 @@ class _SlidableState extends State<Slidable>
}

ActionPane? get startActionPane => widget.startActionPane;

ActionPane? get endActionPane => widget.endActionPane;

Alignment get actionPaneAlignment {
Expand Down
Loading