debugChildrenHaveDuplicateKeys function
Asserts if the given child list contains any duplicate non-null keys.
To invoke this function, use the following pattern:
class MyWidget extends StatelessWidget {
MyWidget({ super.key, required this.children }) {
assert(!debugChildrenHaveDuplicateKeys(this, children));
}
final List<Widget> children;
// ...
}
If specified, the message
overrides the default message.
For a version of this function that can be used in contexts where the list of items does not have a particular parent, see debugItemsHaveDuplicateKeys.
Does nothing if asserts are disabled. Always returns false.
Implementation
bool debugChildrenHaveDuplicateKeys(Widget parent, Iterable<Widget> children, { String? message }) {
assert(() {
final Key? nonUniqueKey = _firstNonUniqueKey(children);
if (nonUniqueKey != null) {
throw FlutterError(
"${message ?? 'Duplicate keys found.\n'
'If multiple keyed widgets exist as children of another widget, they must have unique keys.'}"
'\n$parent has multiple children with key $nonUniqueKey.',
);
}
return true;
}());
return false;
}