| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | <!DOCTYPE html><html><head>  <!--    If you are serving your web app in a path other than the root, change the    href value below to reflect the base path you are serving from.    The path provided below has to start and end with a slash "/" in order for    it to work correctly.    For more details:    * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base    This is a placeholder for base href that will be replaced by the value of    the `--base-href` argument provided to `flutter build`.  -->  <base href="$FLUTTER_BASE_HREF">  <meta charset="UTF-8">  <meta content="IE=Edge" http-equiv="X-UA-Compatible">  <meta name="description" content="Demonstrates how to use the flowy_infra_ui plugin.">  <!-- iOS meta tags & icons -->  <meta name="apple-mobile-web-app-capable" content="yes">  <meta name="apple-mobile-web-app-status-bar-style" content="black">  <meta name="apple-mobile-web-app-title" content="flowy_infra_ui_example">  <link rel="apple-touch-icon" href="icons/Icon-192.png">  <title>flowy_infra_ui_example</title>  <link rel="manifest" href="manifest.json"></head><body>  <!-- This script installs service_worker.js to provide PWA functionality to       application. For more information, see:       https://developers.google.com/web/fundamentals/primers/service-workers -->  <script>    var serviceWorkerVersion = null;    var scriptLoaded = false;    function loadMainDartJs() {      if (scriptLoaded) {        return;      }      scriptLoaded = true;      var scriptTag = document.createElement('script');      scriptTag.src = 'main.dart.js';      scriptTag.type = 'application/javascript';      document.body.append(scriptTag);    }    if ('serviceWorker' in navigator) {      // Service workers are supported. Use them.      window.addEventListener('load', function () {        // Wait for registration to finish before dropping the <script> tag.        // Otherwise, the browser will load the script multiple times,        // potentially different versions.        var serviceWorkerUrl = 'flutter_service_worker.js?v=' + serviceWorkerVersion;        navigator.serviceWorker.register(serviceWorkerUrl)          .then((reg) => {            function waitForActivation(serviceWorker) {              serviceWorker.addEventListener('statechange', () => {                if (serviceWorker.state == 'activated') {                  console.log('Installed new service worker.');                  loadMainDartJs();                }              });            }            if (!reg.active && (reg.installing || reg.waiting)) {              // No active web worker and we have installed or are installing              // one for the first time. Simply wait for it to activate.              waitForActivation(reg.installing ?? reg.waiting);            } else if (!reg.active.scriptURL.endsWith(serviceWorkerVersion)) {              // When the app updates the serviceWorkerVersion changes, so we              // need to ask the service worker to update.              console.log('New service worker available.');              reg.update();              waitForActivation(reg.installing);            } else {              // Existing service worker is still good.              console.log('Loading app from service worker.');              loadMainDartJs();            }          });        // If service worker doesn't succeed in a reasonable amount of time,        // fallback to plaint <script> tag.        setTimeout(() => {          if (!scriptLoaded) {            console.warn(              'Failed to load app from service worker. Falling back to plain <script> tag.',            );            loadMainDartJs();          }        }, 4000);      });    } else {      // Service workers not supported. Just drop the <script> tag.      loadMainDartJs();    }  </script></body></html>
 |