From 4929ef12a2967e15965ced3080a17aceed9d8ff8 Mon Sep 17 00:00:00 2001 From: HieuTranTrung Date: Fri, 23 Jun 2023 01:13:19 +0700 Subject: [PATCH 1/7] Upgrade flutter 3.10 and dart 3 --- example/lib/basic_example.dart | 6 +- example/lib/drag_handle_example.dart | 6 +- example/lib/drag_into_list_example.dart | 6 +- example/lib/expansion_tile_example.dart | 7 +- example/lib/fixed_example.dart | 6 +- example/lib/horizontal_example.dart | 10 +- example/lib/list_tile_example.dart | 8 +- example/lib/navigation_drawer.dart | 1 - example/lib/sliver_example.dart | 8 +- example/pubspec.lock | 115 +++++++++++++--------- lib/drag_and_drop_builder_parameters.dart | 3 - lib/drag_and_drop_item_target.dart | 2 - lib/drag_and_drop_item_wrapper.dart | 6 -- lib/drag_and_drop_list_expansion.dart | 1 - lib/drag_and_drop_list_target.dart | 1 - lib/drag_and_drop_list_wrapper.dart | 3 - lib/measure_size.dart | 2 +- lib/programmatic_expansion_tile.dart | 13 ++- pubspec.yaml | 4 +- 19 files changed, 96 insertions(+), 112 deletions(-) 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..4e2a2f4 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,49 +5,48 @@ 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: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.17.1" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + sha256: caac504f942f41dfadcf45229ce8c47065b93919a12739f20d6173a883c5ec73 + url: "https://pub.dev" source: hosted version: "1.0.2" drag_and_drop_lists: @@ -61,9 +60,10 @@ packages: 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,46 @@ packages: description: flutter source: sdk version: "0.0.0" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" + url: "https://pub.dev" source: hosted - version: "0.12.10" + version: "0.12.15" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" + source: hosted + version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + url: "https://pub.dev" source: hosted - version: "1.7.0" + version: "1.9.1" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.8.3" sky_engine: dependency: transitive description: flutter @@ -104,57 +123,57 @@ packages: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.8.1" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" 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: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb + url: "https://pub.dev" source: hosted - version: "0.4.2" - typed_data: - dependency: transitive - description: - name: typed_data - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.0" + version: "0.5.1" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.4" sdks: - dart: ">=2.12.0 <3.0.0" + dart: ">=3.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/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..dfc863d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,10 +1,10 @@ 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: From 5b68a42ec17c4376369718a15a88af4e784b8738 Mon Sep 17 00:00:00 2001 From: HieuTranTrung Date: Fri, 23 Jun 2023 01:19:25 +0700 Subject: [PATCH 2/7] Upgrade run example flutter 3.10 --- example/ios/Flutter/AppFrameworkInfo.plist | 2 +- example/ios/Runner.xcodeproj/project.pbxproj | 13 ++++++++----- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- example/ios/Runner/Info.plist | 4 ++++ example/pubspec.lock | 2 +- 5 files changed, 15 insertions(+), 8 deletions(-) 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/pubspec.lock b/example/pubspec.lock index 4e2a2f4..321df17 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -55,7 +55,7 @@ packages: path: ".." relative: true source: path - version: "0.3.2" + version: "0.3.3" fake_async: dependency: transitive description: From bfed58f001314979896dd849bcf66c76a8dcc10a Mon Sep 17 00:00:00 2001 From: trunghieuvn Date: Mon, 18 Mar 2024 01:04:19 +0700 Subject: [PATCH 3/7] Add support list scroll with snap list --- example/pubspec.lock | 82 +++++++++++++++------- lib/drag_and_drop_lists.dart | 129 +++++++++++++++++++++-------------- pubspec.yaml | 1 + 3 files changed, 134 insertions(+), 78 deletions(-) diff --git a/example/pubspec.lock b/example/pubspec.lock index 321df17..0a14dad 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -37,18 +37,18 @@ packages: dependency: transitive description: name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.1" + version: "1.18.0" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - sha256: caac504f942f41dfadcf45229ce8c47065b93919a12739f20d6173a883c5ec73 + sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.6" drag_and_drop_lists: dependency: "direct main" description: @@ -74,46 +74,70 @@ packages: description: flutter source: sdk version: "0.0.0" - js: + leak_tracker: dependency: transitive description: - name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" url: "https://pub.dev" source: hosted - version: "0.6.7" + 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 - sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.15" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.11.0" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" + scroll_snap_list: + dependency: transitive + description: + name: scroll_snap_list + sha256: "8009ad9030f680b93f3107b29b1ea31284d867aa4972868d2970c6d61fe9e59f" + url: "https://pub.dev" + source: hosted + version: "0.9.1" sky_engine: dependency: transitive description: flutter @@ -123,26 +147,26 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -163,10 +187,10 @@ packages: dependency: transitive description: name: test_api - sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.6.1" vector_math: dependency: transitive description: @@ -175,5 +199,13 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" sdks: - dart: ">=3.0.0 <4.0.0" + dart: ">=3.2.0-0 <4.0.0" diff --git a/lib/drag_and_drop_lists.dart b/lib/drag_and_drop_lists.dart index 73d861c..3409694 100644 --- a/lib/drag_and_drop_lists.dart +++ b/lib/drag_and_drop_lists.dart @@ -23,7 +23,7 @@ import 'package:drag_and_drop_lists/drag_and_drop_list_wrapper.dart'; 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 +35,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 +281,8 @@ class DragAndDropLists extends StatefulWidget { /// disable when setting customDragTargets final bool constrainDraggingAxis; + final Function(int index)? onItemFocusChanged; + DragAndDropLists({ required this.children, required this.onItemReorder, @@ -330,11 +333,10 @@ class DragAndDropLists extends StatefulWidget { this.itemDragHandle, this.constrainDraggingAxis = true, Key? key, + this.onItemFocusChanged, }) : 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,7 +363,7 @@ class DragAndDropListsState extends State { double? _pointerYPosition; double? _pointerXPosition; bool _scrolling = false; - PageStorageBucket _pageStorageBucket = PageStorageBucket(); + final PageStorageBucket _pageStorageBucket = PageStorageBucket(); @override void initState() { @@ -375,7 +377,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 +416,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 +436,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 +449,7 @@ class DragAndDropListsState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - widget.contentsWhenEmpty ?? Text('Empty'), + widget.contentsWhenEmpty ?? const Text('Empty'), dragAndDropListTarget, ], ), @@ -457,8 +459,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 +486,38 @@ class DragAndDropListsState extends State { } } - ListView _buildListView(DragAndDropBuilderParameters parameters, + Widget _buildListView(DragAndDropBuilderParameters parameters, DragAndDropListTarget dragAndDropListTarget) { - return ListView( + if (widget.axis == Axis.vertical) { + return ListView( + scrollDirection: widget.axis, + controller: _scrollController, + physics: const AlwaysScrollableScrollPhysics(), + children: _buildOuterList(dragAndDropListTarget, parameters), + ); + } + + final items = _buildOuterList(dragAndDropListTarget, parameters); + + return ScrollSnapList( scrollDirection: widget.axis, - controller: _scrollController, - physics: const AlwaysScrollableScrollPhysics(), - children: _buildOuterList(dragAndDropListTarget, parameters), + listController: _scrollController, + itemBuilder: (_, i) => Container( + child: 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, @@ -577,8 +597,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 +667,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 +714,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 +748,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 +777,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 +810,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/pubspec.yaml b/pubspec.yaml index dfc863d..aa925f0 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -9,6 +9,7 @@ environment: dependencies: flutter: sdk: flutter + scroll_snap_list: ^0.9.1 dev_dependencies: flutter_test: From c3df44322b847271ce86ef02c9e673388ef90c61 Mon Sep 17 00:00:00 2001 From: trunghieuvn Date: Mon, 18 Mar 2024 01:04:32 +0700 Subject: [PATCH 4/7] Add support param `enableSnap` --- lib/drag_and_drop_lists.dart | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/drag_and_drop_lists.dart b/lib/drag_and_drop_lists.dart index 3409694..0a47ded 100644 --- a/lib/drag_and_drop_lists.dart +++ b/lib/drag_and_drop_lists.dart @@ -281,6 +281,8 @@ class DragAndDropLists extends StatefulWidget { /// disable when setting customDragTargets final bool constrainDraggingAxis; + final bool enableSnap; + final Function(int index)? onItemFocusChanged; DragAndDropLists({ @@ -333,6 +335,7 @@ class DragAndDropLists extends StatefulWidget { this.itemDragHandle, this.constrainDraggingAxis = true, Key? key, + this.enableSnap = false, this.onItemFocusChanged, }) : super(key: key) { if (listGhost == null && @@ -488,7 +491,7 @@ class DragAndDropListsState extends State { Widget _buildListView(DragAndDropBuilderParameters parameters, DragAndDropListTarget dragAndDropListTarget) { - if (widget.axis == Axis.vertical) { + if (widget.axis == Axis.vertical || widget.enableSnap == false) { return ListView( scrollDirection: widget.axis, controller: _scrollController, @@ -502,9 +505,7 @@ class DragAndDropListsState extends State { return ScrollSnapList( scrollDirection: widget.axis, listController: _scrollController, - itemBuilder: (_, i) => Container( - child: items[i], - ), + itemBuilder: (_, i) => items[i], itemCount: items.length, itemSize: widget.listWidth, listViewPadding: const EdgeInsets.only(right: 30), From 5c854bc2a7319fe82c8906d16fb1e2aeff8e8463 Mon Sep 17 00:00:00 2001 From: trunghieuvn Date: Tue, 26 Mar 2024 16:55:21 +0700 Subject: [PATCH 5/7] Add support pageview --- lib/drag_and_drop_lists.dart | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/drag_and_drop_lists.dart b/lib/drag_and_drop_lists.dart index 0a47ded..2dce1a1 100644 --- a/lib/drag_and_drop_lists.dart +++ b/lib/drag_and_drop_lists.dart @@ -281,9 +281,10 @@ class DragAndDropLists extends StatefulWidget { /// disable when setting customDragTargets final bool constrainDraggingAxis; - final bool enableSnap; + final bool? enableSnap; final Function(int index)? onItemFocusChanged; + final PageController? pageController; DragAndDropLists({ required this.children, @@ -335,8 +336,9 @@ class DragAndDropLists extends StatefulWidget { this.itemDragHandle, this.constrainDraggingAxis = true, Key? key, - this.enableSnap = false, + this.enableSnap, this.onItemFocusChanged, + this.pageController, }) : super(key: key) { if (listGhost == null && children.whereType().isNotEmpty) @@ -368,6 +370,8 @@ class DragAndDropListsState extends State { bool _scrolling = false; final PageStorageBucket _pageStorageBucket = PageStorageBucket(); + late final PageController pageController = widget.pageController ?? + PageController(initialPage: 0, viewportFraction: 1); @override void initState() { if (widget.scrollController != null) @@ -491,6 +495,8 @@ class DragAndDropListsState extends State { Widget _buildListView(DragAndDropBuilderParameters parameters, DragAndDropListTarget dragAndDropListTarget) { + final items = _buildOuterList(dragAndDropListTarget, parameters); + if (widget.axis == Axis.vertical || widget.enableSnap == false) { return ListView( scrollDirection: widget.axis, @@ -498,10 +504,15 @@ class DragAndDropListsState extends State { physics: const AlwaysScrollableScrollPhysics(), children: _buildOuterList(dragAndDropListTarget, parameters), ); + } else if (widget.enableSnap == true) { + return PageView.builder( + controller: pageController, + scrollDirection: widget.axis, + onPageChanged: widget.onItemFocusChanged, + itemBuilder: (ct, index) => items[index], + ); } - final items = _buildOuterList(dragAndDropListTarget, parameters); - return ScrollSnapList( scrollDirection: widget.axis, listController: _scrollController, From 7a4d86c580909a57a88b88db99547da5625f7f5e Mon Sep 17 00:00:00 2001 From: trunghieuvn Date: Sat, 30 Mar 2024 14:08:40 +0700 Subject: [PATCH 6/7] Support header fixed --- lib/drag_and_drop_lists.dart | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/drag_and_drop_lists.dart b/lib/drag_and_drop_lists.dart index 2dce1a1..495eb68 100644 --- a/lib/drag_and_drop_lists.dart +++ b/lib/drag_and_drop_lists.dart @@ -23,6 +23,7 @@ import 'package:drag_and_drop_lists/drag_and_drop_list_wrapper.dart'; 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'; @@ -285,6 +286,7 @@ class DragAndDropLists extends StatefulWidget { final Function(int index)? onItemFocusChanged; final PageController? pageController; + final Widget Function(int index)? headerBuilder; DragAndDropLists({ required this.children, @@ -339,6 +341,7 @@ class DragAndDropLists extends StatefulWidget { this.enableSnap, this.onItemFocusChanged, this.pageController, + this.headerBuilder, }) : super(key: key) { if (listGhost == null && children.whereType().isNotEmpty) @@ -509,7 +512,13 @@ class DragAndDropListsState extends State { controller: pageController, scrollDirection: widget.axis, onPageChanged: widget.onItemFocusChanged, - itemBuilder: (ct, index) => items[index], + itemBuilder: (ct, index) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (widget.headerBuilder != null) widget.headerBuilder!(index), + Expanded(child: items[index]), + ], + ), ); } From 5f8a94fb49a1b4d9de91b570de5bdcb23274a906 Mon Sep 17 00:00:00 2001 From: trunghieuvn Date: Tue, 9 Apr 2024 18:20:28 +0700 Subject: [PATCH 7/7] Fix empty list --- lib/drag_and_drop_lists.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/drag_and_drop_lists.dart b/lib/drag_and_drop_lists.dart index 495eb68..33c75b4 100644 --- a/lib/drag_and_drop_lists.dart +++ b/lib/drag_and_drop_lists.dart @@ -512,8 +512,10 @@ class DragAndDropListsState extends State { 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]), @@ -547,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) +