0

我正在使用Flutter Webview插件开发 Flutter webview 应用程序。

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            body: SafeArea(
              child : const WebView(
                initialUrl: 'https://google.com',
                javascriptMode: JavascriptMode.unrestricted,
              ),
            )
        )
    );
  }
}

但是,如果打开的网页中的任何链接是应用程序链接,例如:fb://profile,我会得到 net::ERR_UNKNOWN_URL_SCHEME。

在android中,我发现解决方案是覆盖这里提到的shouldOverrideUrlLoading ,但是我应该怎么做呢?

我正在尝试这里提到的解决方案。

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            body: SafeArea(
              child : const WebView(
                initialUrl: 'https://google.com',
                javascriptMode: JavascriptMode.unrestricted,
                navigationDelegate: (NavigationRequest request)  {
                  if (request.url.contains("mailto:")) {
                    launch(request.url);
                    return NavigationDecision.navigate;
                  }
                },
              ),
            )
        )
    );
  }
}

但它会抛出错误,比如

错误:不是常量表达式。if (request.url.contains("mailto:")) {

4

1 回答 1

1

您可以在步骤 1 下方复制粘贴运行完整代码
:您可以从步骤 2 中删除const关键字const WebView
:您可以使用NavigationDecision.prevent

工作演示

在此处输入图像描述

完整代码

导入“包:颤振/material.dart”;导入'包:webview_flutter/webview_flutter.dart';导入“包:url_launcher/url_launcher.dart”;

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            body: SafeArea(
      child: WebView(
        initialUrl:
            'https://google.com', //'''https://www.scottseverance.us/mailto.html',
        javascriptMode: JavascriptMode.unrestricted,
        navigationDelegate: (NavigationRequest request) {
          print(request.url);
          if (request.url.contains("mailto:")) {
            launch(request.url);
            return NavigationDecision.prevent;
          } else {
            return NavigationDecision.navigate;
          }
        },
      ),
    )));
  }
}
于 2021-01-25T09:16:24.597 回答