David PHAM-VAN

Add loader

@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 18
19 <meta charset="UTF-8"> 19 <meta charset="UTF-8">
20 <meta content="IE=Edge" http-equiv="X-UA-Compatible"> 20 <meta content="IE=Edge" http-equiv="X-UA-Compatible">
21 - <meta name="description" content="A new Flutter project."> 21 + <meta name="description" content="Pdf Printing Demo">
22 22
23 <!-- iOS meta tags & icons --> 23 <!-- iOS meta tags & icons -->
24 <meta name="apple-mobile-web-app-capable" content="yes"> 24 <meta name="apple-mobile-web-app-capable" content="yes">
@@ -31,8 +31,83 @@ @@ -31,8 +31,83 @@
31 31
32 <title>Flutter PDF Demo</title> 32 <title>Flutter PDF Demo</title>
33 <link rel="manifest" href="manifest.json"> 33 <link rel="manifest" href="manifest.json">
  34 + <style type="text/css">
  35 + #loading {
  36 + position: absolute;
  37 + width: 400px;
  38 + height: 300px;
  39 + top: 50%;
  40 + left: 50%;
  41 + margin: -200px 0 0 -200px;
  42 + text-align: center;
  43 + font-family: sans-serif
  44 + }
  45 +
  46 + #progress {
  47 + margin-top: 20px;
  48 + height: 10px;
  49 + background-color: #ebebeb;
  50 + }
  51 +
  52 + #progress div {
  53 + background-color: #08a5d7;
  54 + height: 100%;
  55 + width: 0;
  56 + transition: width ease-out 300ms;
  57 + }
  58 +
  59 + @media (prefers-color-scheme: dark) {
  60 + body {
  61 + background-color: black;
  62 + }
  63 +
  64 + #loading {
  65 + color: white;
  66 + }
  67 +
  68 + #progress {
  69 + background-color: #393939;
  70 + }
  71 + }
  72 + </style>
34 </head> 73 </head>
  74 +
35 <body> 75 <body>
36 - <script src="flutter_bootstrap.js" async></script> 76 + <div id="loading">
  77 + <img src="icons/Icon-192.png" width="192" height="192" alt="">
  78 + <h1>Flutter PDF Demo</h1>
  79 + <div id="progress">
  80 + <div></div>
  81 + </div>
  82 + </div>
  83 + <script>
  84 + {{flutter_js}}
  85 + {{flutter_build_config}}
  86 +
  87 + function progress(value) {
  88 + let el = document.getElementById("progress");
  89 + if (el) el.firstElementChild.style.width = value + "%";
  90 + }
  91 +
  92 + window.addEventListener('load', function (ev) {
  93 + progress(30);
  94 + });
  95 +
  96 +
  97 + window.addEventListener('flutter-first-frame', function () {
  98 + let el = document.getElementById("loading");
  99 + if (el) el.remove();
  100 + });
  101 +
  102 + _flutter.loader.load({
  103 + onEntrypointLoaded: async function (engineInitializer) {
  104 + progress(60);
  105 + const appRunner = await engineInitializer.initializeEngine();
  106 + progress(100);
  107 + await new Promise(resolve => setTimeout(resolve, 200));
  108 + await appRunner.runApp();
  109 + }
  110 + });
  111 + </script>
37 </body> 112 </body>
38 </html> 113 </html>