import 'dart:async'; import 'package:cubit_form/cubit_form.dart'; import 'package:selfprivacy/logic/api_maps/cloudflare.dart'; import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart'; import 'package:selfprivacy/logic/models/cloudflare_domain.dart'; class DomainFormCubit extends FormCubit { CloudflareApi apiClient = CloudflareApi(); DomainFormCubit(this.initializingCubit) { var regExp = RegExp(r"^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}"); domainName = FieldCubit( initalValue: '', validations: [ RequiredStringValidation('required'), ValidationModel( (s) => !regExp.hasMatch(s), 'invalid domain format', ), ], ); super.setFields([domainName]); } @override FutureOr onSubmit() async { var domain = CloudFlareDomain( domainName: domainName.state.value, zoneId: zoneId, ); initializingCubit.setDomain(domain); } final AppConfigCubit initializingCubit; FieldCubit domainName; String zoneId; @override FutureOr asyncValidation() async { var key = initializingCubit.state.cloudFlareKey; String zoneId; try { zoneId = await apiClient.getZoneId(key, domainName.state.value); } catch (e) { addError(e); } if (zoneId == null) { domainName.setError('Domain not in the list'); return false; } this.zoneId = zoneId; return true; } @override Future close() async { apiClient.close(); return super.close(); } }