From 2ad99e737d7eec417a46bd109a0c2aaca4bc4b7c Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Sat, 7 Oct 2023 23:16:52 +0200 Subject: [PATCH] Change opening client modal --- lib/screens/clients/added_list.dart | 33 +++---------- lib/screens/clients/client/client_screen.dart | 46 +++++++++---------- .../client/client_screen_functions.dart | 39 ++++++++++++++++ .../clients/client/identifiers_section.dart | 1 - lib/screens/clients/fab.dart | 27 +++-------- lib/screens/clients/search_clients.dart | 35 +++----------- 6 files changed, 82 insertions(+), 99 deletions(-) diff --git a/lib/screens/clients/added_list.dart b/lib/screens/clients/added_list.dart index c49667d..08621ce 100644 --- a/lib/screens/clients/added_list.dart +++ b/lib/screens/clients/added_list.dart @@ -9,7 +9,7 @@ import 'package:flutter_split_view/flutter_split_view.dart'; import 'package:provider/provider.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/remove_client_modal.dart'; import 'package:adguard_home_manager/screens/clients/fab.dart'; @@ -128,31 +128,12 @@ class _AddedListState extends State { } void openClientModal(Client client) { - if (width > 900 || !(Platform.isAndroid | Platform.isIOS)) { - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) => ClientScreen( - 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, - ) - )); - } + openClientFormModal( + context: context, + width: width, + onConfirm: confirmEditClient, + onDelete: deleteClient + ); } void openDeleteModal(Client client) { diff --git a/lib/screens/clients/client/client_screen.dart b/lib/screens/clients/client/client_screen.dart index 5994767..4fcee53 100644 --- a/lib/screens/clients/client/client_screen.dart +++ b/lib/screens/clients/client/client_screen.dart @@ -20,18 +20,16 @@ import 'package:adguard_home_manager/models/clients.dart'; class ClientScreen extends StatefulWidget { final Client? client; - final String serverVersion; final void Function(Client) onConfirm; final void Function(Client)? onDelete; - final bool dialog; + final bool fullScreen; const ClientScreen({ Key? key, this.client, - required this.serverVersion, required this.onConfirm, this.onDelete, - required this.dialog + required this.fullScreen }) : super(key: key); @override @@ -81,7 +79,7 @@ class _ClientScreenState extends State { @override void initState() { version = serverVersionIsAhead( - currentVersion: widget.serverVersion, + currentVersion: Provider.of(context, listen: false).serverStatus!.serverVersion, referenceVersion: 'v0.107.28', referenceVersionBeta: 'v0.108.0-b.33' ); @@ -380,7 +378,26 @@ class _ClientScreenState extends State { } - 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( child: ConstrainedBox( constraints: const BoxConstraints( @@ -421,22 +438,5 @@ class _ClientScreenState extends State { ), ); } - 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) - ); - } } } \ No newline at end of file diff --git a/lib/screens/clients/client/client_screen_functions.dart b/lib/screens/clients/client/client_screen_functions.dart index 1bbfd24..4b84b2b 100644 --- a/lib/screens/clients/client/client_screen_functions.dart +++ b/lib/screens/clients/client/client_screen_functions.dart @@ -1,11 +1,15 @@ +import 'dart:io'; + import 'package:flutter/material.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/safe_search_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/models/clients.dart'; import 'package:adguard_home_manager/providers/clients_provider.dart'; import 'package:adguard_home_manager/models/safe_search.dart'; @@ -85,3 +89,38 @@ bool checkValidValues({ 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, + ), + ); +} \ No newline at end of file diff --git a/lib/screens/clients/client/identifiers_section.dart b/lib/screens/clients/client/identifiers_section.dart index 08b044b..3d9acf2 100644 --- a/lib/screens/clients/client/identifiers_section.dart +++ b/lib/screens/clients/client/identifiers_section.dart @@ -1,4 +1,3 @@ -import 'package:adguard_home_manager/screens/clients/client/client_screen_functions.dart'; import 'package:flutter/material.dart'; import 'package:uuid/uuid.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; diff --git a/lib/screens/clients/fab.dart b/lib/screens/clients/fab.dart index 34dee54..f9697f6 100644 --- a/lib/screens/clients/fab.dart +++ b/lib/screens/clients/fab.dart @@ -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_functions.dart'; import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/providers/clients_provider.dart'; import 'package:adguard_home_manager/models/clients.dart'; @@ -51,27 +52,11 @@ class ClientsFab extends StatelessWidget { } void openAddClient() { - if (width > 900 || !(Platform.isAndroid | Platform.isIOS)) { - showDialog( - barrierDismissible: false, - context: context, - 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, - ) - )); - } + openClientFormModal( + context: context, + width: width, + onConfirm: confirmAddClient + ); } return FloatingActionButton( diff --git a/lib/screens/clients/search_clients.dart b/lib/screens/clients/search_clients.dart index a70923f..37544f8 100644 --- a/lib/screens/clients/search_clients.dart +++ b/lib/screens/clients/search_clients.dart @@ -1,14 +1,12 @@ // ignore_for_file: use_build_context_synchronously -import 'dart:io'; - import 'package:flutter/material.dart'; import 'package:animations/animations.dart'; import 'package:provider/provider.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/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/widgets/section_label.dart'; @@ -137,31 +135,12 @@ class _SearchClientsState extends State { } void openClientModal(Client client) { - if (width > 900 || !(Platform.isAndroid | Platform.isIOS)) { - showDialog( - barrierDismissible: false, - context: context, - builder: (BuildContext context) => ClientScreen( - 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, - ) - )); - } + openClientFormModal( + context: context, + width: width, + onConfirm: confirmEditClient, + onDelete: deleteClient + ); } void openDeleteModal(Client client) {