Flutter (веб) - как перезагрузить Flutter PWA - PullRequest
0 голосов
/ 26 мая 2020

Это аналогичный вопрос (с неправильным названием): Flutter Web - Как перезагрузить текущую активную страницу

Запуск веб-приложения Flutter как PWA Мне нужно разрешить пользователям запускать refre sh и, таким образом, обновите (веб-приложение).

К сожалению, import 'dart:html' as html; больше не разрешено при наличии одинаковой кодовой базы для веб-приложений и нативных мобильных приложений. Таким образом, следующий код не подходит:

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

Каков правильный подход?

РЕДАКТИРОВАТЬ: мне удалось использовать 'dart: js' в той же кодовой базе для pwa и мобильный с использованием условного импорта. Это означает, что я могу вызвать JavaScript из кода Flutter. К сожалению, location.reload(true); не перезагружает PWA.

В идеале у меня был бы подход Flutter для перезагрузки / обновления PWA или JavaScript обходной путь.

EDIT2: Вся проблема заключается в обработке PWA перезагрузки кнопки / окна refre sh .

К сожалению, skipWaiting () сервис-воркера может быть вызван только из сервис-воркера (https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#skip_the_waiting_phase)

Правильный подход к отправке сообщения skipWaiting на новый экземпляр сервис-воркера.

Однако skipWaiting еще не полностью поддерживается в некоторых браузерах (iOS?), Поэтому более безопасный подход сводится к тому, чтобы просто отменить регистрацию рабочего ...

В итоге я использовал следующее, чтобы остановить worker и перезагрузить.

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

Связано:

Пропуск работника службы доступа Ожидание изнутри сборки приложения с помощью Webpack + Workbox

https://medium.com/@nekrtemplar / самоуничтожение-serviceworker-73d62921d717

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

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

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

PWA будет обновляться после закрытия и повторного открытия веб-страницы / браузера!

0 голосов
/ 26 мая 2020

Обходной путь - перейти к маршруту точки входа вашего приложения '/'

`Navigator.of(context).pushNamedAndRemoveUntil(
              '/,
              (Route<dynamic> route) => false
            );`
...