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),
);
}
),
],
)
编辑:我看到了一些使用这种形式的键的示例,但是索引不能识别图像中的索引
答案 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),
);
}
),
],
)