通过单击按钮关闭flutter Web应用程序(flutter PWA)

s6fujrry  于 2023-04-13  发布在  Flutter
关注(0)|答案(2)|浏览(250)

我创建了一个flutter web应用程序,并将其用作我的java-script网站中的PWA,我使用iframe打开了它。
我想通过点击SystemChannels.platform.invokeMethod('SystemNavigator.pop')的按钮来关闭我的PWA。
我试过这段代码,但不起作用:

GestureDetector(
  onTap: () {
    SystemChannels.platform.invokeMethod('SystemNavigator.pop');
  },
  child: Container(padding: const EdgeInsets.all(4), child: Icon(Icons.close, color: BpColors.white, size: 20)),
);

我也试过使用exit(0),但它使网站转到上一页,而不仅仅是关闭PWA。

mwngjboj

mwngjboj1#

这是不可能的关闭Web应用程序的SystemChannels.platform.invokeMethod('SystemNavigator.pop'),因为这只适用于移动的应用程序。无论如何,而不是它,你可以使用window.close()关闭Web应用程序窗口。但不幸的是,它可能无法在某些浏览器,因为他们不允许从JS关闭窗口的安全原因。

import 'dart:html';

/// your another codess

GestureDetector(
  onTap: () {
    window.close();
  },
  child: Container(padding: const EdgeInsets.all(4), child: Icon(Icons.close, color: BpColors.white, size: 20)),
);

顺便说一下,有一个名为flutter_window_close的软件包,你可以试试。
快乐编码...

czq61nw1

czq61nw12#

这对我很有效
close_clicked是我的JavaScript正在监听的事件名称。

import 'dart:html' as html;

import 'package:flutter/material.dart';

class GlobalCloseButton extends NoControllerWidget {
  const GlobalCloseButton({super.key});

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () {
        html.window.parent?.postMessage("close_clicked", "*");
      },
      child: Container(padding: const EdgeInsets.all(4), child: Icon(Icons.close, color: Colors.red, size: 20)),
    );
  }
}

相关问题