diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist
index f2872cf..4f8d4d2 100644
--- a/example/ios/Flutter/AppFrameworkInfo.plist
+++ b/example/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 9.0
+ 11.0
diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj
index 16dca4d..d53f896 100644
--- a/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/example/ios/Runner.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 46;
+ objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
@@ -135,7 +135,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1020;
+ LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@@ -179,10 +179,12 @@
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
+ "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
@@ -193,6 +195,7 @@
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@@ -280,7 +283,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -362,7 +365,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -411,7 +414,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index a28140c..3db53b6 100644
--- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
UIViewControllerBasedStatusBarAppearance
+ CADisableMinimumFrameDurationOnPhone
+
+ UIApplicationSupportsIndirectInputEvents
+
diff --git a/example/lib/basic_example.dart b/example/lib/basic_example.dart
index 6332c19..3720e73 100644
--- a/example/lib/basic_example.dart
+++ b/example/lib/basic_example.dart
@@ -1,8 +1,6 @@
-import 'package:drag_and_drop_lists/drag_and_drop_item.dart';
import 'package:drag_and_drop_lists/drag_and_drop_lists.dart';
-import 'package:example/navigation_drawer.dart';
+import 'package:example/navigation_drawer.dart' as navi;
import 'package:flutter/material.dart';
-import 'package:flutter/widgets.dart';
class BasicExample extends StatefulWidget {
BasicExample({Key? key}) : super(key: key);
@@ -57,7 +55,7 @@ class _BasicExample extends State {
appBar: AppBar(
title: Text('Basic'),
),
- drawer: NavigationDrawer(),
+ drawer: navi.NavigationDrawer(),
body: DragAndDropLists(
children: _contents,
onItemReorder: _onItemReorder,
diff --git a/example/lib/drag_handle_example.dart b/example/lib/drag_handle_example.dart
index 177f615..020ef08 100644
--- a/example/lib/drag_handle_example.dart
+++ b/example/lib/drag_handle_example.dart
@@ -1,8 +1,6 @@
import 'package:drag_and_drop_lists/drag_and_drop_lists.dart';
-import 'package:example/navigation_drawer.dart';
+import 'package:example/navigation_drawer.dart' as navi;
import 'package:flutter/material.dart';
-import 'package:flutter/rendering.dart';
-import 'package:flutter/widgets.dart';
class DragHandleExample extends StatefulWidget {
DragHandleExample({Key? key}) : super(key: key);
@@ -86,7 +84,7 @@ class _DragHandleExample extends State {
appBar: AppBar(
title: Text('Drag Handle'),
),
- drawer: NavigationDrawer(),
+ drawer: navi.NavigationDrawer(),
body: DragAndDropLists(
children: _contents,
onItemReorder: _onItemReorder,
diff --git a/example/lib/drag_into_list_example.dart b/example/lib/drag_into_list_example.dart
index be76871..0702377 100644
--- a/example/lib/drag_into_list_example.dart
+++ b/example/lib/drag_into_list_example.dart
@@ -1,9 +1,7 @@
-import 'package:drag_and_drop_lists/drag_and_drop_item.dart';
import 'package:drag_and_drop_lists/drag_and_drop_list_interface.dart';
import 'package:drag_and_drop_lists/drag_and_drop_lists.dart';
-import 'package:example/navigation_drawer.dart';
+import 'package:example/navigation_drawer.dart' as navi;
import 'package:flutter/material.dart';
-import 'package:flutter/widgets.dart';
class DragIntoListExample extends StatefulWidget {
DragIntoListExample({Key? key}) : super(key: key);
@@ -21,7 +19,7 @@ class _DragIntoListExample extends State {
appBar: AppBar(
title: Text('Drag Into List'),
),
- drawer: NavigationDrawer(),
+ drawer: navi.NavigationDrawer(),
body: Column(
children: [
Flexible(
diff --git a/example/lib/expansion_tile_example.dart b/example/lib/expansion_tile_example.dart
index 971eab3..ee0e36c 100644
--- a/example/lib/expansion_tile_example.dart
+++ b/example/lib/expansion_tile_example.dart
@@ -1,9 +1,6 @@
-import 'package:drag_and_drop_lists/drag_and_drop_list_expansion.dart';
import 'package:drag_and_drop_lists/drag_and_drop_lists.dart';
-import 'package:example/navigation_drawer.dart';
+import 'package:example/navigation_drawer.dart' as navi;
import 'package:flutter/material.dart';
-import 'package:flutter/rendering.dart';
-import 'package:flutter/widgets.dart';
class ExpansionTileExample extends StatefulWidget {
ExpansionTileExample({Key? key}) : super(key: key);
@@ -39,7 +36,7 @@ class _ListTileExample extends State {
appBar: AppBar(
title: Text('Expansion Tiles'),
),
- drawer: NavigationDrawer(),
+ drawer: navi.NavigationDrawer(),
body: DragAndDropLists(
children: List.generate(_lists.length, (index) => _buildList(index)),
onItemReorder: _onItemReorder,
diff --git a/example/lib/fixed_example.dart b/example/lib/fixed_example.dart
index 98b1bba..5b46638 100644
--- a/example/lib/fixed_example.dart
+++ b/example/lib/fixed_example.dart
@@ -1,8 +1,6 @@
-import 'package:drag_and_drop_lists/drag_and_drop_item.dart';
import 'package:drag_and_drop_lists/drag_and_drop_lists.dart';
-import 'package:example/navigation_drawer.dart';
+import 'package:example/navigation_drawer.dart' as navi;
import 'package:flutter/material.dart';
-import 'package:flutter/widgets.dart';
class FixedExample extends StatefulWidget {
FixedExample({Key? key}) : super(key: key);
@@ -61,7 +59,7 @@ class _FixedExample extends State {
appBar: AppBar(
title: Text('Fixed Items'),
),
- drawer: NavigationDrawer(),
+ drawer: navi.NavigationDrawer(),
body: DragAndDropLists(
children: _contents,
onItemReorder: _onItemReorder,
diff --git a/example/lib/horizontal_example.dart b/example/lib/horizontal_example.dart
index 88da73e..2f90944 100644
--- a/example/lib/horizontal_example.dart
+++ b/example/lib/horizontal_example.dart
@@ -1,8 +1,6 @@
-import 'package:drag_and_drop_lists/drag_and_drop_item.dart';
import 'package:drag_and_drop_lists/drag_and_drop_lists.dart';
-import 'package:example/navigation_drawer.dart';
+import 'package:example/navigation_drawer.dart' as navi;
import 'package:flutter/material.dart';
-import 'package:flutter/widgets.dart';
class HorizontalExample extends StatefulWidget {
HorizontalExample({Key? key}) : super(key: key);
@@ -38,7 +36,7 @@ class _HorizontalExample extends State {
appBar: AppBar(
title: Text('Horizontal'),
),
- drawer: NavigationDrawer(),
+ drawer: navi.NavigationDrawer(),
body: DragAndDropLists(
children: List.generate(_lists.length, (index) => _buildList(index)),
onItemReorder: _onItemReorder,
@@ -77,7 +75,7 @@ class _HorizontalExample extends State {
padding: EdgeInsets.all(10),
child: Text(
'Header ${innerList.name}',
- style: Theme.of(context).primaryTextTheme.headline6,
+ style: Theme.of(context).primaryTextTheme.titleLarge,
),
),
),
@@ -95,7 +93,7 @@ class _HorizontalExample extends State {
padding: EdgeInsets.all(10),
child: Text(
'Footer ${innerList.name}',
- style: Theme.of(context).primaryTextTheme.headline6,
+ style: Theme.of(context).primaryTextTheme.titleLarge,
),
),
),
diff --git a/example/lib/list_tile_example.dart b/example/lib/list_tile_example.dart
index 0f1732f..c824377 100644
--- a/example/lib/list_tile_example.dart
+++ b/example/lib/list_tile_example.dart
@@ -1,8 +1,6 @@
import 'package:drag_and_drop_lists/drag_and_drop_lists.dart';
-import 'package:example/navigation_drawer.dart';
+import 'package:example/navigation_drawer.dart' as navi;
import 'package:flutter/material.dart';
-import 'package:flutter/rendering.dart';
-import 'package:flutter/widgets.dart';
class ListTileExample extends StatefulWidget {
ListTileExample({Key? key}) : super(key: key);
@@ -78,7 +76,7 @@ class _ListTileExample extends State {
appBar: AppBar(
title: Text('List Tiles'),
),
- drawer: NavigationDrawer(),
+ drawer: navi.NavigationDrawer(),
body: DragAndDropLists(
children: _contents,
onItemReorder: _onItemReorder,
@@ -108,7 +106,7 @@ class _ListTileExample extends State {
Text(
'Empty List',
style: TextStyle(
- color: Theme.of(context).textTheme.caption!.color,
+ color: Theme.of(context).textTheme.bodySmall!.color,
fontStyle: FontStyle.italic),
),
Expanded(
diff --git a/example/lib/navigation_drawer.dart b/example/lib/navigation_drawer.dart
index 240d074..06379bc 100644
--- a/example/lib/navigation_drawer.dart
+++ b/example/lib/navigation_drawer.dart
@@ -1,5 +1,4 @@
import 'package:flutter/material.dart';
-import 'package:flutter/widgets.dart';
class NavigationDrawer extends StatelessWidget {
@override
diff --git a/example/lib/sliver_example.dart b/example/lib/sliver_example.dart
index c4bebed..8a4c777 100644
--- a/example/lib/sliver_example.dart
+++ b/example/lib/sliver_example.dart
@@ -1,8 +1,6 @@
-import 'package:drag_and_drop_lists/drag_and_drop_item.dart';
import 'package:drag_and_drop_lists/drag_and_drop_lists.dart';
-import 'package:example/navigation_drawer.dart';
+import 'package:example/navigation_drawer.dart' as navi;
import 'package:flutter/material.dart';
-import 'package:flutter/widgets.dart';
class SliverExample extends StatefulWidget {
SliverExample({Key? key}) : super(key: key);
@@ -63,7 +61,7 @@ class _SliverExample extends State {
@override
Widget build(BuildContext context) {
return Scaffold(
- drawer: NavigationDrawer(),
+ drawer: navi.NavigationDrawer(),
body: CustomScrollView(
controller: _scrollController,
slivers: [
@@ -75,7 +73,7 @@ class _SliverExample extends State {
alignment: Alignment.bottomCenter,
child: Text(
'Slivers',
- style: Theme.of(context).primaryTextTheme.headline1,
+ style: Theme.of(context).primaryTextTheme.displayLarge,
),
),
),
diff --git a/example/pubspec.lock b/example/pubspec.lock
index 4048276..0a14dad 100644
--- a/example/pubspec.lock
+++ b/example/pubspec.lock
@@ -5,65 +5,65 @@ 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.2"
+ version: "1.0.6"
drag_and_drop_lists:
dependency: "direct main"
description:
path: ".."
relative: true
source: path
- version: "0.3.2"
+ version: "0.3.3"
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
@@ -74,27 +74,70 @@ 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.10"
+ 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.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.9.0"
+ scroll_snap_list:
+ dependency: transitive
+ description:
+ name: scroll_snap_list
+ sha256: "8009ad9030f680b93f3107b29b1ea31284d867aa4972868d2970c6d61fe9e59f"
+ url: "https://pub.dev"
source: hosted
- version: "1.8.0"
+ version: "0.9.1"
sky_engine:
dependency: transitive
description: flutter
@@ -104,57 +147,65 @@ 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"
diff --git a/lib/drag_and_drop_builder_parameters.dart b/lib/drag_and_drop_builder_parameters.dart
index 75d909b..5fcc749 100644
--- a/lib/drag_and_drop_builder_parameters.dart
+++ b/lib/drag_and_drop_builder_parameters.dart
@@ -1,8 +1,5 @@
-import 'package:drag_and_drop_lists/drag_and_drop_item.dart';
-import 'package:drag_and_drop_lists/drag_and_drop_item_target.dart';
import 'package:drag_and_drop_lists/drag_and_drop_list_interface.dart';
import 'package:drag_and_drop_lists/drag_and_drop_lists.dart';
-import 'package:drag_and_drop_lists/drag_handle.dart';
import 'package:flutter/widgets.dart';
typedef void OnPointerMove(PointerMoveEvent event);
diff --git a/lib/drag_and_drop_item_target.dart b/lib/drag_and_drop_item_target.dart
index 02c768d..bdcbe02 100644
--- a/lib/drag_and_drop_item_target.dart
+++ b/lib/drag_and_drop_item_target.dart
@@ -1,4 +1,3 @@
-import 'package:drag_and_drop_lists/drag_and_drop_builder_parameters.dart';
import 'package:drag_and_drop_lists/drag_and_drop_list_interface.dart';
import 'package:drag_and_drop_lists/drag_and_drop_lists.dart';
import 'package:flutter/material.dart';
@@ -36,7 +35,6 @@ class _DragAndDropItemTarget extends State
AnimatedSize(
duration: Duration(
milliseconds: widget.parameters.itemSizeAnimationDuration),
- vsync: this,
alignment: Alignment.bottomCenter,
child: _hoveredDraggable != null
? Opacity(
diff --git a/lib/drag_and_drop_item_wrapper.dart b/lib/drag_and_drop_item_wrapper.dart
index 8dc8e7f..022ce21 100644
--- a/lib/drag_and_drop_item_wrapper.dart
+++ b/lib/drag_and_drop_item_wrapper.dart
@@ -1,10 +1,6 @@
-import 'package:drag_and_drop_lists/drag_and_drop_builder_parameters.dart';
-import 'package:drag_and_drop_lists/drag_and_drop_item.dart';
import 'package:drag_and_drop_lists/drag_and_drop_lists.dart';
import 'package:drag_and_drop_lists/measure_size.dart';
import 'package:flutter/material.dart';
-import 'package:flutter/rendering.dart';
-import 'package:flutter/widgets.dart';
class DragAndDropItemWrapper extends StatefulWidget {
final DragAndDropItem child;
@@ -181,7 +177,6 @@ class _DragAndDropItemWrapper extends State
draggable = AnimatedSize(
duration: Duration(
milliseconds: widget.parameters!.itemSizeAnimationDuration),
- vsync: this,
alignment: Alignment.bottomCenter,
child: _hoveredDraggable != null ? Container() : widget.child.child,
);
@@ -195,7 +190,6 @@ class _DragAndDropItemWrapper extends State
AnimatedSize(
duration: Duration(
milliseconds: widget.parameters!.itemSizeAnimationDuration),
- vsync: this,
alignment: Alignment.topLeft,
child: _hoveredDraggable != null
? Opacity(
diff --git a/lib/drag_and_drop_list_expansion.dart b/lib/drag_and_drop_list_expansion.dart
index dd33ebc..dd79ba5 100644
--- a/lib/drag_and_drop_list_expansion.dart
+++ b/lib/drag_and_drop_list_expansion.dart
@@ -7,7 +7,6 @@ import 'package:drag_and_drop_lists/drag_and_drop_item_wrapper.dart';
import 'package:drag_and_drop_lists/drag_and_drop_list_interface.dart';
import 'package:drag_and_drop_lists/programmatic_expansion_tile.dart';
import 'package:flutter/material.dart';
-import 'package:flutter/widgets.dart';
typedef void OnExpansionChanged(bool expanded);
diff --git a/lib/drag_and_drop_list_target.dart b/lib/drag_and_drop_list_target.dart
index 295e9ad..a74a23a 100644
--- a/lib/drag_and_drop_list_target.dart
+++ b/lib/drag_and_drop_list_target.dart
@@ -37,7 +37,6 @@ class _DragAndDropListTarget extends State
AnimatedSize(
duration: Duration(
milliseconds: widget.parameters.listSizeAnimationDuration),
- vsync: this,
alignment: widget.parameters.axis == Axis.vertical
? Alignment.bottomCenter
: Alignment.centerLeft,
diff --git a/lib/drag_and_drop_list_wrapper.dart b/lib/drag_and_drop_list_wrapper.dart
index 3316361..f19ab41 100644
--- a/lib/drag_and_drop_list_wrapper.dart
+++ b/lib/drag_and_drop_list_wrapper.dart
@@ -3,8 +3,6 @@ import 'package:drag_and_drop_lists/drag_and_drop_list_interface.dart';
import 'package:drag_and_drop_lists/drag_handle.dart';
import 'package:drag_and_drop_lists/measure_size.dart';
import 'package:flutter/material.dart';
-import 'package:flutter/rendering.dart';
-import 'package:flutter/widgets.dart';
class DragAndDropListWrapper extends StatefulWidget {
final DragAndDropListInterface dragAndDropList;
@@ -124,7 +122,6 @@ class _DragAndDropListWrapper extends State
AnimatedSize(
duration:
Duration(milliseconds: widget.parameters.listSizeAnimationDuration),
- vsync: this,
alignment: widget.parameters.axis == Axis.vertical
? Alignment.bottomCenter
: Alignment.centerLeft,
diff --git a/lib/drag_and_drop_lists.dart b/lib/drag_and_drop_lists.dart
index 73d861c..33c75b4 100644
--- a/lib/drag_and_drop_lists.dart
+++ b/lib/drag_and_drop_lists.dart
@@ -24,6 +24,7 @@ import 'package:drag_and_drop_lists/drag_handle.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
+import 'package:scroll_snap_list/scroll_snap_list.dart';
export 'package:drag_and_drop_lists/drag_and_drop_builder_parameters.dart';
export 'package:drag_and_drop_lists/drag_and_drop_item.dart';
@@ -35,50 +36,51 @@ export 'package:drag_and_drop_lists/drag_and_drop_list_target.dart';
export 'package:drag_and_drop_lists/drag_and_drop_list_wrapper.dart';
export 'package:drag_and_drop_lists/drag_handle.dart';
-typedef void OnItemReorder(
+typedef OnItemReorder = void Function(
int oldItemIndex,
int oldListIndex,
int newItemIndex,
int newListIndex,
);
-typedef void OnItemAdd(
+typedef OnItemAdd = void Function(
DragAndDropItem newItem,
int listIndex,
int newItemIndex,
);
-typedef void OnListAdd(DragAndDropListInterface newList, int newListIndex);
-typedef void OnListReorder(int oldListIndex, int newListIndex);
-typedef void OnListDraggingChanged(
+typedef OnListAdd = void Function(
+ DragAndDropListInterface newList, int newListIndex);
+typedef OnListReorder = void Function(int oldListIndex, int newListIndex);
+typedef OnListDraggingChanged = void Function(
DragAndDropListInterface? list,
bool dragging,
);
-typedef bool ListOnWillAccept(
+typedef ListOnWillAccept = bool Function(
DragAndDropListInterface? incoming,
DragAndDropListInterface? target,
);
-typedef void ListOnAccept(
+typedef ListOnAccept = void Function(
DragAndDropListInterface incoming,
DragAndDropListInterface target,
);
-typedef bool ListTargetOnWillAccept(
+typedef ListTargetOnWillAccept = bool Function(
DragAndDropListInterface? incoming, DragAndDropListTarget target);
-typedef void ListTargetOnAccept(
+typedef ListTargetOnAccept = void Function(
DragAndDropListInterface incoming, DragAndDropListTarget target);
-typedef void OnItemDraggingChanged(
+typedef OnItemDraggingChanged = void Function(
DragAndDropItem item,
bool dragging,
);
-typedef bool ItemOnWillAccept(
+typedef ItemOnWillAccept = bool Function(
DragAndDropItem? incoming,
DragAndDropItem target,
);
-typedef void ItemOnAccept(
+typedef ItemOnAccept = void Function(
DragAndDropItem incoming,
DragAndDropItem target,
);
-typedef bool ItemTargetOnWillAccept(
+typedef ItemTargetOnWillAccept = bool Function(
DragAndDropItem? incoming, DragAndDropItemTarget target);
-typedef void ItemTargetOnAccept(
+typedef ItemTargetOnAccept = void Function(
DragAndDropItem incoming,
DragAndDropListInterface parentList,
DragAndDropItemTarget target,
@@ -280,6 +282,12 @@ class DragAndDropLists extends StatefulWidget {
/// disable when setting customDragTargets
final bool constrainDraggingAxis;
+ final bool? enableSnap;
+
+ final Function(int index)? onItemFocusChanged;
+ final PageController? pageController;
+ final Widget Function(int index)? headerBuilder;
+
DragAndDropLists({
required this.children,
required this.onItemReorder,
@@ -330,11 +338,13 @@ class DragAndDropLists extends StatefulWidget {
this.itemDragHandle,
this.constrainDraggingAxis = true,
Key? key,
+ this.enableSnap,
+ this.onItemFocusChanged,
+ this.pageController,
+ this.headerBuilder,
}) : super(key: key) {
if (listGhost == null &&
- children
- .where((element) => element is DragAndDropListExpansionInterface)
- .isNotEmpty)
+ children.whereType().isNotEmpty)
throw Exception(
'If using DragAndDropListExpansion, you must provide a non-null listGhost');
if (sliverList && scrollController == null) {
@@ -361,8 +371,10 @@ class DragAndDropListsState extends State {
double? _pointerYPosition;
double? _pointerXPosition;
bool _scrolling = false;
- PageStorageBucket _pageStorageBucket = PageStorageBucket();
+ final PageStorageBucket _pageStorageBucket = PageStorageBucket();
+ late final PageController pageController = widget.pageController ??
+ PageController(initialPage: 0, viewportFraction: 1);
@override
void initState() {
if (widget.scrollController != null)
@@ -375,7 +387,7 @@ class DragAndDropListsState extends State {
@override
Widget build(BuildContext context) {
- var parameters = DragAndDropBuilderParameters(
+ final parameters = DragAndDropBuilderParameters(
listGhost: widget.listGhost,
listGhostOpacity: widget.listGhostOpacity,
listDraggingWidth: widget.listDraggingWidth,
@@ -414,11 +426,11 @@ class DragAndDropListsState extends State {
disableScrolling: widget.disableScrolling,
);
- DragAndDropListTarget dragAndDropListTarget = DragAndDropListTarget(
- child: widget.listTarget,
+ final DragAndDropListTarget dragAndDropListTarget = DragAndDropListTarget(
parameters: parameters,
onDropOnLastTarget: _internalOnListDropOnLastTarget,
lastListTargetSize: widget.lastListTargetSize,
+ child: widget.listTarget,
);
if (widget.children.isNotEmpty) {
@@ -434,11 +446,11 @@ class DragAndDropListsState extends State {
}
if (widget.children
- .where((e) => e is DragAndDropListExpansionInterface)
+ .whereType()
.isNotEmpty) {
outerListHolder = PageStorage(
- child: outerListHolder,
bucket: _pageStorageBucket,
+ child: outerListHolder,
);
}
return outerListHolder;
@@ -447,7 +459,7 @@ class DragAndDropListsState extends State {
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
- widget.contentsWhenEmpty ?? Text('Empty'),
+ widget.contentsWhenEmpty ?? const Text('Empty'),
dragAndDropListTarget,
],
),
@@ -457,8 +469,8 @@ class DragAndDropListsState extends State {
SliverList _buildSliverList(DragAndDropListTarget dragAndDropListTarget,
DragAndDropBuilderParameters parameters) {
- bool includeSeparators = widget.listDivider != null;
- int childrenCount = _calculateChildrenCount(includeSeparators);
+ final bool includeSeparators = widget.listDivider != null;
+ final int childrenCount = _calculateChildrenCount(includeSeparators);
return SliverList(
delegate: SliverChildBuilderDelegate(
@@ -484,20 +496,51 @@ class DragAndDropListsState extends State {
}
}
- ListView _buildListView(DragAndDropBuilderParameters parameters,
+ Widget _buildListView(DragAndDropBuilderParameters parameters,
DragAndDropListTarget dragAndDropListTarget) {
- return ListView(
+ final items = _buildOuterList(dragAndDropListTarget, parameters);
+
+ if (widget.axis == Axis.vertical || widget.enableSnap == false) {
+ return ListView(
+ scrollDirection: widget.axis,
+ controller: _scrollController,
+ physics: const AlwaysScrollableScrollPhysics(),
+ children: _buildOuterList(dragAndDropListTarget, parameters),
+ );
+ } else if (widget.enableSnap == true) {
+ return PageView.builder(
+ controller: pageController,
+ scrollDirection: widget.axis,
+ onPageChanged: widget.onItemFocusChanged,
+ itemCount: items.length,
+ itemBuilder: (ct, index) => Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ if (widget.headerBuilder != null) widget.headerBuilder!(index),
+ Expanded(child: items[index]),
+ ],
+ ),
+ );
+ }
+
+ return ScrollSnapList(
scrollDirection: widget.axis,
- controller: _scrollController,
- physics: const AlwaysScrollableScrollPhysics(),
- children: _buildOuterList(dragAndDropListTarget, parameters),
+ listController: _scrollController,
+ itemBuilder: (_, i) => items[i],
+ itemCount: items.length,
+ itemSize: widget.listWidth,
+ listViewPadding: const EdgeInsets.only(right: 30),
+ onItemFocus: (index) {
+ widget.onItemFocusChanged?.call(index);
+ },
);
}
List _buildOuterList(DragAndDropListTarget dragAndDropListTarget,
DragAndDropBuilderParameters parameters) {
- bool includeSeparators = widget.listDivider != null;
- int childrenCount = _calculateChildrenCount(includeSeparators);
+ final bool includeSeparators = widget.listDivider != null;
+ final int childrenCount = _calculateChildrenCount(includeSeparators);
return List.generate(childrenCount, (index) {
return _buildInnerList(index, childrenCount, dragAndDropListTarget,
@@ -506,6 +549,9 @@ class DragAndDropListsState extends State {
}
int _calculateChildrenCount(bool includeSeparators) {
+ if (widget.enableSnap == true) {
+ return widget.children.length;
+ }
if (includeSeparators)
return (widget.children.length * 2) -
(widget.listDividerOnLastChild ? 0 : 1) +
@@ -577,8 +623,10 @@ class DragAndDropListsState extends State {
_internalOnListReorder(
DragAndDropListInterface reordered, DragAndDropListInterface receiver) {
- int reorderedListIndex = widget.children.indexWhere((e) => reordered == e);
- int receiverListIndex = widget.children.indexWhere((e) => receiver == e);
+ final int reorderedListIndex =
+ widget.children.indexWhere((e) => reordered == e);
+ final int receiverListIndex =
+ widget.children.indexWhere((e) => receiver == e);
int newListIndex = receiverListIndex;
@@ -645,7 +693,7 @@ class DragAndDropListsState extends State {
_internalOnListDropOnLastTarget(
DragAndDropListInterface newOrReordered, DragAndDropListTarget receiver) {
// determine if newOrReordered is new or existing
- int reorderedListIndex =
+ final int reorderedListIndex =
widget.children.indexWhere((e) => newOrReordered == e);
if (widget.listOnAccept != null)
@@ -692,19 +740,20 @@ class DragAndDropListsState extends State {
_pointerXPosition != null) {
double? newOffset;
- var rb = context.findRenderObject()!;
+ final rb = context.findRenderObject()!;
late Size size;
if (rb is RenderBox)
size = rb.size;
else if (rb is RenderSliver) size = rb.paintBounds.size;
- var topLeftOffset = localToGlobal(rb, Offset.zero);
- var bottomRightOffset = localToGlobal(rb, size.bottomRight(Offset.zero));
+ final topLeftOffset = localToGlobal(rb, Offset.zero);
+ final bottomRightOffset =
+ localToGlobal(rb, size.bottomRight(Offset.zero));
if (widget.axis == Axis.vertical) {
newOffset = _scrollListVertical(topLeftOffset, bottomRightOffset);
} else {
- var directionality = Directionality.of(context);
+ final directionality = Directionality.of(context);
if (directionality == TextDirection.ltr) {
newOffset =
_scrollListHorizontalLtr(topLeftOffset, bottomRightOffset);
@@ -725,12 +774,12 @@ class DragAndDropListsState extends State {
}
double? _scrollListVertical(Offset topLeftOffset, Offset bottomRightOffset) {
- double top = topLeftOffset.dy;
- double bottom = bottomRightOffset.dy;
+ final double top = topLeftOffset.dy;
+ final double bottom = bottomRightOffset.dy;
double? newOffset;
- var pointerYPosition = _pointerYPosition;
- var scrollController = _scrollController;
+ final pointerYPosition = _pointerYPosition;
+ final scrollController = _scrollController;
if (scrollController != null && pointerYPosition != null) {
if (pointerYPosition < (top + _scrollAreaSize) &&
scrollController.position.pixels >
@@ -754,12 +803,12 @@ class DragAndDropListsState extends State {
double? _scrollListHorizontalLtr(
Offset topLeftOffset, Offset bottomRightOffset) {
- double left = topLeftOffset.dx;
- double right = bottomRightOffset.dx;
+ final double left = topLeftOffset.dx;
+ final double right = bottomRightOffset.dx;
double? newOffset;
- var pointerXPosition = _pointerXPosition;
- var scrollController = _scrollController;
+ final pointerXPosition = _pointerXPosition;
+ final scrollController = _scrollController;
if (scrollController != null && pointerXPosition != null) {
if (pointerXPosition < (left + _scrollAreaSize) &&
scrollController.position.pixels >
@@ -787,12 +836,12 @@ class DragAndDropListsState extends State {
double? _scrollListHorizontalRtl(
Offset topLeftOffset, Offset bottomRightOffset) {
- double left = topLeftOffset.dx;
- double right = bottomRightOffset.dx;
+ final double left = topLeftOffset.dx;
+ final double right = bottomRightOffset.dx;
double? newOffset;
- var pointerXPosition = _pointerXPosition;
- var scrollController = _scrollController;
+ final pointerXPosition = _pointerXPosition;
+ final scrollController = _scrollController;
if (scrollController != null && pointerXPosition != null) {
if (pointerXPosition < (left + _scrollAreaSize) &&
scrollController.position.pixels <
diff --git a/lib/measure_size.dart b/lib/measure_size.dart
index 02dab4c..0e7c862 100644
--- a/lib/measure_size.dart
+++ b/lib/measure_size.dart
@@ -20,7 +20,7 @@ class MeasureSize extends StatefulWidget {
class _MeasureSizeState extends State {
@override
Widget build(BuildContext context) {
- SchedulerBinding.instance!.addPostFrameCallback(postFrameCallback);
+ SchedulerBinding.instance.addPostFrameCallback(postFrameCallback);
return Container(
key: widgetKey,
child: widget.child,
diff --git a/lib/programmatic_expansion_tile.dart b/lib/programmatic_expansion_tile.dart
index 0bf75b6..7d25f65 100644
--- a/lib/programmatic_expansion_tile.dart
+++ b/lib/programmatic_expansion_tile.dart
@@ -4,7 +4,6 @@
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
-import 'package:flutter/widgets.dart';
const Duration _kExpand = Duration(milliseconds: 200);
@@ -133,13 +132,13 @@ class ProgrammaticExpansionTileState extends State
_controller.drive(_backgroundColorTween.chain(_easeOutTween));
_isExpanded = PageStorage.of(context)
- ?.readState(context, identifier: widget.listKey) as bool? ??
+ .readState(context, identifier: widget.listKey) as bool? ??
widget.initiallyExpanded;
if (_isExpanded) _controller.value = 1.0;
// Schedule the notification that widget has changed for after init
// to ensure that the parent widget maintains the correct state
- SchedulerBinding.instance!.addPostFrameCallback((Duration duration) {
+ SchedulerBinding.instance.addPostFrameCallback((Duration duration) {
if (widget.onExpansionChanged != null &&
_isExpanded != widget.initiallyExpanded) {
widget.onExpansionChanged!(_isExpanded);
@@ -180,7 +179,7 @@ class ProgrammaticExpansionTileState extends State
});
}
PageStorage.of(context)
- ?.writeState(context, _isExpanded, identifier: widget.listKey);
+ .writeState(context, _isExpanded, identifier: widget.listKey);
});
if (widget.onExpansionChanged != null) {
widget.onExpansionChanged!(_isExpanded);
@@ -239,11 +238,11 @@ class ProgrammaticExpansionTileState extends State
final ThemeData theme = Theme.of(context);
_borderColorTween.end = theme.dividerColor;
_headerColorTween
- ..begin = theme.textTheme.subtitle1!.color
- ..end = theme.accentColor;
+ ..begin = theme.textTheme.titleMedium!.color
+ ..end = theme.colorScheme.secondary;
_iconColorTween
..begin = theme.unselectedWidgetColor
- ..end = theme.accentColor;
+ ..end = theme.colorScheme.secondary;
_backgroundColorTween.end = widget.backgroundColor;
super.didChangeDependencies();
}
diff --git a/pubspec.yaml b/pubspec.yaml
index cc1bd9d..aa925f0 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,14 +1,15 @@
name: drag_and_drop_lists
description: A flutter package to allow drag-and-drop reordering of two-level lists.
-version: 0.3.2
+version: 0.3.3
homepage: https://github.com/philip-brink/DragAndDropLists
environment:
- sdk: '>=2.12.0 <3.0.0'
+ sdk: ">=3.0.0 <4.0.0"
dependencies:
flutter:
sdk: flutter
+ scroll_snap_list: ^0.9.1
dev_dependencies:
flutter_test: