129

我正在构建一个 Flutter 应用程序,我想在 Web 浏览器或浏览器窗口中打开一个 URL(以响应按钮点击)。我怎样才能做到这一点?

4

9 回答 9

228

TL;博士

这现在实现为插件

const url = "https://flutter.io";
if (await canLaunch(url))
  await launch(url);
else 
  // can't launch url, there is some error
  throw "Could not launch $url";

完整示例:

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

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

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

在 pubspec.yaml

dependencies:
  url_launcher: ^5.7.10

特殊的角色:

如果该url值包含现在在 URL 中允许的空格或其他值,请使用

Uri.encodeFull(urlString)Uri.encodeComponent(urlString)改为传递结果值。

于 2017-05-10T10:07:51.377 回答
19

如果您的目标是 sdk 30 或更高版本canLaunch,由于包可见性更改,默认情况下会返回 false:https ://developer.android.com/training/basics/intents/package-visibility

androidManifest.xml您需要添加以下内容

<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https" />
    </intent>
</queries>

那么下面应该词

const url = "https://flutter.io";
if (await canLaunch(url)){
  await launch(url);
}
else {
  // can't launch url
}
于 2021-01-27T09:35:40.523 回答
13

使用 URL Launcher 插件url_launcher

要启动一个网页,让我们成为一个异步函数并执行以下操作:

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

如果我们希望 iOS 和 Android 都在应用程序中打开网页(作为 WebView),那么添加forceWebView: true我们会做这样的事情:

 launchURL(String url) async {
    if (await canLaunch(url)) {
      await launch(url, forceWebView: true);
    } else {
      throw 'Could not launch $url';
    }
 }
   

并这样称呼它

onTap: () {
    const url = 'https://google.com';
    launchURL(url);
}

在此处输入图像描述

于 2020-07-25T08:39:58.997 回答
11

对于颤振:

如上所述 Günter Zöchbauer

对于 Flutter Web:

import 'dart:html' as html;

然后使用:

html.window.open(url, name);

flutter clean如果import没有解决,请确保您运行。

于 2019-06-30T06:29:11.700 回答
9

对于那些想要使用 url_launcher 实现 LAUNCH BROWSER AND EXIT APP 的人。记得使用 (forceSafariVC: false) 在手机默认浏览器中打开网址。否则,启动的浏览器将与您的 APP 一起退出。

await launch(URL, forceSafariVC: false);
于 2021-03-25T07:57:38.463 回答
5

最好的方法是使用url_launcher包。

在您的文件中添加url_launcher作为依赖项。pubspec.yaml

dependencies:
  url_launcher: ^5.7.10

如何使用它的一个例子:

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

void main() {
  runApp(
    MaterialApp(
        home: Scaffold(
      appBar: AppBar(title: Text('Flutter is beautiful'),),
      body: Center(
        child: RaisedButton(
          onPressed: _launchURL,
          child: Text('Show Flutter homepage'),
        ),
      ),
    )),
  );
}

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

输出 : 在此处输入图像描述

启动方法接受一个包含 URL 的字符串参数。默认情况下,Android 在处理 URL 时会打开浏览器。您可以传递forceWebView: true参数来告诉插件打开WebView 。如果您对包含 JavaScript 的页面的 URL 执行此操作,请确保传入enableJavaScript: true,否则启动方法将无法正常工作。在 iOS 上,默认行为是打开应用程序内的所有 Web URL。其他所有内容都被重定向到应用程序处理程序。

于 2020-12-10T15:10:39.653 回答
4

如果您想使用 url_launcher,请以这种形式使用它

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  url_launcher: ^5.0.2
  flutter:
    sdk: flutter

这个答案也适用于绝对的初学者:他们在 Flutter sdk 背后思考。不,那是失败。这些包是额外的,而不是在颤振的 Sdk 中。这些是辅助包(单个小型框架助手)。

于 2019-03-20T21:55:33.620 回答
3

经过一番搜索,可以通过此处列出的说明解决此问题:https ://groups.google.com/forum/#!topic/flutter-dev/J3ujgdOuG98

以上UrlLauncher不再可用。

于 2017-05-10T10:27:03.917 回答
0

使用url_launcher包。它会为你做到这一点

于 2020-12-02T18:08:47.363 回答