小编Rad*_*dek的帖子

Flutter (web) - 如何重新加载 Flutter PWA

这是类似的问题(标题错误):Flutter Web - How to reload current Active Page

将 Flutter Web 应用程序作为 PWA 运行我需要允许用户启动刷新,从而更新(Web)应用程序。

不幸的import 'dart:html' as html;是,当 Web 和移动本机应用程序具有相同的代码库时,不再被允许。所以下面的代码不是选项:

  RaisedButton(
    child: Text("Update me"),
    onPressed: () {
      if (kIsWeb) html.window.location.reload();
    },
  ),
Run Code Online (Sandbox Code Playgroud)

正确的做法是什么?

编辑:我已经设法使用条件导入在 pwa 和移动设备的相同代码库中使用“dart:js”。这意味着我可以从 Flutter 代码中调用 JavaScript。不幸的location.reload(true);是不会重新加载 PWA。

理想情况下,我会将 Flutter 方法用于 PWA 重新加载/更新或 JavaScript 解决方法。

EDIT2:整个问题都在刷新按钮/窗口重新加载的 PWA 处理中。

不幸的是,服务工作者的 skipWaiting() 只能从服务工作者内部调用(https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#skip_the_waiting_phase

正确的方法应该是将 skipWaiting 消息发送到 service worker 的新实例。

然而,某些浏览器(iOS?)尚未完全支持skipWaiting,因此更安全的方法接缝只是取消注册工人...

我最终使用以下来停止工作人员并重新加载。

if ('serviceWorker' in navigator) {
   navigator.serviceWorker.getRegistration().then(swr => {swr.unregister().then(
     () => {location.reload(true)} …
Run Code Online (Sandbox Code Playgroud)

flutter progressive-web-apps

6
推荐指数
1
解决办法
2634
查看次数

标签 统计

flutter ×1

progressive-web-apps ×1