Making updates to PR (not ready for review)
diff --git a/examples/api/lib/material/reorderable_list/reorderable_list_view.0.dart b/examples/api/lib/material/reorderable_list/reorderable_list_view.0.dart index e5a798e..22b3e70 100644 --- a/examples/api/lib/material/reorderable_list/reorderable_list_view.0.dart +++ b/examples/api/lib/material/reorderable_list/reorderable_list_view.0.dart
@@ -6,16 +6,19 @@ /// Flutter code sample for [ReorderableListView]. -void main() => runApp(const ReorderableApp()); +void main() { + runApp(const ReorderableApp()); +} class ReorderableApp extends StatelessWidget { - const ReorderableApp({super.key}); + const ReorderableApp({ super.key }); @override Widget build(BuildContext context) { return MaterialApp( + theme: ThemeData(useMaterial3: true), home: Scaffold( - appBar: AppBar(title: const Text('ReorderableListView Sample')), + appBar: AppBar(title: const Text('ReorderableListView Example')), body: const ReorderableExample(), ), ); @@ -23,40 +26,41 @@ } class ReorderableExample extends StatefulWidget { - const ReorderableExample({super.key}); + const ReorderableExample({ super.key }); @override - State<ReorderableExample> createState() => _ReorderableListViewExampleState(); + State<ReorderableExample> createState() => _ReorderableExampleState(); } -class _ReorderableListViewExampleState extends State<ReorderableExample> { - final List<int> _items = List<int>.generate(50, (int index) => index); +class _ReorderableExampleState extends State<ReorderableExample> { + final List<Widget> items = List<Widget>.generate(20, (int index) { + final Color color = Color.lerp(Colors.blue, Colors.orange, index / 20)!; + // The Material wiget is needed to ensure that the ListTile's + // tileColor Ink is rendered correctly when the tile occupies the + // reorderable list's "gap". + return Material( + key: ValueKey<int>(index), + child: ListTile( + tileColor: color, + selectedTileColor: color, + title: Text('$index $color'), + ), + ); + }); @override Widget build(BuildContext context) { - final ColorScheme colorScheme = Theme.of(context).colorScheme; - final Color oddItemColor = colorScheme.primary.withOpacity(0.05); - final Color evenItemColor = colorScheme.primary.withOpacity(0.15); - return ReorderableListView( padding: const EdgeInsets.symmetric(horizontal: 40), - children: <Widget>[ - for (int index = 0; index < _items.length; index += 1) - ListTile( - key: Key('$index'), - tileColor: _items[index].isOdd ? oddItemColor : evenItemColor, - title: Text('Item ${_items[index]}'), - ), - ], onReorder: (int oldIndex, int newIndex) { setState(() { if (oldIndex < newIndex) { newIndex -= 1; } - final int item = _items.removeAt(oldIndex); - _items.insert(newIndex, item); + items.insert(newIndex, items.removeAt(oldIndex)); }); }, + children: items, ); } }
diff --git a/packages/flutter/lib/src/widgets/reorderable_list.dart b/packages/flutter/lib/src/widgets/reorderable_list.dart index 1be44d6..5a21110 100644 --- a/packages/flutter/lib/src/widgets/reorderable_list.dart +++ b/packages/flutter/lib/src/widgets/reorderable_list.dart
@@ -171,7 +171,19 @@ /// removing the item at oldIndex from the list will /// reduce the list's length by one. /// Implementations will need to account for this - /// when inserting before newIndex. + /// when inserting before newIndex, for example: + /// + /// ``` + /// onReorder: (int oldIndex, int newIndex) { + /// if (oldIndex < newIndex) { + /// // removing the item at oldIndex will shorten the list by 1. + /// newIndex -= 1; + /// } + /// .... + /// } + /// ``` + /// + /// /// {@endtemplate} final ReorderCallback onReorder;