URL Validation
import 'package:luthor/luthor.dart';
void main() { final validator = l.string().url(); print(validator.validateValue('https://dart.dev')); // Success print(validator.validateValue('not a url')); // Error
// With allowed schemes final httpsOnly = l.string().url(allowedSchemes: ['https']); print(httpsOnly.validateValue('https://dart.dev')); // Success print(httpsOnly.validateValue('http://dart.dev')); // Error}import 'package:luthor/luthor.dart';import 'package:freezed_annotation/freezed_annotation.dart';
part 'url_schema.freezed.dart';part 'url_schema.g.dart';
@luthor@freezedabstract class UrlSchema with _$UrlSchema { const factory UrlSchema({ @isUrl /* OR @IsUrl() */ required String url, @IsUrl(allowedSchemes: ['https']) required String secureUrl, }) = _UrlSchema;
factory UrlSchema.fromJson(Map<String, dynamic> json) => _$UrlSchemaFromJson(json);}
void main() { final result1 = $UrlSchemaValidate({ 'url': 'https://dart.dev', 'secureUrl': 'https://dart.dev', });
final result2 = $UrlSchemaValidate({ 'url': 'not a url', 'secureUrl': 'http://dart.dev', });
switch (result1) { case SchemaValidationSuccess(data: final data): print('✅ Success: ${data.url}'); case SchemaValidationError(errors: final errors): print('❌ Error: $errors'); }
switch (result2) { case SchemaValidationSuccess(): print('Unexpected success'); case SchemaValidationError(errors: final errors): print('❌ Error as expected: $errors'); }}The URL validator ensures that a string is a valid URL with a scheme and host. By default, it accepts any valid URL scheme, but you can restrict allowed schemes using the allowedSchemes parameter.
A URL is considered valid if:
- It has a valid scheme (e.g., ‘http’, ‘https’, ‘ftp’, etc.)
- It has a valid host
- It contains no whitespace characters
- The scheme matches one of the
allowedSchemesif specified
You can also provide a custom error message:
l.string().url(message: 'Please enter a valid website URL');