From ee5b77431b902237c1dd521f87d6f737f43d4e01 Mon Sep 17 00:00:00 2001 From: dettlaff Date: Fri, 9 Feb 2024 05:08:45 +0400 Subject: [PATCH 1/5] feat: add copy link to service page --- lib/ui/pages/services/service_page.dart | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/ui/pages/services/service_page.dart b/lib/ui/pages/services/service_page.dart index 37f9515c..465520d7 100644 --- a/lib/ui/pages/services/service_page.dart +++ b/lib/ui/pages/services/service_page.dart @@ -2,6 +2,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/cubit/client_jobs/client_jobs_cubit.dart'; import 'package:selfprivacy/logic/cubit/server_volumes/server_volume_cubit.dart'; import 'package:selfprivacy/logic/cubit/services/services_cubit.dart'; @@ -11,6 +12,7 @@ import 'package:selfprivacy/ui/components/cards/filled_card.dart'; import 'package:selfprivacy/ui/layouts/brand_hero_screen.dart'; import 'package:selfprivacy/ui/router/router.dart'; import 'package:selfprivacy/utils/launch_url.dart'; +import 'package:selfprivacy/utils/platform_adapter.dart'; @RoutePage() class ServicePage extends StatefulWidget { @@ -74,6 +76,24 @@ class _ServicePageState extends State { service.url!.replaceAll('https://', ''), style: Theme.of(context).textTheme.bodyMedium, ), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + icon: Icon( + Icons.copy, + size: 24.0, + color: Theme.of(context).colorScheme.secondary, + ), + onPressed: () { + PlatformAdapter.setClipboard(service.url!); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + ), + ], + ), ), const SizedBox(height: 8), const Divider(), -- 2.42.0 From b537eb582d59dda41fb0acb0411bd2e94958637b Mon Sep 17 00:00:00 2001 From: dettlaff Date: Wed, 28 Feb 2024 23:05:31 +0400 Subject: [PATCH 2/5] feat: add copy link to service page --- lib/ui/pages/services/service_page.dart | 37 +++++++++++++++++-------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/lib/ui/pages/services/service_page.dart b/lib/ui/pages/services/service_page.dart index c0064eef..942b1816 100644 --- a/lib/ui/pages/services/service_page.dart +++ b/lib/ui/pages/services/service_page.dart @@ -2,6 +2,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/bloc/services/services_bloc.dart'; import 'package:selfprivacy/logic/bloc/volumes/volumes_bloc.dart'; import 'package:selfprivacy/logic/cubit/client_jobs/client_jobs_cubit.dart'; @@ -11,6 +12,7 @@ import 'package:selfprivacy/ui/components/cards/filled_card.dart'; import 'package:selfprivacy/ui/layouts/brand_hero_screen.dart'; import 'package:selfprivacy/ui/router/router.dart'; import 'package:selfprivacy/utils/launch_url.dart'; +import 'package:selfprivacy/utils/platform_adapter.dart'; @RoutePage() class ServicePage extends StatefulWidget { @@ -62,17 +64,30 @@ class _ServicePageState extends State { ServiceStatusCard(status: service.status), const SizedBox(height: 16), if (service.url != null) - ListTile( - iconColor: Theme.of(context).colorScheme.onBackground, - onTap: () => launchURL(service.url), - leading: const Icon(Icons.open_in_browser), - title: Text( - 'service_page.open_in_browser'.tr(), - style: Theme.of(context).textTheme.titleMedium, - ), - subtitle: Text( - service.url!.replaceAll('https://', ''), - style: Theme.of(context).textTheme.bodyMedium, + GestureDetector( + onLongPress: () { + PlatformAdapter.setClipboard(service.url!); + getIt() + .showSnackBar('basis.copied_to_clipboard'.tr()); + }, + onSecondaryTap: () { + PlatformAdapter.setClipboard(service.url!); + getIt().showSnackBar( + 'basis.copied_to_clipboard'.tr(), + ); + }, + child: ListTile( + iconColor: Theme.of(context).colorScheme.onBackground, + onTap: () => launchURL(service.url), + leading: const Icon(Icons.open_in_browser), + title: Text( + 'service_page.open_in_browser'.tr(), + style: Theme.of(context).textTheme.titleMedium, + ), + subtitle: Text( + service.url!.replaceAll('https://', ''), + style: Theme.of(context).textTheme.bodyMedium, + ), ), ), const SizedBox(height: 8), -- 2.42.0 From 34a5e0da51cdb2c7236c5f00bc09300a914def46 Mon Sep 17 00:00:00 2001 From: dettlaff Date: Wed, 28 Feb 2024 23:12:15 +0400 Subject: [PATCH 3/5] fix: remove duplicates --- lib/ui/pages/services/service_page.dart | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/ui/pages/services/service_page.dart b/lib/ui/pages/services/service_page.dart index e5000ad2..942b1816 100644 --- a/lib/ui/pages/services/service_page.dart +++ b/lib/ui/pages/services/service_page.dart @@ -5,7 +5,6 @@ import 'package:flutter_svg/svg.dart'; import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/bloc/services/services_bloc.dart'; import 'package:selfprivacy/logic/bloc/volumes/volumes_bloc.dart'; -import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/cubit/client_jobs/client_jobs_cubit.dart'; import 'package:selfprivacy/logic/models/job.dart'; import 'package:selfprivacy/logic/models/service.dart'; @@ -14,7 +13,6 @@ import 'package:selfprivacy/ui/layouts/brand_hero_screen.dart'; import 'package:selfprivacy/ui/router/router.dart'; import 'package:selfprivacy/utils/launch_url.dart'; import 'package:selfprivacy/utils/platform_adapter.dart'; -import 'package:selfprivacy/utils/platform_adapter.dart'; @RoutePage() class ServicePage extends StatefulWidget { -- 2.42.0 From 64c23084a24f601c5a953515142e295a879d3d25 Mon Sep 17 00:00:00 2001 From: def Date: Thu, 28 Mar 2024 15:21:08 +0200 Subject: [PATCH 4/5] fix: delete copy onsecondtap --- lib/ui/pages/services/service_page.dart | 6 ------ 1 file changed, 6 deletions(-) diff --git a/lib/ui/pages/services/service_page.dart b/lib/ui/pages/services/service_page.dart index 1a3d5e1e..aa1ac9b6 100644 --- a/lib/ui/pages/services/service_page.dart +++ b/lib/ui/pages/services/service_page.dart @@ -70,12 +70,6 @@ class _ServicePageState extends State { getIt() .showSnackBar('basis.copied_to_clipboard'.tr()); }, - onSecondaryTap: () { - PlatformAdapter.setClipboard(service.url!); - getIt().showSnackBar( - 'basis.copied_to_clipboard'.tr(), - ); - }, child: ListTile( iconColor: Theme.of(context).colorScheme.onBackground, onTap: () => launchURL(service.url), -- 2.42.0 From e5b0b38b5074914db1d3f557aa87dccbd0d8f0dd Mon Sep 17 00:00:00 2001 From: Inex Code Date: Thu, 11 Apr 2024 13:13:38 +0300 Subject: [PATCH 5/5] refactor(ui): Remove unnecessary GestureDetector from the service_page --- lib/ui/pages/services/service_page.dart | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/lib/ui/pages/services/service_page.dart b/lib/ui/pages/services/service_page.dart index aa1ac9b6..42f75fe1 100644 --- a/lib/ui/pages/services/service_page.dart +++ b/lib/ui/pages/services/service_page.dart @@ -64,24 +64,22 @@ class _ServicePageState extends State { ServiceStatusCard(status: service.status), const SizedBox(height: 16), if (service.url != null) - GestureDetector( + ListTile( + iconColor: Theme.of(context).colorScheme.onBackground, + onTap: () => launchURL(service.url), onLongPress: () { PlatformAdapter.setClipboard(service.url!); getIt() .showSnackBar('basis.copied_to_clipboard'.tr()); }, - child: ListTile( - iconColor: Theme.of(context).colorScheme.onBackground, - onTap: () => launchURL(service.url), - leading: const Icon(Icons.open_in_browser), - title: Text( - 'service_page.open_in_browser'.tr(), - style: Theme.of(context).textTheme.titleMedium, - ), - subtitle: Text( - service.url!.replaceAll('https://', ''), - style: Theme.of(context).textTheme.bodyMedium, - ), + leading: const Icon(Icons.open_in_browser), + title: Text( + 'service_page.open_in_browser'.tr(), + style: Theme.of(context).textTheme.titleMedium, + ), + subtitle: Text( + service.url!.replaceAll('https://', ''), + style: Theme.of(context).textTheme.bodyMedium, ), ), const SizedBox(height: 8), -- 2.42.0