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

Set*_*add 39 flutter

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

Gün*_*uer 73

现在将其实现为插件

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';
  }
}
Run Code Online (Sandbox Code Playgroud)

特殊字符:

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

Uri.encodeFull(urlString)或者Uri.encodeComponent(urlString)传递结果值.

  • 很好的解决方案〜自从启动以来只需更新一点即可,并且 canLaunch 现已弃用。Future<bool> launchURL(url) async { if (await canLaunchUrl(url)) { 等待 launchUrl(url); } print("启动 URL: $url"); 返回真;} else { print('无法启动 $url'); 返回假;} } (3认同)
  • 请注意,您可能需要创建一个新的flutter项目并复制Flutter特定的东西(`lib`,`pubspec.yaml`等),或者反过来更新旧项目中特定于平台的文件夹以使其工作. (2认同)
  • 注意:不要忘记在pubspec.yaml中添加url_launcher:^ 3.0.2 (2认同)
  • 如何在 url_launcher 插件不可用的情况下打开 flutter_web 的链接? (2认同)

Kab*_*uda 18

最好的方法是使用url_launcher包。

将url_launcher添加为文件中的依赖项pubspec.yaml。

dependencies:
  url_launcher: 
Run Code Online (Sandbox Code Playgroud)

如何使用它的示例:

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 canLaunchUrl(Uri.parse(url))) {
    await launchUrl(Uri.parse(url));
  } else {
    throw 'Could not launch $url';
  }
}
Run Code Online (Sandbox Code Playgroud)

输出 : 在此输入图像描述

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


And*_*rew 11

如果您的目标是 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>
Run Code Online (Sandbox Code Playgroud)

那么下面应该是

const url = "https://flutter.io";
if (await canLaunch(url)){
  await launch(url);
}
else {
  // can't launch url
}
Run Code Online (Sandbox Code Playgroud)

  • 它应该直接位于 &lt;manifest&gt; 下,因此与 &lt;uses-permissions&gt; 和 &lt;application&gt; 等处于同一级别 (13认同)
  • 您能准确描述 XML 文件中 &lt;queries&gt; 部分的放置位置吗? (5认同)

Roh*_*eja 10

对于颤振:

如所描述的上述由君特Zöchbauer

对于 Flutter Web:

import 'dart:html' as html;
Run Code Online (Sandbox Code Playgroud)

然后使用:

html.window.open(url, name);
Run Code Online (Sandbox Code Playgroud)

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

  • [url_launcher](https://pub.dev/packages/url_launcher) 包现在支持网络 (2认同)

saj*_*jid 9

现在已作为插件实现

    const url = "https://flutter.io";
    final Uri _url = Uri.parse(url);

    await launchUrl(_url,mode: LaunchMode.externalApplication);
Run Code Online (Sandbox Code Playgroud)
 pubspec.yaml 
Add dependencies
Run Code Online (Sandbox Code Playgroud)

依赖项: url_launcher:^6.0.12

输出


Par*_*iya 8

使用 URL Launcher 插件url_launcher

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

launchURL(String url) async {
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
  }
Run Code Online (Sandbox Code Playgroud)

如果我们希望 iOS 和 Android 在应用程序中打开网页(作为 WebView),然后添加forceWebView: true我们将执行以下操作:

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

并这样称呼它

onTap: () {
    const url = 'https://google.com';
    launchURL(url);
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Rea*_*nkm 6

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

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

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


小智 5

如果您想使用 url_launcher,请以此形式使用

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  url_launcher: ^5.0.2
  flutter:
    sdk: flutter
Run Code Online (Sandbox Code Playgroud)

这个答案也适合绝对的初学者:他们正在思考 flutter sdk 的背后。不,那是一次失败。这些软件包是额外的,不在 flutter Sdk 中。这些是辅助包(单个小框架助手)。


Pai*_*ang 5

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

await launch(URL, forceSafariVC: false);
Run Code Online (Sandbox Code Playgroud)