当前位置: 首页 > 知识库问答 >
问题:

颤振(腹板)-如何重新加载颤振PWA

秦飞航
2023-03-14

这是一个类似的问题(标题错误):Flutter Web-如何重新加载当前活动页面

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

不幸的是,当web和移动本机应用程序具有相同的代码库时,不再允许将“dart:html”导入为HTML;。因此下面的代码不是选项:

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

正确的做法是什么?

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

理想情况下,我将使用Flutter方法来实现PWA重新加载/更新或JavaScript变通方法。

编辑2:整个问题都在刷新按钮/窗口重新加载的PWA处理范围内。

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

正确的方法是将skipWaiting消息发送到服务工作者的新实例。

然而,某些浏览器(iOS?)还不完全支持skipWaiting所以更安全的方法是取消工作人员的注册。。。

最后我使用following来停止worker并重新加载。

if ('serviceWorker' in navigator) {
   navigator.serviceWorker.getRegistration().then(swr => {swr.unregister().then(
     () => {location.reload(true)}
   )});
} else {location.reload(true)}

相关:

Access service worker skipWaiting从使用WebPack+Workbox的App build内生成

https://medium.com/@nekrtemplar/self-destroying-serviceworker-73D62921D717

https://redfin.engineering/How-to-fix-the-refresh-button-when-using-service-workers-A8E27AF6DF68

https://deanhume.com/display-a-new-version-available-progressive-web-app/

共有2个答案

夏侯衡
2023-03-14

一旦网页/浏览器关闭并重新打开,PWA将得到更新!

华易安
2023-03-14

一个解决办法是导航到您的应用程序入口点路由'/'

`Navigator.of(context).pushNamedAndRemoveUntil(
              '/,
              (Route<dynamic> route) => false
            );`
 类似资料:
  • 目前我正在尝试颤振网页,我需要在颤振主频道工作。但是,后来我需要继续我的其他项目。在他们身上,我正在研究颤振稳定通道。 但是,每当我使用命令“flutter channel stable”或“fluter channel master”切换我的flutter通道时,它每次都会重新下载sdk和其他工具。 目前,我已经下载了稳定的颤振sdk和稳定的dart sdk。 我已将它们移动到“FlutterS

  • 我可以使用“startAfter”和“limit”进行分页,但它有错误。 例如,在Firestore DB中,我有7条记录: 当页面大小为5时,第一页就可以了,因为我使用了: 它给了我1-5项。 当它加载第二页时,我使用了: 问题是第二页结果只有item7,item6消失了。“开始”也有同样的问题。 真希望它有“抵消”功能,有人有解决办法吗?

  • 文件可以从相对于省道脚本文件的目录中读取,简单地称为。 但是,在IDE中运行的颤振测试无法读取该文件。 加载为资源(不是,因为我不想在应用程序中捆绑测试数据文件)在测试中也不起作用。 在flatter中读取文件的好方法是什么(对于命令行测试和IDE测试)? 运行非常快。然而,IntellijIDE内部的测试速度非常慢,但它可以设置调试断点并单步执行和查看变量。所以这两种测试都非常有用。

  • Xcode的输出:在文件中包含从 /Users/dani/development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.3/ios/Classes/FLTURLLauncherPlugin.m: 7: /Users/dani/development/flutter/.pub-cache/hosted/pub.dart

  • 当我试图添加google_sign_in时,flutter_authcloud_firestore它给我带来了一个错误:” [✓] 颤振(通道稳定,v1.5.4-hotfix.2,Linux上,locale en_US.UTF-8)•颤振版本1.5。4-hotfix。2 at/home/ramu/Downloads/tools/颤振•框架版本7a4c33425d(4周前),2019-04-29 1

  • 我想问一下IOS的实施情况 当前场景:基本上,我已经在android平台上开发了该应用程序,现在我想将其转换为IOS平台。由于这是我的第一个应用程序,我真的需要一些有经验的声音来解决我面临的一些问题。 问题: 1-是否有任何简单的方法来检测当前使用的Widget是Android/IOS平台?我们如何才能确定特定的小部件是Android平台的,并且在IOS平台上不工作,反之亦然。 2 -如果我们以某

  • 每当我尝试使用AdMob加载广告时,我都会得到以下错误

  • 我可以从flutter应用程序的assets/Images目录加载图像,但当从flutter包的assets/Images目录加载相同的图像时,我会得到以下错误: