forked from kherel/selfprivacy.org.app
parent
a07a7247f5
commit
20166647ea
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 23 KiB |
@ -1,10 +1,17 @@ |
||||
import 'package:get_it/get_it.dart'; |
||||
import 'package:selfprivacy/logic/get_it/console.dart'; |
||||
import 'package:selfprivacy/logic/get_it/navigation.dart'; |
||||
import 'package:selfprivacy/logic/get_it/timer.dart'; |
||||
|
||||
export 'package:selfprivacy/logic/get_it/console.dart'; |
||||
export 'package:selfprivacy/logic/get_it/navigation.dart'; |
||||
export 'package:selfprivacy/logic/get_it/timer.dart'; |
||||
|
||||
final getIt = GetIt.instance; |
||||
|
||||
void getItSetup() { |
||||
getIt.registerSingleton<NavigationService>(NavigationService()); |
||||
|
||||
getIt.registerSingleton<ConsoleModel>(ConsoleModel()); |
||||
getIt.registerSingleton<TimerModel>(TimerModel()); |
||||
} |
||||
|
@ -0,0 +1,78 @@ |
||||
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 DomainSetupCubit extends Cubit<DomainSetupState> { |
||||
DomainSetupCubit(this.initializingCubit) : super(Initial()) { |
||||
var token = (initializingCubit.state.cloudFlareKey); |
||||
|
||||
assert(token != null, 'no cloudflare token'); |
||||
|
||||
api = CloudflareApi(token); |
||||
} |
||||
|
||||
AppConfigCubit initializingCubit; |
||||
CloudflareApi api; |
||||
|
||||
Future<void> load() async { |
||||
emit(Loading(LoadingTypes.loadingDomain)); |
||||
var list = await api.domainList(); |
||||
if (list.isEmpty) { |
||||
emit(Empty()); |
||||
} else if (list.length == 1) { |
||||
emit(Loaded(list.first)); |
||||
} else { |
||||
emit(MoreThenOne()); |
||||
} |
||||
} |
||||
|
||||
@override |
||||
Future<void> close() { |
||||
api.close(); |
||||
return super.close(); |
||||
} |
||||
|
||||
Future<void> saveDomain() async { |
||||
assert(state is Loaded, 'wrong state'); |
||||
var domainName = (state as Loaded).domain; |
||||
|
||||
emit(Loading(LoadingTypes.saving)); |
||||
|
||||
var zoneId = await api.getZoneId( |
||||
initializingCubit.state.cloudFlareKey, |
||||
domainName, |
||||
); |
||||
|
||||
var domain = CloudFlareDomain( |
||||
domainName: domainName, |
||||
zoneId: zoneId, |
||||
); |
||||
|
||||
initializingCubit.setDomain(domain); |
||||
emit(DomainSetted()); |
||||
} |
||||
} |
||||
|
||||
abstract class DomainSetupState {} |
||||
|
||||
class Initial extends DomainSetupState {} |
||||
|
||||
class Empty extends DomainSetupState {} |
||||
|
||||
class MoreThenOne extends DomainSetupState {} |
||||
|
||||
class Loading extends DomainSetupState { |
||||
Loading(this.type); |
||||
final LoadingTypes type; |
||||
} |
||||
|
||||
enum LoadingTypes { loadingDomain, saving } |
||||
|
||||
class Loaded extends DomainSetupState { |
||||
final String domain; |
||||
|
||||
Loaded(this.domain); |
||||
} |
||||
|
||||
class DomainSetted extends DomainSetupState {} |
@ -1,68 +1,68 @@ |
||||
import 'dart:async'; |
||||
// 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'; |
||||
// 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(); |
||||
// 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<String>( |
||||
(s) => !regExp.hasMatch(s), |
||||
'invalid domain format', |
||||
), |
||||
], |
||||
); |
||||
// 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<String>( |
||||
// (s) => !regExp.hasMatch(s), |
||||
// 'invalid domain format', |
||||
// ), |
||||
// ], |
||||
// ); |
||||
|
||||
super.setFields([domainName]); |
||||
} |
||||
// super.setFields([domainName]); |
||||
// } |
||||
|
||||
@override |
||||
FutureOr<void> onSubmit() async { |
||||
var domain = CloudFlareDomain( |
||||
domainName: domainName.state.value, |
||||
zoneId: zoneId, |
||||
); |
||||
initializingCubit.setDomain(domain); |
||||
} |
||||
// @override |
||||
// FutureOr<void> onSubmit() async { |
||||
// var domain = CloudFlareDomain( |
||||
// domainName: domainName.state.value, |
||||
// zoneId: zoneId, |
||||
// ); |
||||
// initializingCubit.setDomain(domain); |
||||
// } |
||||
|
||||
final AppConfigCubit initializingCubit; |
||||
// final AppConfigCubit initializingCubit; |
||||
|
||||
FieldCubit<String> domainName; |
||||
String zoneId; |
||||
// FieldCubit<String> domainName; |
||||
// String zoneId; |
||||
|
||||
@override |
||||
FutureOr<bool> asyncValidation() async { |
||||
var key = initializingCubit.state.cloudFlareKey; |
||||
// @override |
||||
// FutureOr<bool> asyncValidation() async { |
||||
// var key = initializingCubit.state.cloudFlareKey; |
||||
|
||||
String zoneId; |
||||
// String zoneId; |
||||
|
||||
try { |
||||
zoneId = await apiClient.getZoneId(key, domainName.state.value); |
||||
} catch (e) { |
||||
addError(e); |
||||
} |
||||
// 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; |
||||
} |
||||
// if (zoneId == null) { |
||||
// domainName.setError('Domain not in the list'); |
||||
// return false; |
||||
// } |
||||
// this.zoneId = zoneId; |
||||
// return true; |
||||
// } |
||||
|
||||
@override |
||||
Future<void> close() async { |
||||
apiClient.close(); |
||||
// @override |
||||
// Future<void> close() async { |
||||
// apiClient.close(); |
||||
|
||||
return super.close(); |
||||
} |
||||
} |
||||
// return super.close(); |
||||
// } |
||||
// } |
||||
|
@ -0,0 +1,16 @@ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:flutter/widgets.dart'; |
||||
|
||||
class NavigationService { |
||||
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>(); |
||||
NavigatorState get navigator => navigatorKey.currentState; |
||||
|
||||
void showPopUpDialog(AlertDialog dialog) { |
||||
final context = navigatorKey.currentState.overlay.context; |
||||
|
||||
showDialog( |
||||
context: context, |
||||
builder: (_) => dialog, |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,31 @@ |
||||
import 'package:flutter/material.dart'; |
||||
import 'package:selfprivacy/config/brand_colors.dart'; |
||||
|
||||
class ActionButton extends StatelessWidget { |
||||
const ActionButton({ |
||||
Key key, |
||||
this.text, |
||||
this.onPressed, |
||||
this.isRed = false, |
||||
}) : super(key: key); |
||||
|
||||
final VoidCallback onPressed; |
||||
final String text; |
||||
final bool isRed; |
||||
|
||||
@override |
||||
Widget build(BuildContext context) { |
||||
var navigator = Navigator.of(context); |
||||
|
||||
return TextButton( |
||||
child: Text( |
||||
text, |
||||
style: isRed ? TextStyle(color: BrandColors.red1) : null, |
||||
), |
||||
onPressed: () { |
||||
navigator.pop(); |
||||
if (onPressed != null) onPressed(); |
||||
}, |
||||
); |
||||
} |
||||
} |
@ -0,0 +1,15 @@ |
||||
import 'package:flutter/material.dart'; |
||||
|
||||
class BrandAlert extends AlertDialog { |
||||
BrandAlert({ |
||||
Key key, |
||||
String title, |
||||
String contentText, |
||||
List<Widget> acitons, |
||||
}) : super( |
||||
key: key, |
||||
title: title != null ? Text(title) : null, |
||||
content: title != null ? Text(contentText) : null, |
||||
actions: acitons, |
||||
); |
||||
} |