Change opening client modal

This commit is contained in:
Juan Gilsanz Polo 2023-10-07 23:16:52 +02:00
parent 5b715d0456
commit 2ad99e737d
6 changed files with 82 additions and 99 deletions

View file

@ -9,7 +9,7 @@ import 'package:flutter_split_view/flutter_split_view.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/screens/clients/client/client_screen.dart'; import 'package:adguard_home_manager/screens/clients/client/client_screen_functions.dart';
import 'package:adguard_home_manager/screens/clients/client/added_client_tile.dart'; import 'package:adguard_home_manager/screens/clients/client/added_client_tile.dart';
import 'package:adguard_home_manager/screens/clients/client/remove_client_modal.dart'; import 'package:adguard_home_manager/screens/clients/client/remove_client_modal.dart';
import 'package:adguard_home_manager/screens/clients/fab.dart'; import 'package:adguard_home_manager/screens/clients/fab.dart';
@ -128,31 +128,12 @@ class _AddedListState extends State<AddedList> {
} }
void openClientModal(Client client) { void openClientModal(Client client) {
if (width > 900 || !(Platform.isAndroid | Platform.isIOS)) { openClientFormModal(
showDialog( context: context,
barrierDismissible: false, width: width,
context: context, onConfirm: confirmEditClient,
builder: (BuildContext context) => ClientScreen( onDelete: deleteClient
onConfirm: confirmEditClient, );
serverVersion: statusProvider.serverStatus!.serverVersion,
onDelete: deleteClient,
client: client,
dialog: true,
)
);
}
else {
Navigator.push(context, MaterialPageRoute(
fullscreenDialog: true,
builder: (BuildContext context) => ClientScreen(
onConfirm: confirmEditClient,
serverVersion: statusProvider.serverStatus!.serverVersion,
onDelete: deleteClient,
client: client,
dialog: false,
)
));
}
} }
void openDeleteModal(Client client) { void openDeleteModal(Client client) {

View file

@ -20,18 +20,16 @@ import 'package:adguard_home_manager/models/clients.dart';
class ClientScreen extends StatefulWidget { class ClientScreen extends StatefulWidget {
final Client? client; final Client? client;
final String serverVersion;
final void Function(Client) onConfirm; final void Function(Client) onConfirm;
final void Function(Client)? onDelete; final void Function(Client)? onDelete;
final bool dialog; final bool fullScreen;
const ClientScreen({ const ClientScreen({
Key? key, Key? key,
this.client, this.client,
required this.serverVersion,
required this.onConfirm, required this.onConfirm,
this.onDelete, this.onDelete,
required this.dialog required this.fullScreen
}) : super(key: key); }) : super(key: key);
@override @override
@ -81,7 +79,7 @@ class _ClientScreenState extends State<ClientScreen> {
@override @override
void initState() { void initState() {
version = serverVersionIsAhead( version = serverVersionIsAhead(
currentVersion: widget.serverVersion, currentVersion: Provider.of<StatusProvider>(context, listen: false).serverStatus!.serverVersion,
referenceVersion: 'v0.107.28', referenceVersion: 'v0.107.28',
referenceVersionBeta: 'v0.108.0-b.33' referenceVersionBeta: 'v0.108.0-b.33'
); );
@ -380,7 +378,26 @@ class _ClientScreenState extends State<ClientScreen> {
} }
if (widget.dialog == true) { if (widget.fullScreen == true) {
return Dialog.fullscreen(
child: Scaffold(
appBar: AppBar(
leading: IconButton(
onPressed: () => Navigator.pop(context),
icon: const Icon(Icons.close)
),
title: Text(
widget.client != null
? AppLocalizations.of(context)!.client
: AppLocalizations.of(context)!.addClient
),
actions: actions(),
),
body: content(true)
),
);
}
else {
return Dialog( return Dialog(
child: ConstrainedBox( child: ConstrainedBox(
constraints: const BoxConstraints( constraints: const BoxConstraints(
@ -421,22 +438,5 @@ class _ClientScreenState extends State<ClientScreen> {
), ),
); );
} }
else {
return Scaffold(
appBar: AppBar(
leading: IconButton(
onPressed: () => Navigator.pop(context),
icon: const Icon(Icons.close)
),
title: Text(
widget.client != null
? AppLocalizations.of(context)!.client
: AppLocalizations.of(context)!.addClient
),
actions: actions(),
),
body: content(true)
);
}
} }
} }

View file

@ -1,11 +1,15 @@
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:adguard_home_manager/screens/clients/client/client_screen.dart';
import 'package:adguard_home_manager/screens/clients/client/remove_client_modal.dart'; import 'package:adguard_home_manager/screens/clients/client/remove_client_modal.dart';
import 'package:adguard_home_manager/screens/clients/client/safe_search_modal.dart'; import 'package:adguard_home_manager/screens/clients/client/safe_search_modal.dart';
import 'package:adguard_home_manager/screens/clients/client/services_modal.dart'; import 'package:adguard_home_manager/screens/clients/client/services_modal.dart';
import 'package:adguard_home_manager/screens/clients/client/tags_modal.dart'; import 'package:adguard_home_manager/screens/clients/client/tags_modal.dart';
import 'package:adguard_home_manager/models/clients.dart';
import 'package:adguard_home_manager/providers/clients_provider.dart'; import 'package:adguard_home_manager/providers/clients_provider.dart';
import 'package:adguard_home_manager/models/safe_search.dart'; import 'package:adguard_home_manager/models/safe_search.dart';
@ -85,3 +89,38 @@ bool checkValidValues({
return false; return false;
} }
} }
void openClientFormModal({
required BuildContext context,
required double width,
Client? client,
required void Function(Client) onConfirm,
void Function(Client)? onDelete,
}) {
showGeneralDialog(
context: context,
barrierColor: !(width > 900 || !(Platform.isAndroid | Platform.isIOS))
?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) => ClientScreen(
fullScreen: !(width > 900 || !(Platform.isAndroid | Platform.isIOS)),
client: client,
onConfirm: onConfirm,
onDelete: onDelete,
),
);
}

View file

@ -1,4 +1,3 @@
import 'package:adguard_home_manager/screens/clients/client/client_screen_functions.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';

View file

@ -8,6 +8,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/screens/clients/client/client_screen.dart'; import 'package:adguard_home_manager/screens/clients/client/client_screen.dart';
import 'package:adguard_home_manager/screens/clients/client/client_screen_functions.dart';
import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/providers/clients_provider.dart'; import 'package:adguard_home_manager/providers/clients_provider.dart';
import 'package:adguard_home_manager/models/clients.dart'; import 'package:adguard_home_manager/models/clients.dart';
@ -51,27 +52,11 @@ class ClientsFab extends StatelessWidget {
} }
void openAddClient() { void openAddClient() {
if (width > 900 || !(Platform.isAndroid | Platform.isIOS)) { openClientFormModal(
showDialog( context: context,
barrierDismissible: false, width: width,
context: context, onConfirm: confirmAddClient
builder: (BuildContext context) => ClientScreen( );
onConfirm: confirmAddClient,
serverVersion: statusProvider.serverStatus!.serverVersion,
dialog: true,
)
);
}
else {
Navigator.push(context, MaterialPageRoute(
fullscreenDialog: true,
builder: (BuildContext context) => ClientScreen(
onConfirm: confirmAddClient,
serverVersion: statusProvider.serverStatus!.serverVersion,
dialog: false,
)
));
}
} }
return FloatingActionButton( return FloatingActionButton(

View file

@ -1,14 +1,12 @@
// ignore_for_file: use_build_context_synchronously // ignore_for_file: use_build_context_synchronously
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:animations/animations.dart'; import 'package:animations/animations.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/screens/clients/client/remove_client_modal.dart'; import 'package:adguard_home_manager/screens/clients/client/remove_client_modal.dart';
import 'package:adguard_home_manager/screens/clients/client/client_screen.dart'; import 'package:adguard_home_manager/screens/clients/client/client_screen_functions.dart';
import 'package:adguard_home_manager/screens/clients/options_modal.dart'; import 'package:adguard_home_manager/screens/clients/options_modal.dart';
import 'package:adguard_home_manager/widgets/section_label.dart'; import 'package:adguard_home_manager/widgets/section_label.dart';
@ -137,31 +135,12 @@ class _SearchClientsState extends State<SearchClients> {
} }
void openClientModal(Client client) { void openClientModal(Client client) {
if (width > 900 || !(Platform.isAndroid | Platform.isIOS)) { openClientFormModal(
showDialog( context: context,
barrierDismissible: false, width: width,
context: context, onConfirm: confirmEditClient,
builder: (BuildContext context) => ClientScreen( onDelete: deleteClient
onConfirm: confirmEditClient, );
serverVersion: statusProvider.serverStatus!.serverVersion,
onDelete: deleteClient,
client: client,
dialog: true,
)
);
}
else {
Navigator.push(context, MaterialPageRoute(
fullscreenDialog: true,
builder: (BuildContext context) => ClientScreen(
onConfirm: confirmEditClient,
serverVersion: statusProvider.serverStatus!.serverVersion,
onDelete: deleteClient,
client: client,
dialog: false,
)
));
}
} }
void openDeleteModal(Client client) { void openDeleteModal(Client client) {