Flutter - 带有嵌套在 expansiontile 中的 Listview 的可重新排序列表

Flutter - Reorderable List with a Listview nested inside expansiontile

我正在尝试使用可重新排序的列表视图构建一个示例,该列表视图的子项是扩展磁贴。 展开图块后,它将向用户显示一个列表视图,如下所示 Expanded tile with listview nested inside

当所有扩展图块都折叠时,我可以通过长按并移动它来重新排序图块。但是如果其中一个 tiles 被展开,并且用户尝试重新排序 tiles,flutter 将抛出以下错误并且展开的 tile 将无法折叠直到热重载

ScrollController attached to multiple scroll views.
'package:flutter/src/widgets/scroll_controller.dart':
Failed assertion: line 111 pos 12: '_positions.length == 1'

Not Collapsible listview

我该如何修复它?问题似乎源于将滚动控制器嵌套在另一个滚动控制器中。有没有办法在长按时强制所有扩展块折叠? 提前致谢

List<int> a = [1, 2, 3];

  class _BlankPageState extends State<BlankPage> {
@override
Widget build(BuildContext context) {
return SafeArea(
    child: Scaffold(
      body: Padding(
        padding: EdgeInsets.all(10),
        child: ReorderableListView(
            onReorder: (oldIndex, newIndex) {
              print('now');
              setState(
                () {
                  if (newIndex > oldIndex) {
                    newIndex -= 1;
                  }
                  final int item = a.removeAt(oldIndex);
                  a.insert(newIndex, item);
                },
              );
            },
            children: a.map((index) {
              return ExpansionTile(
                backgroundColor: Colors.grey,
                key: Key('$index'),
                title: Text('Tile' + '${index.toString()}'),
                children: <Widget>[
                  Container(
                    height: 100,
                    child: ListView(children: <Widget>[
                      Text('This is a test' + '$index'),
                      Text('This is a test' + '$index'),
                    ]),
                  )
                ],
              );
            }).toList()),
      ),
    ),
  );

我可以通过引入以下内容的新版本 Flutter 1.17 解决上述问题

Flutter 1.17.0 的更改日志

49148 在 ReorderableListView

中公开了可选的滚动控制器 属性

通过在我的 reorderablelistview 中添加滚动控制器,当列表视图嵌套在 reorderablelistview 小部件中时,我不再遇到上面的多个滚动视图错误

 ReorderableListView(
          scrollController: ScrollController(initialScrollOffset: 50),