diff --git a/lib/services/app_home_widget/home_widget_repository.dart b/lib/services/app_home_widget/home_widget_repository.dart index 43eb7ad..82dc4cb 100644 --- a/lib/services/app_home_widget/home_widget_repository.dart +++ b/lib/services/app_home_widget/home_widget_repository.dart @@ -1,9 +1,8 @@ import 'package:didvan/models/notification_message.dart'; -import 'package:didvan/services/app_initalizer.dart'; -import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/cupertino.dart'; import 'package:home_widget/home_widget.dart'; import 'package:persian_number_utility/persian_number_utility.dart'; +import 'package:url_launcher/url_launcher_string.dart'; // import 'package:url_launcher/url_launcher_string.dart'; import '../../main.dart'; @@ -90,7 +89,7 @@ class HomeWidgetRepository { ); if (data.link!.startsWith('http')) { - openInWebView( + launchUrlString( '${data.link}', mode: LaunchMode.inAppWebView, ); @@ -219,7 +218,7 @@ class HomeWidgetRepository { } } else { if (data.link!.startsWith('http')) { - openInWebView( + launchUrlString( '${data.link}', mode: LaunchMode.inAppWebView, ); @@ -227,9 +226,7 @@ class HomeWidgetRepository { } if (route.isNotEmpty) { navigatorKey.currentState!.pushNamed(route, arguments: args); - print("Push: $route"); } - print("Push: empty"); return; } diff --git a/lib/services/app_initalizer.dart b/lib/services/app_initalizer.dart index 0d41682..c9aeb75 100644 --- a/lib/services/app_initalizer.dart +++ b/lib/services/app_initalizer.dart @@ -13,19 +13,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; -import 'package:url_launcher/url_launcher.dart'; - -enum LaunchMode { inAppWebView } - -void openInWebView(String src, {dynamic mode}) async { - if (kIsWeb) { - if (!await launchUrl(Uri.parse(src))) { - throw Exception('Could not launch $src'); - } - return; - } - navigatorKey.currentState!.pushNamed(Routes.web, arguments: src); -} class AppInitializer { static String? fcmToken; diff --git a/lib/views/authentication/screens/username.dart b/lib/views/authentication/screens/username.dart index 23ccb2a..9edecdd 100644 --- a/lib/views/authentication/screens/username.dart +++ b/lib/views/authentication/screens/username.dart @@ -1,4 +1,3 @@ -import 'package:didvan/services/app_initalizer.dart'; import 'package:didvan/views/authentication/authentication_state.dart'; import 'package:didvan/views/authentication/widgets/authentication_layout.dart'; import 'package:didvan/views/widgets/didvan/button.dart'; @@ -7,6 +6,7 @@ import 'package:didvan/views/widgets/didvan/text_field.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:url_launcher/url_launcher_string.dart'; // import 'package:url_launcher/url_launcher.dart'; class UsernameInput extends StatefulWidget { @@ -79,7 +79,7 @@ class _UsernameInputState extends State { .bodySmall! .copyWith(color: Theme.of(context).colorScheme.primary), recognizer: TapGestureRecognizer() - ..onTap = () => openInWebView( + ..onTap = () => launchUrlString( 'https://didvan.app/terms-of-use#conditions', ), ), @@ -91,7 +91,7 @@ class _UsernameInputState extends State { .bodySmall! .copyWith(color: Theme.of(context).colorScheme.primary), recognizer: TapGestureRecognizer() - ..onTap = () => openInWebView( + ..onTap = () => launchUrlString( 'https://didvan.app/terms-of-use#privacy', ), ), diff --git a/lib/views/home/main/main_page.dart b/lib/views/home/main/main_page.dart index 76de130..834bf79 100644 --- a/lib/views/home/main/main_page.dart +++ b/lib/views/home/main/main_page.dart @@ -2,7 +2,6 @@ import 'package:didvan/config/theme_data.dart'; import 'package:didvan/constants/app_icons.dart'; import 'package:didvan/models/home_page_content/home_page_list.dart'; import 'package:didvan/routes/routes.dart'; -import 'package:didvan/services/app_initalizer.dart'; import 'package:didvan/views/home/main/main_page_state.dart'; import 'package:didvan/views/home/main/widgets/banner.dart'; import 'package:didvan/views/home/main/widgets/general_item.dart'; @@ -15,6 +14,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; // import 'package:url_launcher/url_launcher_string.dart'; import 'package:didvan/services/network/request.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class MainPage extends StatefulWidget { const MainPage({super.key}); @@ -126,7 +126,7 @@ class _MainPageSection extends StatelessWidget { void _moreHandler(BuildContext context) { if (list.link.startsWith('http')) { - openInWebView( + launchUrlString( '${list.link}?accessToken=${RequestService.token}', mode: LaunchMode.inAppWebView, ); diff --git a/lib/views/home/main/main_page_state.dart b/lib/views/home/main/main_page_state.dart index 75fc3de..71d45fb 100644 --- a/lib/views/home/main/main_page_state.dart +++ b/lib/views/home/main/main_page_state.dart @@ -6,10 +6,10 @@ import 'package:didvan/models/requests/news.dart'; import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/providers/core.dart'; import 'package:didvan/routes/routes.dart'; -import 'package:didvan/services/app_initalizer.dart'; import 'package:didvan/services/network/request.dart'; import 'package:didvan/services/network/request_helper.dart'; import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher_string.dart'; // import 'package:url_launcher/url_launcher_string.dart'; class MainPageState extends CoreProvier { @@ -99,7 +99,7 @@ class MainPageState extends CoreProvier { return; } if (link.startsWith('http')) { - openInWebView( + launchUrlString( '$link?accessToken=${RequestService.token}', mode: LaunchMode.inAppWebView, ); diff --git a/lib/views/home/main/widgets/banner.dart b/lib/views/home/main/widgets/banner.dart index 569d9a1..79c946e 100644 --- a/lib/views/home/main/widgets/banner.dart +++ b/lib/views/home/main/widgets/banner.dart @@ -1,10 +1,10 @@ -import 'package:didvan/services/app_initalizer.dart'; import 'package:didvan/utils/action_sheet.dart'; import 'package:didvan/views/home/main/main_page_state.dart'; import 'package:didvan/views/widgets/didvan/slider.dart'; import 'package:didvan/views/widgets/skeleton_image.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:url_launcher/url_launcher_string.dart'; // import 'package:url_launcher/url_launcher_string.dart'; class MainPageBanner extends StatelessWidget { @@ -23,7 +23,7 @@ class MainPageBanner extends StatelessWidget { onTap: () => item.link == null || item.link!.isEmpty ? ActionSheetUtils(context) .openInteractiveViewer(context, item.image, false) - : openInWebView(item.link!, mode: LaunchMode.inAppWebView), + : launchUrlString(item.link!, mode: LaunchMode.inAppWebView), child: SkeletonImage( imageUrl: item.image, ), diff --git a/lib/views/home/search/widgets/search_result_item.dart b/lib/views/home/search/widgets/search_result_item.dart index 11e35dd..d187b9a 100644 --- a/lib/views/home/search/widgets/search_result_item.dart +++ b/lib/views/home/search/widgets/search_result_item.dart @@ -15,7 +15,7 @@ import 'package:didvan/views/widgets/skeleton_image.dart'; import 'package:flutter/material.dart'; import 'package:persian_number_utility/persian_number_utility.dart'; import 'package:provider/provider.dart'; -import 'package:didvan/services/app_initalizer.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class SearchResultItem extends StatelessWidget { final OverviewData item; @@ -90,7 +90,7 @@ class SearchResultItem extends StatelessWidget { return; } if (_targetPageRouteName == null && item.link != null) { - openInWebView( + launchUrlString( '${item.link!}?accessToken=${RequestService.token}', mode: LaunchMode.inAppWebView, ); diff --git a/lib/views/home/widgets/categories.dart b/lib/views/home/widgets/categories.dart index b8639e7..c350827 100644 --- a/lib/views/home/widgets/categories.dart +++ b/lib/views/home/widgets/categories.dart @@ -6,14 +6,14 @@ import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.dart'; -import 'package:didvan/services/app_initalizer.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class MainCategories extends StatelessWidget { const MainCategories({super.key}); void _onTap(String link, BuildContext context) { if (link.startsWith('http')) { - openInWebView( + launchUrlString( '$link?accessToken=${RequestService.token}', mode: LaunchMode.inAppWebView, ); diff --git a/lib/views/podcasts/studio_details/widgets/studio_details_widget.dart b/lib/views/podcasts/studio_details/widgets/studio_details_widget.dart index 34f106c..1a5f177 100644 --- a/lib/views/podcasts/studio_details/widgets/studio_details_widget.dart +++ b/lib/views/podcasts/studio_details/widgets/studio_details_widget.dart @@ -17,7 +17,7 @@ import 'package:didvan/views/widgets/state_handlers/state_handler.dart'; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; import 'package:provider/provider.dart'; -import 'package:didvan/services/app_initalizer.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class StudioDetailsWidget extends StatelessWidget { final void Function(int id, bool value) onMarkChanged; @@ -65,7 +65,7 @@ class StudioDetailsWidget extends StatelessWidget { key: ValueKey(state.studio.id), data: state.studio.description, onAnchorTap: (href, _, __) => - openInWebView(href!), + launchUrlString(href!), style: { '*': Style( direction: TextDirection.rtl, diff --git a/lib/views/profile/profile.dart b/lib/views/profile/profile.dart index c391646..4d3936b 100644 --- a/lib/views/profile/profile.dart +++ b/lib/views/profile/profile.dart @@ -22,7 +22,7 @@ import 'package:didvan/views/widgets/state_handlers/state_handler.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.dart'; -import 'package:didvan/services/app_initalizer.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class ProfilePage extends StatefulWidget { const ProfilePage({Key? key}) : super(key: key); @@ -222,7 +222,7 @@ class _ProfilePageState extends State { icon: DidvanIcons.info_circle_regular, title: 'معرفی دیدوان', onTap: () => - openInWebView('https://didvan.app/#info'), + launchUrlString('https://didvan.app/#info'), ), const DidvanDivider(), MenuOption( @@ -338,7 +338,7 @@ class _ProfilePageState extends State { MenuOption( icon: DidvanIcons.alert_regular, title: 'حریم خصوصی', - onTap: () => openInWebView( + onTap: () => launchUrlString( 'https://didvan.app/terms-of-use#privacy', ), ), diff --git a/lib/views/web/web_view.dart b/lib/views/web/web_view.dart index f1ac75c..d994d0e 100644 --- a/lib/views/web/web_view.dart +++ b/lib/views/web/web_view.dart @@ -3,7 +3,7 @@ import 'package:didvan/constants/assets.dart'; import 'package:didvan/views/widgets/didvan/text.dart'; import 'package:flutter/material.dart'; -import 'package:webview_flutter/webview_flutter.dart'; +// import 'package:webview_flutter/webview_flutter.dart'; class WebView extends StatefulWidget { final String src; @@ -14,75 +14,78 @@ class WebView extends StatefulWidget { } class _WebViewState extends State { - late WebViewController controller; + // late WebViewController controller; bool loading = true; int progress = 0; - @override - void initState() { - controller = WebViewController() - ..setJavaScriptMode(JavaScriptMode.unrestricted) - ..setNavigationDelegate( - NavigationDelegate( - onProgress: (int progress) { - // Update loading bar. - setState(() { - this.progress = progress; - }); - }, - onPageStarted: (String url) {}, - onPageFinished: (String url) async { - await Future.delayed(const Duration(seconds: 2)); - setState(() { - if (progress == 100) loading = false; - }); - }, - onHttpError: (HttpResponseError error) {}, - onWebResourceError: (WebResourceError error) { - // navigatorKey.currentState!.pop(); - }, - onNavigationRequest: (NavigationRequest request) { - // if (request.url.startsWith('https://www.youtube.com/')) { - // return NavigationDecision.prevent; - // } - return NavigationDecision.navigate; - }, - ), - ) - ..loadRequest(Uri.parse(widget.src)); - super.initState(); - } + + // @override + // void initState() { + // controller = WebViewController() + // ..setJavaScriptMode(JavaScriptMode.unrestricted) + // ..setNavigationDelegate( + // NavigationDelegate( + // onProgress: (int progress) { + // // Update loading bar. + // setState(() { + // this.progress = progress; + // }); + // }, + // onPageStarted: (String url) {}, + // onPageFinished: (String url) async { + // await Future.delayed(const Duration(seconds: 2)); + // setState(() { + // if (progress == 100) loading = false; + // }); + // }, + // onHttpError: (HttpResponseError error) {}, + // onWebResourceError: (WebResourceError error) { + // // navigatorKey.currentState!.pop(); + // }, + // onNavigationRequest: (NavigationRequest request) { + // // if (request.url.startsWith('https://www.youtube.com/')) { + // // return NavigationDecision.prevent; + // // } + // return NavigationDecision.navigate; + // }, + // ), + // ) + // ..loadRequest(Uri.parse(widget.src)); + // super.initState(); + // } @override Widget build(BuildContext context) { return WillPopScope( onWillPop: () async { - if (await controller.canGoBack()) { - await controller.goBack(); - return false; - } else { - return true; - } + // if (await controller.canGoBack()) { + // await controller.goBack(); + // return false; + // } else { + return true; + // } }, child: Scaffold( - appBar: AppBar( - title: const Padding( - padding: EdgeInsets.only(top: 12.0), - child: DidvanText( - 'بازگشت به دیدوان', - fontSize: 18, + appBar: AppBar( + title: const Padding( + padding: EdgeInsets.only(top: 12.0), + child: DidvanText( + 'بازگشت به دیدوان', + fontSize: 18, + ), ), + toolbarHeight: 32, ), - toolbarHeight: 32, - ), - body: loading - ? Center( - child: Image.asset( - Assets.loadingAnimation, - width: 60, - height: 60, - ), - ) - : WebViewWidget(controller: controller), - )); + body: + // loading + // ? + Center( + child: Image.asset( + Assets.loadingAnimation, + width: 60, + height: 60, + ), + ) + // : WebViewWidget(controller: controller), + )); } } diff --git a/lib/views/widgets/didvan/page_view.dart b/lib/views/widgets/didvan/page_view.dart index 0ee87f8..6ea82f5 100644 --- a/lib/views/widgets/didvan/page_view.dart +++ b/lib/views/widgets/didvan/page_view.dart @@ -24,7 +24,7 @@ import 'package:didvan/views/widgets/item_title.dart'; import 'package:didvan/views/widgets/skeleton_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; -import 'package:didvan/services/app_initalizer.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class DidvanPageView extends StatefulWidget { final List items; @@ -310,7 +310,7 @@ class _DidvanPageViewState extends State { ), ); } else { - openInWebView(href); + launchUrlString(href, mode: LaunchMode.inAppWebView); } }, style: { diff --git a/lib/views/widgets/overview/multitype.dart b/lib/views/widgets/overview/multitype.dart index fa713f4..fe96514 100644 --- a/lib/views/widgets/overview/multitype.dart +++ b/lib/views/widgets/overview/multitype.dart @@ -20,6 +20,7 @@ import 'package:flutter/material.dart'; import 'package:persian_number_utility/persian_number_utility.dart'; import 'package:provider/provider.dart'; import 'package:didvan/services/app_initalizer.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class MultitypeOverview extends StatelessWidget { final OverviewData item; @@ -106,7 +107,7 @@ class MultitypeOverview extends StatelessWidget { return; } if (_targetPageRouteName == null && item.link != null) { - openInWebView( + launchUrlString( '${item.link!}?accessToken=${RequestService.token}', mode: LaunchMode.inAppWebView, ); diff --git a/pubspec.lock b/pubspec.lock index 1dbcbfa..13ac533 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1314,38 +1314,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.1" - webview_flutter: - dependency: "direct main" - description: - name: webview_flutter - sha256: "6869c8786d179f929144b4a1f86e09ac0eddfe475984951ea6c634774c16b522" - url: "https://pub.dev" - source: hosted - version: "4.8.0" - webview_flutter_android: - dependency: transitive - description: - name: webview_flutter_android - sha256: "0d21cfc3bfdd2e30ab2ebeced66512b91134b39e72e97b43db2d47dda1c4e53a" - url: "https://pub.dev" - source: hosted - version: "3.16.3" - webview_flutter_platform_interface: - dependency: transitive - description: - name: webview_flutter_platform_interface - sha256: d937581d6e558908d7ae3dc1989c4f87b786891ab47bb9df7de548a151779d8d - url: "https://pub.dev" - source: hosted - version: "2.10.0" - webview_flutter_wkwebview: - dependency: transitive - description: - name: webview_flutter_wkwebview - sha256: "7affdf9d680c015b11587181171d3cad8093e449db1f7d9f0f08f4f33d24f9a0" - url: "https://pub.dev" - source: hosted - version: "3.13.1" win32: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 41033d7..1337d75 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -57,12 +57,12 @@ dependencies: bot_toast: ^4.0.1 flutter_secure_storage: ^8.0.0 flutter_html: ^3.0.0-alpha.2 - # url_launcher: ^6.0.18 + url_launcher: ^6.0.18 audio_video_progress_bar: ^2.0.0 image_cropper: ^1.5.0 firebase_core: ^3.1.0 firebase_messaging: ^15.0.1 - webview_flutter: ^4.8.0 + # webview_flutter: ^4.8.0 expandable_bottom_sheet: ^1.1.1+1 permission_handler: ^11.0.0 # better_player: @@ -92,7 +92,7 @@ dependencies: mime: ^1.0.2 path: any flutter_cache_manager: any - url_launcher: ^6.3.0 + # url_launcher: ^6.3.0 dev_dependencies: flutter_test: