如何从我的Flutter代码中打开Web浏览器(URL)?

时间:2017-03-31 20:19:02

标签: flutter

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

10 个答案:

答案 0 :(得分:55)

现在实现为插件

https://pub.dartlang.org/packages/url_launcher

示例:

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';
  }
}

特殊字符:

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

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

答案 1 :(得分:5)

[注意:UrlLauncher不再存在。请参阅解决方案的已接受答案。]

您可以使用UrlLauncher执行以下操作:

new FlatButton(
  textColor: style.mainTheme.accentColor,
  child: new Text(signInLabel, style: style.largeText),
  onPressed: () {
    UrlLauncher.launch('http://www.webpage.com');
  }
);

答案 2 :(得分:5)

如果您的目标是 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
}

答案 3 :(得分:3)

使用URL启动器插件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);
}

enter image description here

答案 4 :(得分:1)

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

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  url_launcher: ^5.0.2
  flutter:
    sdk: flutter

此答案也适用于绝对初学者:他们正在思考抖动的SDK之后。 不,那是一个失败。这些包是多余的,不在随风飘扬的SDK中。这些是辅助软件包(单个小型框架帮助程序)。

答案 5 :(得分:1)

对于Flutter:

如GünterZöchbauer的above所述

对于Flutter Web:

import 'dart:html' as html;

然后使用:

html.window.open(url, name);

如果flutter clean无法解析,请确保您运行import

答案 6 :(得分:1)

最好的方法是使用url_launcher软件包。

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

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';
  }
}

输出: enter image description here

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

答案 7 :(得分:1)

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

await launch(URL, forceSafariVC: false);

答案 8 :(得分:0)

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

以上UrlLauncher不再可用。

答案 9 :(得分:0)

使用url_launcher软件包。它将为您完成