这个小部件的所有子代都必须有一个键(编辑:)

时间:2020-05-14 16:04:08

标签: flutter dart

enter image description here我正在尝试制作一个需要密钥的ReorderableListView。我放了它,但是它返回错误“此小部件的所有子代都必须具有密钥”。谁能帮我? (我在这里看到过类似的问题,但仍然无法解决)

ReorderableListView(
                  onReorder: _onReorder,
                  scrollDirection: Axis.vertical,
                  padding: const EdgeInsets.symmetric(vertical: 8),
                  children: <Widget>[
                    ListView.builder(
                        itemCount: dias.length,
                        itemBuilder: (context, int index) {
                          return Padding(
                            key: ValueKey(dias[index]),
                            padding: EdgeInsets.all(0),
                            child: _cartaodia(context, index),
                          );
                        }
                    ),
              ],
              )

编辑:我看到了一些使用这种形式的键的示例,但是索引不能识别图像中的索引

2 个答案:

答案 0 :(得分:0)

您的listViewBuilder也需要密钥。

ListView.builder(
  key: Key(dias.length.toString()), // added line
     itemCount: dias.length,

更新:

 ConstrainedBox(//  added widget
          constraints:
              BoxConstraints(maxHeight: MediaQuery.of(context).size.height),
          key: Key("Const"),
          child: ListView.builder(
              // add the value key inside the list view instead
              key: ValueKey("list"),
              itemCount: 50,
              //   shrinkWrap: true,
              itemBuilder: (context, int index) {
                return Padding(
                  padding: EdgeInsets.all(0),
                  child: Text("hello"),
                );
              }),
        ),

答案 1 :(得分:0)

尝试在ValueKey小部件内添加ListView.builder

赞:

ReorderableListView(
        onReorder: _onReorder,
        scrollDirection: Axis.vertical,
        padding: const EdgeInsets.symmetric(vertical: 8),
        children: <Widget>[
          ListView.builder(
            // add the value key inside the list view instead
              key: ValueKey(dias[index]),
              itemCount: dias.length,
              itemBuilder: (context, int index) {
                return Padding(
                  padding: EdgeInsets.all(0),
                  child: _cartaodia(context, index),
                );
              }
          ),
        ],
      )