36 lines
983 B
Dart
36 lines
983 B
Dart
bool isValidInternalNavigationPath(String path) {
|
|
if (path.isEmpty || !path.startsWith('/')) {
|
|
return false;
|
|
}
|
|
return !path.startsWith('//') &&
|
|
!path.contains('://') &&
|
|
!path.contains('?') &&
|
|
!path.contains('#') &&
|
|
!path.contains(':');
|
|
}
|
|
|
|
String buildUiSchemaNavigationTarget({
|
|
required String path,
|
|
Map<String, dynamic>? params,
|
|
}) {
|
|
final baseUri = Uri.parse(path);
|
|
final queryParams = <String, String>{};
|
|
|
|
if (params != null) {
|
|
for (final entry in params.entries) {
|
|
final value = entry.value;
|
|
if (value is String && value.isNotEmpty) {
|
|
queryParams[entry.key] = value;
|
|
} else if (value is num || value is bool) {
|
|
queryParams[entry.key] = value.toString();
|
|
}
|
|
}
|
|
}
|
|
|
|
final mergedQueryParams = {...baseUri.queryParameters, ...queryParams};
|
|
final targetUri = baseUri.replace(
|
|
queryParameters: mergedQueryParams.isEmpty ? null : mergedQueryParams,
|
|
);
|
|
return targetUri.toString();
|
|
}
|