From 40e3a8bd4b7692135b8cf50505602464933f7f4c Mon Sep 17 00:00:00 2001 From: Mohit Joshi Date: Mon, 22 Jul 2024 18:14:12 +0530 Subject: [PATCH 1/3] Added URL launcher on resources page --- .../molecules/page_enclosure_molecule.dart | 3 +++ lib/presentation/molecules/top_bar_molecule.dart | 4 +++- lib/presentation/pages/tip_resources_page.dart | 11 +++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/presentation/molecules/page_enclosure_molecule.dart b/lib/presentation/molecules/page_enclosure_molecule.dart index afa8b42..e1d319b 100644 --- a/lib/presentation/molecules/page_enclosure_molecule.dart +++ b/lib/presentation/molecules/page_enclosure_molecule.dart @@ -14,6 +14,7 @@ class PageEnclosureMolecule extends StatelessWidget { this.scaffold = true, this.topBarRightOnTap, this.expendChild = true, + this.topBarRightIcon, super.key, }); @@ -27,6 +28,7 @@ class PageEnclosureMolecule extends StatelessWidget { final TopBarType topBarType; final VoidCallback? topBarRightOnTap; final bool expendChild; + final IconData? topBarRightIcon; Widget topBarHelper() { return Column( @@ -37,6 +39,7 @@ class PageEnclosureMolecule extends StatelessWidget { margin: false, translate: topBarTranslate, rightOnTap: topBarRightOnTap, + rightIcon: topBarRightIcon, ), if (subTitle != null) TextAtom( diff --git a/lib/presentation/molecules/top_bar_molecule.dart b/lib/presentation/molecules/top_bar_molecule.dart index 854e42b..b0531d1 100644 --- a/lib/presentation/molecules/top_bar_molecule.dart +++ b/lib/presentation/molecules/top_bar_molecule.dart @@ -9,12 +9,14 @@ class TopBarMolecule extends StatelessWidget { this.rightOnTap, this.translate = true, this.margin = true, + this.rightIcon, }); final TopBarType topBarType; final String? title; final VoidCallback? leftOnTap; final VoidCallback? rightOnTap; + final IconData? rightIcon; final bool translate; final bool margin; @@ -108,7 +110,7 @@ class TopBarMolecule extends StatelessWidget { variant: ButtonVariant.lowEmphasisIcon, onPressed: rightOnTap!, translate: translate, - icon: Icons.more_vert, + icon: rightIcon ?? Icons.more_vert, ) else TextAtom( diff --git a/lib/presentation/pages/tip_resources_page.dart b/lib/presentation/pages/tip_resources_page.dart index fafaa8a..259ac2f 100644 --- a/lib/presentation/pages/tip_resources_page.dart +++ b/lib/presentation/pages/tip_resources_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:infinite_horizons/presentation/molecules/molecules.dart'; import 'package:infinite_horizons/presentation/pages/pages.dart'; +import 'package:url_launcher/url_launcher.dart'; class TipResourcePage extends StatelessWidget { const TipResourcePage({ @@ -16,7 +17,9 @@ class TipResourcePage extends StatelessWidget { title: "resource", margin: false, topBarType: TopBarType.back, + topBarRightOnTap: () => openUrl(url), expendChild: false, + topBarRightIcon: Icons.open_in_new, child: PdfViewerMolecule( url: url, ), @@ -31,9 +34,17 @@ class TipResourcePage extends StatelessWidget { margin: false, topBarType: TopBarType.back, expendChild: false, + topBarRightIcon: Icons.open_in_new, + topBarRightOnTap: () => openUrl(url), child: WebViewMolecule( url: url, ), ); } + + Future openUrl(String url) async { + if (!await launchUrl(Uri.parse(url))) { + throw Exception('Could not launch $url'); + } + } } From 62f6f32ed4aa538ff6f47996b5a7960c0cbcce25 Mon Sep 17 00:00:00 2001 From: Mohit Joshi Date: Wed, 24 Jul 2024 15:35:21 +0530 Subject: [PATCH 2/3] Added URL launch controller and requested changes --- lib/domain/controllers/url_launcher_controller.dart | 12 ++++++++++++ lib/infrastructure/url_launcher_repository.dart | 10 ++++++++++ lib/presentation/pages/tip_resources_page.dart | 12 +++--------- lib/presentation/pages/youtube_player_page.dart | 6 +++++- 4 files changed, 30 insertions(+), 10 deletions(-) create mode 100644 lib/domain/controllers/url_launcher_controller.dart create mode 100644 lib/infrastructure/url_launcher_repository.dart diff --git a/lib/domain/controllers/url_launcher_controller.dart b/lib/domain/controllers/url_launcher_controller.dart new file mode 100644 index 0000000..a957383 --- /dev/null +++ b/lib/domain/controllers/url_launcher_controller.dart @@ -0,0 +1,12 @@ +import 'package:url_launcher/url_launcher.dart'; + +part 'package:infinite_horizons/infrastructure/url_launcher_repository.dart'; + +abstract class URLLauncherController { + static URLLauncherController? _instance; + + static URLLauncherController get instance => + _instance ??= _URLLauncherRepository(); + + Future openUrl(String url); +} diff --git a/lib/infrastructure/url_launcher_repository.dart b/lib/infrastructure/url_launcher_repository.dart new file mode 100644 index 0000000..106e408 --- /dev/null +++ b/lib/infrastructure/url_launcher_repository.dart @@ -0,0 +1,10 @@ +part of 'package:infinite_horizons/domain/controllers/url_launcher_controller.dart'; + +class _URLLauncherRepository extends URLLauncherController { + @override + Future openUrl(String url) async { + if (!await launchUrl(Uri.parse(url))) { + throw Exception('Could not launch $url'); + } + } +} diff --git a/lib/presentation/pages/tip_resources_page.dart b/lib/presentation/pages/tip_resources_page.dart index 259ac2f..c7df246 100644 --- a/lib/presentation/pages/tip_resources_page.dart +++ b/lib/presentation/pages/tip_resources_page.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:infinite_horizons/domain/controllers/url_launcher_controller.dart'; import 'package:infinite_horizons/presentation/molecules/molecules.dart'; import 'package:infinite_horizons/presentation/pages/pages.dart'; -import 'package:url_launcher/url_launcher.dart'; class TipResourcePage extends StatelessWidget { const TipResourcePage({ @@ -17,7 +17,7 @@ class TipResourcePage extends StatelessWidget { title: "resource", margin: false, topBarType: TopBarType.back, - topBarRightOnTap: () => openUrl(url), + topBarRightOnTap: () => URLLauncherController.instance.openUrl(url), expendChild: false, topBarRightIcon: Icons.open_in_new, child: PdfViewerMolecule( @@ -35,16 +35,10 @@ class TipResourcePage extends StatelessWidget { topBarType: TopBarType.back, expendChild: false, topBarRightIcon: Icons.open_in_new, - topBarRightOnTap: () => openUrl(url), + topBarRightOnTap: () => URLLauncherController.instance.openUrl(url), child: WebViewMolecule( url: url, ), ); } - - Future openUrl(String url) async { - if (!await launchUrl(Uri.parse(url))) { - throw Exception('Could not launch $url'); - } - } } diff --git a/lib/presentation/pages/youtube_player_page.dart b/lib/presentation/pages/youtube_player_page.dart index 053eebc..343ec58 100644 --- a/lib/presentation/pages/youtube_player_page.dart +++ b/lib/presentation/pages/youtube_player_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:infinite_horizons/domain/controllers/url_launcher_controller.dart'; import 'package:infinite_horizons/presentation/atoms/atoms.dart'; import 'package:infinite_horizons/presentation/core/global_variables.dart'; import 'package:infinite_horizons/presentation/molecules/molecules.dart'; @@ -30,9 +31,12 @@ class _YoutubePlayerPageState extends State { body: Column( children: [ if (!isFullScreen) - const TopBarMolecule( + TopBarMolecule( topBarType: TopBarType.back, title: 'resource', + rightIcon: Icons.open_in_new, + rightOnTap: () => + URLLauncherController.instance.openUrl(widget.url), ), const SeparatorAtom(variant: SeparatorVariant.closeWidgets), Expanded( From 555c216eb7480dcd985d144a5b2b1656018a0973 Mon Sep 17 00:00:00 2001 From: Mohit Joshi Date: Thu, 25 Jul 2024 12:49:04 +0530 Subject: [PATCH 3/3] Requested changes done --- lib/domain/controllers/controllers.dart | 1 + lib/domain/controllers/url_launcher_controller.dart | 10 +++++----- lib/infrastructure/url_launcher_repository.dart | 8 ++------ lib/presentation/pages/tip_resources_page.dart | 6 +++--- lib/presentation/pages/youtube_player_page.dart | 4 ++-- 5 files changed, 13 insertions(+), 16 deletions(-) diff --git a/lib/domain/controllers/controllers.dart b/lib/domain/controllers/controllers.dart index 5939fe5..596c7d7 100644 --- a/lib/domain/controllers/controllers.dart +++ b/lib/domain/controllers/controllers.dart @@ -4,6 +4,7 @@ export 'package:infinite_horizons/domain/controllers/notifications_controller.da export 'package:infinite_horizons/domain/controllers/permissions_controller.dart'; export 'package:infinite_horizons/domain/controllers/player_controller.dart'; export 'package:infinite_horizons/domain/controllers/preferences_controller.dart'; +export 'package:infinite_horizons/domain/controllers/url_launcher_controller.dart'; export 'package:infinite_horizons/domain/controllers/vibration_controller.dart'; export 'package:infinite_horizons/domain/controllers/wake_lock_controller.dart'; export 'package:infinite_horizons/domain/controllers/web_browser_controller.dart'; diff --git a/lib/domain/controllers/url_launcher_controller.dart b/lib/domain/controllers/url_launcher_controller.dart index a957383..7b574aa 100644 --- a/lib/domain/controllers/url_launcher_controller.dart +++ b/lib/domain/controllers/url_launcher_controller.dart @@ -2,11 +2,11 @@ import 'package:url_launcher/url_launcher.dart'; part 'package:infinite_horizons/infrastructure/url_launcher_repository.dart'; -abstract class URLLauncherController { - static URLLauncherController? _instance; +abstract class UrlLauncherController { + static UrlLauncherController? _instance; - static URLLauncherController get instance => - _instance ??= _URLLauncherRepository(); + static UrlLauncherController get instance => + _instance ??= _UrlLauncherRepository(); - Future openUrl(String url); + Future openUrl(String url); } diff --git a/lib/infrastructure/url_launcher_repository.dart b/lib/infrastructure/url_launcher_repository.dart index 106e408..32adf7f 100644 --- a/lib/infrastructure/url_launcher_repository.dart +++ b/lib/infrastructure/url_launcher_repository.dart @@ -1,10 +1,6 @@ part of 'package:infinite_horizons/domain/controllers/url_launcher_controller.dart'; -class _URLLauncherRepository extends URLLauncherController { +class _UrlLauncherRepository extends UrlLauncherController { @override - Future openUrl(String url) async { - if (!await launchUrl(Uri.parse(url))) { - throw Exception('Could not launch $url'); - } - } + Future openUrl(String url) => launchUrl(Uri.parse(url)); } diff --git a/lib/presentation/pages/tip_resources_page.dart b/lib/presentation/pages/tip_resources_page.dart index c7df246..cb54297 100644 --- a/lib/presentation/pages/tip_resources_page.dart +++ b/lib/presentation/pages/tip_resources_page.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:infinite_horizons/domain/controllers/url_launcher_controller.dart'; +import 'package:infinite_horizons/domain/controllers/controllers.dart'; import 'package:infinite_horizons/presentation/molecules/molecules.dart'; import 'package:infinite_horizons/presentation/pages/pages.dart'; @@ -17,7 +17,7 @@ class TipResourcePage extends StatelessWidget { title: "resource", margin: false, topBarType: TopBarType.back, - topBarRightOnTap: () => URLLauncherController.instance.openUrl(url), + topBarRightOnTap: () => UrlLauncherController.instance.openUrl(url), expendChild: false, topBarRightIcon: Icons.open_in_new, child: PdfViewerMolecule( @@ -35,7 +35,7 @@ class TipResourcePage extends StatelessWidget { topBarType: TopBarType.back, expendChild: false, topBarRightIcon: Icons.open_in_new, - topBarRightOnTap: () => URLLauncherController.instance.openUrl(url), + topBarRightOnTap: () => UrlLauncherController.instance.openUrl(url), child: WebViewMolecule( url: url, ), diff --git a/lib/presentation/pages/youtube_player_page.dart b/lib/presentation/pages/youtube_player_page.dart index 343ec58..a4e24ee 100644 --- a/lib/presentation/pages/youtube_player_page.dart +++ b/lib/presentation/pages/youtube_player_page.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:infinite_horizons/domain/controllers/url_launcher_controller.dart'; +import 'package:infinite_horizons/domain/controllers/controllers.dart'; import 'package:infinite_horizons/presentation/atoms/atoms.dart'; import 'package:infinite_horizons/presentation/core/global_variables.dart'; import 'package:infinite_horizons/presentation/molecules/molecules.dart'; @@ -36,7 +36,7 @@ class _YoutubePlayerPageState extends State { title: 'resource', rightIcon: Icons.open_in_new, rightOnTap: () => - URLLauncherController.instance.openUrl(widget.url), + UrlLauncherController.instance.openUrl(widget.url), ), const SeparatorAtom(variant: SeparatorVariant.closeWidgets), Expanded(