adguard-home-manager/lib/widgets/add_server/add_server_functions.dart
2023-10-07 21:51:29 +02:00

120 lines
No EOL
2.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/models/server.dart';
import 'package:adguard_home_manager/widgets/add_server/add_server_modal.dart';
import 'package:adguard_home_manager/widgets/version_warning_modal.dart';
bool checkDataValid({
required TextEditingController nameController,
required TextEditingController ipDomainController,
required String? ipDomainError,
required String? pathError,
required String? portError,
}) {
if (
nameController.text != '' &&
ipDomainController.text != '' &&
ipDomainError == null &&
pathError == null &&
portError == null
) {
return true;
}
else {
return false;
}
}
String? validatePort({
required String? value,
required BuildContext context
}) {
if (value != null && value != '') {
if (int.tryParse(value) != null && int.parse(value) <= 65535) {
return null;
}
else {
return AppLocalizations.of(context)!.invalidPort;
}
}
else {
return null;
}
}
String? validateSubroute({
required BuildContext context,
required String? value
}) {
if (value != null && value != '') {
RegExp subrouteRegexp = RegExp(r'^\/\b([A-Za-z0-9_\-~/]*)[^\/|\.|\:]$');
if (subrouteRegexp.hasMatch(value) == true) {
return null;
}
else {
return AppLocalizations.of(context)!.invalidPath;
}
}
else {
return null;
}
}
String? validateAddress({
required BuildContext context,
required String? value
}) {
if (value != null && value != '') {
RegExp ipAddress = RegExp(r'^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)(\.(?!$)|$)){4}$');
RegExp domain = RegExp(r'^(([a-z0-9|-]+\.)*[a-z0-9|-]+\.[a-z]+)$');
if (ipAddress.hasMatch(value) == true || domain.hasMatch(value) == true) {
return null;
}
else {
return AppLocalizations.of(context)!.invalidIpDomain;
}
}
else {
return AppLocalizations.of(context)!.ipDomainNotEmpty;
}
}
void openServerFormModal({
required BuildContext context,
required double width,
Server? server,
}) {
showGeneralDialog(
context: context,
barrierColor: width <= 700
?Colors.transparent
: Colors.black54,
transitionBuilder: (context, anim1, anim2, child) {
return SlideTransition(
position: Tween(
begin: const Offset(0, 1),
end: const Offset(0, 0)
).animate(
CurvedAnimation(
parent: anim1,
curve: Curves.easeInOutCubicEmphasized
)
),
child: child,
);
},
pageBuilder: (context, animation, secondaryAnimation) => AddServerModal(
fullScreen: width <= 700,
server: server,
onUnsupportedVersion: (version) => showDialog(
context: context,
builder: (ctx) => VersionWarningModal(
version: version
),
barrierDismissible: false
),
),
);
}