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

时间:2019-05-20 12:05:47

标签: dart flutter flutter-web

我有一个使用Flutter Web创建的简单Web应用程序。我想知道如何在颤动的Web应用程序中的external urlnew tab中打开新的the same tab。说我想打开网址https://stackoverflow.com/questions/ask

6 个答案:

答案 0 :(得分:7)

一种简单的方法是只创建一个按钮并使用dart:html的{​​{3}}方法:

import 'dart:html' as html;

// ...

html.window.open('https://stackoverflow.com/questions/ask', 'new tab');

name参数(我留为'new tab')指的是新标签页的窗口名称,您可以从window.open()中了解更多信息。

答案 1 :(得分:2)

我想你想要这个:

import 'dart:js' as js;

.
.
.

FlatButton(
  child: Text("Button"),
  onPressed: () {
    js.context.callMethod("open", ["https://stackoverflow.com/questions/ask"]);
  },
)

答案 2 :(得分:2)

扩展@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
  },
)

说明:- flutter 的 dart:js 包提供了调用特定于 web 的函数的功能,例如 flutter 中的 open 函数,列表中的所有字符串都是传递给函数引用 {{3} }.

因此,如果您想打开新标签,则不需要传递 seconds 参数,但如果您想在同一标签中打开,则将 _self 作为第二个参数传递。

答案 3 :(得分:1)

您可以使用url_launcher plugin

然后在您的代码中

import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.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 canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}

示例来自打包站点

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

在这里https://stackoverflow.com/a/56656885/361832

回答

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);