{{flutter_js}} {{flutter_build_config}} const serviceWorkerVersion = '{{flutter_service_worker_version}}'; // 1. Let Flutter handle the service worker registration cleanly via its native loader _flutter.loader.load({ serviceWorkerSettings: { serviceWorkerVersion: serviceWorkerVersion } }); // 2. Safely monitor the registration generated by Flutter without double-registering if ('serviceWorker' in navigator) { navigator.serviceWorker.ready.then((reg) => { // If an updated worker is already waiting in the background if (reg.waiting) { showUpdatePrompt(reg); } // Listen for new updates found while the user has the app open reg.addEventListener('updatefound', () => { const newWorker = reg.installing; if (newWorker) { newWorker.addEventListener('statechange', () => { if (newWorker.state === 'installed' && navigator.serviceWorker.controller) { showUpdatePrompt(reg); } }); } }); }); // Guard against infinite reload loops when the controller shifts let refreshing = false; navigator.serviceWorker.addEventListener('controllerchange', () => { if (!refreshing) { refreshing = true; window.location.reload(); } }); } function showUpdatePrompt(reg) { if (confirm('A new version of MIH is available. Refresh now to update?')) { reg.unregister().then(function () { window.location.reload(); // Unregister and reload to force clear the browser's cache }); } }