如何在Flutter网站的新标签页或同一标签页中打开外部网址

Nor*_*ert 2 dart flutter flutter-web

我有一个使用Flutter Web创建的简单Web应用程序。我想知道如何external url在a new tab或在the same tabFlutter Web应用程序中打开新的a 。说我想打开网址/sf/

mah*_*mnj 18

As of url_launcher: ^6.1.0 The plugin has support for webOnlyWindowName property, You can declare a wrapper function below

Future<void> launch(String url, {bool isNewTab = true}) async {
    await launchUrl(
      Uri.parse(url),
      webOnlyWindowName: isNewTab ? '_blank' : '_self',
    );
  }
Run Code Online (Sandbox Code Playgroud)

and use it like this

onTap:(){
   launch('/sf/', isNewTab: true)
}
Run Code Online (Sandbox Code Playgroud)


Phi*_*aro 14

一种简单的方法是创建一个按钮并使用dart:htmlwindow.open()方法:

import 'dart:html' as html;

// ...

html.window.open('https://stackoverflow.com/questions/ask', 'new tab');
Run Code Online (Sandbox Code Playgroud)

name参数-这是我离开的'new tab'-是指新标签的窗口名称,哪些可以借鉴更多的MDN的文档


wz3*_*366 9

https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_web

url_launcher 一直是 android 和 ios 的解决方案,最近它增加了对 web 的支持。

  • @MappaM `webOnlyWindowName:'_self',` 执行此操作。 (6认同)

Tin*_*son 7

您可以使用 url_launcher 插件

然后在你的代码中

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher_string.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 canLaunchUrlString(url)) {
    await launchUrlString(url);
  } else {
    throw 'Could not launch $url';
  }
}
Run Code Online (Sandbox Code Playgroud)

示例取自包网站

  • 我已经尝试过,但它似乎在“flutter web”上对我不起作用 (5认同)
  • _launchURL() 代码有效。这里所需要做的就是按照 https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_web 上的说明进行操作。基本上在 pubspec.yaml 中添加 **两个** url_launcher 和 url_launcher_web 的依赖项。示例:`url_launcher:^5.2.5 url_launcher_web:^0.1.0` (2认同)

Atu*_*ary 7

扩展 @xuyanjun 的答案,当想要打开从 flutter web 到新选项卡的外部链接时,它可以很好地工作。但是,如果您想在当前运行 flutter web 应用程序的同一选项卡中打开指向该网站的外部链接。

那么你可以这样做。

import 'dart:js' as js;
// ...

FlatButton(
  child: Text('Button'),
  onPressed: () {
    js.context.callMethod('open', ['https://blup.in/','_self']); //<= find explanation below
  },
)

Run Code Online (Sandbox Code Playgroud)

说明:- flutter 中的 dart:js 包提供了调用特定于 Web 的函数(例如openflutter 中的函数)的功能,列表中的所有字符串都是传递给函数的参数,请参阅this

因此,如果您想打开新选项卡,则不需要传递秒参数,但如果您想在同一选项卡中打开,则作为_self第二个参数传递。


xuy*_*jun 6

我想你想要这个:

import 'dart:js' as js;

.
.
.

FlatButton(
  child: Text("Button"),
  onPressed: () {
    js.context.callMethod("open", ["/sf/"]);
  },
)
Run Code Online (Sandbox Code Playgroud)

  • 下面是如何在新选项卡或同一选项卡中打开 ```js.context.callMethod('open', ['$url', isNewTab ? '_blank' : '_self']);``` 来源:https:// www.w3schools.com/jsref/met_win_open.asp (4认同)

Dar*_*ski 5

在这里回答/sf/answers/3965981981/

Flutter Web 还不支持插件,因此您必须使用以下替代品dart:html

https://api.dartlang.org/stable/2.4.0/dart-html/Window/open.html window.open(url, 'tab');

或者

https://api.dartlang.org/stable/2.4.0/dart-html/Window/location.html window.location.assign(url);