在 'StatelessWidget' 中,是否可以通过参数设置 'key'?

In a 'StatelessWidget', is it possible to set a 'key' from a parameter?

无状态小部件接收其数据作为参数。在数据中,有一个标识符。我想使用标识符作为小部件 key。可能吗?

我写了类似的东西但是编译器拒绝了:

class ItemData {
  final int id;
  final String label;
  const ItemData({
    required this.id,
    required this.label,
  })
}

class MyItemInAList extends StatelessWidget {
  final ItemData data;
  const MyItemInAList({required this.data})
      : super(key: ObjectKey(data.id)); // ← Error: Invalid constant value

  @override
  Widget build(BuildContext context) {
    // …
  }
}

去掉MyItemInAList前面的const修饰符,这样构造函数就不能是constant了。

ObjectKey 将需要一个对象作为参数,如 ObjectKey(data)。如果你需要 id,使用 ValueKey(data.id) 可能会更好,也许可以添加一些前缀。