mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-04-21 22:39:11 +00:00
120 lines
No EOL
2.9 KiB
Dart
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
|
|
),
|
|
),
|
|
);
|
|
} |