Flutter:Web查看应用程序仅在该应用程序中运行一个特定的网站,其他在手机的本地浏览器中打开

时间:2019-03-12 15:46:22

标签: webview dart flutter uiwebview android-webview

我在Flutter中有一个Web视图应用程序。插件/软件包为“ flutter_webview_plugin”。在Webview脚手架中,我具有url ='www.google.com'。现在,我希望在手机的本地浏览器中打开任何不包含“ google.com”的网址。

如果URL不包含“ google.com”,也许我可以限制Web视图插件

请让我知道如何实现这一目标。

这是我的代码:

 WebviewScaffold(
    url: "http://www.google.com")

进一步澄清(按GünterZöchbauer的要求):我有一个Web视图应用程序。所以我拥有的网站上有很多链接。我不希望将除域链接以外的链接加载到webview应用程序中。我希望它在外部打开。

1 个答案:

答案 0 :(得分:0)

要在外部浏览器中启动URL,请使用https://pub.dartlang.org/packages/url_launcher软件包。

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

void main() {
  runApp(Scaffold(
    body: Center(
      child: RaisedButton(
        onPressed: _launchURL,
        child: Text('Show Flutter homepage'),
      ),
    ),
  ));
}

_launchURL() async {
  const url = 'https://flutter.io';
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}

您只需要检查URL内容并调用_launchURL或显示嵌入式Web视图。

更新(根据下面的评论)

https://github.com/flutter/plugins/pull/1323(适用于iOS)和https://github.com/flutter/plugins/pull/1236(适用于Android)增加了指定导航委托的功能。

https://github.com/amirh/plugins/blob/ad309267f50f924f9e4620f2126e72a2686c88a0/packages/webview_flutter/example/lib/main.dart#L56-L60显示了一个示例

    return WebView(
      ...
      navigationDelegate: (NavigationRequest request) {
        if (request.url.startsWith('https://www.youtube.com/')) {
          print('blocking navigation to $request}');
          return NavigationDecision.prevent;
        }
        print('allowing navigation to $request');
        return NavigationDecision.navigate;
      },