这是类似的问题(标题错误):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)