Flutter Webview - 在浏览器或窗口中打开外部链接

2024-04-12

我有一个使用 Flutter Webview 制作的 Android 应用程序。当用户单击外部链接时,我希望该链接在浏览器中打开。我该怎么做?

事实上,像 Instagram 那样在窗口中打开外部链接会很好。有没有办法做到这一点?

Edit:

website.com 是我的应用程序的主页。那不是外部链接。我想要的是当尝试打开 website.com 以外的链接时,它会在浏览器或窗口中打开。

主页:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

class Forum extends StatefulWidget {
  @override
  _ForumState createState() => _ForumState();

}

class _ForumState extends State<Forum> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'Forum',
        home: Scaffold(
          body: WebView(initialUrl: "https://website.com",
            javascriptMode: JavascriptMode.unrestricted,
          ),
        )
    );
  }
}

我遇到了完全相同的问题,并且花了我很多钱才解决它。 Akif,即使在你提出问题5个月后,我也会发布解决方案,因为我相信它仍然会帮助很多人。

下面的解决方案是使用 STANDART FLUTTER WEBVIEW 并使用 URL LAUNCHER。

Add the url_launcher and webview_flutter到你的文件pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  
  webview_flutter: ^1.0.5
  url_launcher: ^5.7.10

现在在您的网络视图中它需要包含navigationDelegate

见下文...

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Title Your App',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: Scaffold(
            body: Container(
          child: WebView(
            initialUrl: 'https://website.com',
            javascriptMode: JavascriptMode.unrestricted,
            onWebViewCreated: (WebViewController webViewController) {
              _controller.complete(webViewController);
            },
            navigationDelegate: (NavigationRequest request) {
              if (request.url.startsWith("https://website.com")) {
                return NavigationDecision.navigate;
              } else {
                _launchURL(request.url);
                return NavigationDecision.prevent;
              }
            },
          ),
        )));
  }

  _launchURL(String url) async {
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
  }
}

不要忘记您需要添加 URL LAUNCHER 依赖项。

import 'package:url_launcher/url_launcher.dart';

解释:

此代码使 Web 视图中发出的每个请求都通过以下测试:

  • 如果请求地址以您的 webview 的起始地址开头,它通常会在 webview 内执行。
  • 如果请求地址与您的网络视图的初始地址不同,它会向手机的默认浏览器启动该请求。

我希望它仍然可以帮助您,或者从现在开始可以帮助需要它的人。

Hugs.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter Webview - 在浏览器或窗口中打开外部链接 的相关文章

随机推荐