В «StatelessWidget» можно ли установить «ключ» из параметра?

#flutter #dart #constants

Вопрос:

Виджет без состояния получает свои данные в качестве параметра. В данных есть идентификатор. Я хотел бы использовать идентификатор в качестве виджета 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) {
    // …
  }
}
 

Ответ №1:

Удалите const модификатор раньше MyItemInAList , в этом случае конструктор не может быть постоянным.

ObjectKey понадобится объект в качестве параметра, например ObjectKey(data) . Если вам это нужно id , возможно , было бы лучше использовать ValueKey(data.id) , возможно, добавив к нему какой-нибудь префикс.