bind method
Converts framework route parameters into their declared typed keys.
Implementation
Map<AuthRouteParameterKey, String> bind(Map<String, Object?> values) {
validate();
final byName = <String, AuthRouteParameterKey>{
for (final parameter in parameters) parameter.name: parameter,
};
final supplied = values.keys.toSet();
final expected = byName.keys.toSet();
final missing = expected.difference(supplied);
final extra = supplied.difference(expected);
if (missing.isNotEmpty || extra.isNotEmpty) {
throw ArgumentError.value(
values,
'values',
'must exactly match route parameters; missing: ${missing.join(', ')}, '
'extra: ${extra.join(', ')}',
);
}
final bound = <AuthRouteParameterKey, String>{};
for (final entry in values.entries) {
final value = entry.value?.toString();
if (value == null || value.isEmpty) {
throw ArgumentError.value(value, entry.key, 'must not be empty');
}
bound[byName[entry.key]!] = value;
}
return Map<AuthRouteParameterKey, String>.unmodifiable(bound);
}