Inicialização do aplicativo em Flutter Web com animação de carregamento
Flutter web é ótimo uma vez carregado, até o momento em que é carregado, por padrão, eles mostram uma tela branca que dá uma sensação muito lenta. Portanto, se você estiver na mesma página em que estou, podemos começar.
Exemplo de gif de como será.
Código inicial que está dentro de “/web/index.html”
<!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="A new Flutter project."> <!-- 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="flutter_test"> <link rel="apple-touch-icon" href="icons/Icon-192.png"> <!-- Favicon --> <link rel="icon" type="image/png" href="favicon.png"/> <title>Flutter Test</title> <link rel="manifest" href="manifest.json"> <script> // The value below is injected by flutter build, do not touch. var serviceWorkerVersion = null; </script> <!-- This script adds the flutter initialization JS code --> <script src="flutter.js" defer></script> </head> <body> <script> window.addEventListener('load', function(ev) { // Download main.dart.js _flutter.loader.loadEntrypoint({ serviceWorker: { serviceWorkerVersion: serviceWorkerVersion, } }).then(function(engineInitializer) { return engineInitializer.initializeEngine(); }).then(function(appRunner) { return appRunner.runApp(); }); }); </script> </body> </html>
Apenas você precisa substituir o código acima pelo código a seguir.
<!DOCTYPE html> <html> <head> <base href="$FLUTTER_BASE_HREF"> <meta charset="UTF-8"> <meta content="IE=Edge" http-equiv="X-UA-Compatible"> <meta name="description" content="A new Flutter project."> <!-- 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="flutter_test"> <link rel="apple-touch-icon" href="icons/Icon-192.png"> <!-- Favicon --> <link rel="icon" type="image/png" href="favicon.png"/> <title>Flutter Test</title> <link rel="manifest" href="manifest.json"> <script> // The value below is injected by flutter build, do not touch. var serviceWorkerVersion = null; </script> <!-- This script adds the flutter initialization JS code --> <script src="flutter.js" defer></script> </head> <body> <style> body { background-color: #FFFFFF; } </style> <div> <style> @keyframes fadein { 0% { opacity: 0 } to { opacity: 1 } } .container { align-items: center; display: flex; justify-content: space-between; position: relative; top: 1px; margin: 0 auto; max-width: calc(1280px - 100px); width: calc(100% - 24px*2); } .container p { max-width: 1200px; margin: 0; margin-right: 50px; color: #4a4a4a; font-size: 16px; font-family: "Roboto", sans-serif; line-height: 1.5; } p a { color: #0468d7; text-decoration: none; } </style> </div> <script> </script> <!-- Loading indicator --> <div id="loading"> <style> body { inset: 0; overflow: hidden; margin: 0; padding: 0; position: fixed; } #loading { align-items: center; display: flex; height: 100%; justify-content: center; width: 100%; } #loading img { animation: 1s ease-in-out 0s infinite alternate breathe; opacity: .66; transition: opacity .4s; } #loading.main_done img { opacity: 1; } #loading.init_done img { animation: .33s ease-in-out 0s 1 forwards zooooom; opacity: .05; } @keyframes breathe { from { transform: scale(1) } to { transform: scale(0.95) } } @keyframes zooooom { from { transform: scale(1) } to { transform: scale(10) } } </style> <img src="icons/Icon-192.png" alt="Loading indicator..." /> </div> <script> window.addEventListener('load', function () { var loading = document.querySelector('#loading'); _flutter.loader.loadEntrypoint({ serviceWorker: { serviceWorkerVersion: serviceWorkerVersion, } }).then(function (engineInitializer) { loading.classList.add('main_done'); return engineInitializer.initializeEngine(); }).then(function (appRunner) { loading.classList.add('init_done'); return appRunner.runApp(); }).then(function (app) { // Wait a few milliseconds so users can see the "zoooom" animation // before getting rid of the "loading" div. window.setTimeout(function () { loading.remove(); }, 200); }); }); </script> </body> </html>
E pronto, você está livre da velha e chata página em branco durante o carregamento.
Você pode definir seu próprio logotipo substituindo “/web/icon/Icon-192.png”
e você pode substituir também o favicon “/web/fevicon.png”
Obrigado e siga-me para mais conteúdo sobre flutter e desenvolvimento de software