颤振-为什么ListView没有';你不更新索引吗?

颤振-为什么ListView没有';你不更新索引吗?,listview,indexing,flutter,Listview,Indexing,Flutter,我编写了一个包含一些ListView(子视图)的ListView(父视图)。架构如下所示: 我添加了Dismissible,用于删除子listView项。但是发生了一些错误。 子ListView项目的索引在我删除一些项目后未更新。因此,错误出现如下: 父listView的代码如下所示: @override Widget build(BuildContext context) { // TODO: implement build return Consumer<Da

我编写了一个包含一些ListView(子视图)的ListView(父视图)。架构如下所示:

我添加了
Dismissible
,用于删除子listView项。但是发生了一些错误。 子ListView项目的索引在我删除一些项目后未更新。因此,错误出现如下:

父listView的代码如下所示:

@override
  Widget build(BuildContext context) {
    // TODO: implement build

    return Consumer<Data>(
        builder: (context, Data dataRecord, _){
          return Expanded(
            child: ReorderableListView(
              children: widget.dataList.map((item) =>
                  ChildListView(dataItem: item,),
              ).toList(),
              onReorder: (int oldIndex, int newIndex) {
                print("oldIndex: $oldIndex, newIndex: $newIndex");
                setState(() {

                  var tmpItem = widget.dataList.remove(oldIndex);
                  widget.dataList.insert(newIndex, tmpItem);
                });
              },
            ),
          );
        }
    );
@override
  Widget build(BuildContext context) {

    return ListView.builder(
        controller: _scrollController,
        shrinkWrap: true,
        physics: NeverScrollableScrollPhysics(),
        padding: const EdgeInsets.all(10.0),
        itemCount: widget.items.length,
        itemBuilder: (BuildContext context, int index) {

          var _actionSet = widget.items[index];
          return Dismissible(
            key: ValueKey(widget.items[index].id.v1()),
            direction: DismissDirection.endToStart,
            onDismissed: (direction) {
              print("itemcount: ${widget.items.length}");
              print("index is: $index");
              _deleteItem(index);
            },
            confirmDismiss: _confirmDismiss,

            background: Container(
              color: Colors.red,
              child: ListTile(
                trailing: Icon(Icons.delete, color: Colors.white),
              ),
            ),
            child: ExeRoutineDetailExeListRow(actionSet: _actionSet, index: index,),

          );
        });
  }

void _deleteItem(int index) {
    print("===>>>removeAt:$index");
    widget.items.remove(index);
  }

//It's items remove function
// the Class Items with the ChangeNotifier
item remove(int index) {
    var tmpItem = items.removeAt(index);
    notifyListeners();
    return tmpItem;
  }


希望您的帮助,非常感谢。

问题没有问题。关键是我没有在“可驳回的中设置状态()

返回可驳回(
key:ValueKey(widget.items[index].id.v1()),
方向:DismissDirection.endToStart,
onDismissed:(方向){
打印(“itemcount:${widget.items.length}”);
打印(“索引为:$index”);
setState((){u deleteItem(index);})//
return Dismissible(
                    key: ValueKey(widget.items[index].id.v1()),
                    direction: DismissDirection.endToStart,
                    onDismissed: (direction) {
                      print("itemcount: ${widget.items.length}");
                      print("index is: $index");
                      setState((){_deleteItem(index);}); // <-- Add this line
                    },
                    confirmDismiss: _confirmDismiss,
                 );