fixed home

This commit is contained in:
amirrezaghabeli
2026-04-16 09:10:37 +03:30
parent 7ae5c25ebb
commit 41bba5d32c
16 changed files with 83 additions and 53 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -9,6 +9,7 @@ import '../../view_models/home_view_model.dart';
/// Wraps screens that need HomeViewModel /// Wraps screens that need HomeViewModel
Widget homeProvider({required Widget child}) { Widget homeProvider({required Widget child}) {
return ChangeNotifierProvider( return ChangeNotifierProvider(
lazy: true,
create: create:
(context) => HomeViewModel( (context) => HomeViewModel(
homeRepository: context.read<HomeRepository>(), homeRepository: context.read<HomeRepository>(),
+1
View File
@@ -37,6 +37,7 @@ class TendersService {
method: 'GET', method: 'GET',
(json) => TendersResponse.fromJson(json), (json) => TendersResponse.fromJson(json),
); );
print(result);
return result; return result;
} }
+1 -1
View File
@@ -159,7 +159,7 @@ class HomeViewModel with ChangeNotifier {
); );
_currentPage++; _currentPage++;
if (metadata != null && (_currentPage >= metadata.pages!)) { if (metadata != null && (_currentPage >= (metadata.pages ?? 0))) {
_hasMore = false; _hasMore = false;
} }
} else { } else {
+7 -6
View File
@@ -128,10 +128,11 @@ class DesktopHomePage extends StatelessWidget {
iconPath: AssetsManager.arrows, iconPath: AssetsManager.arrows,
title: HomeStrings.tenderSubmitted, title: HomeStrings.tenderSubmitted,
amount: amount:
homeViewModel (homeViewModel
.tenderApprovalsStateResponse! .tenderApprovalsStateResponse
.data! ?.data
.submittedTenders ?.submittedTenders ??
0)
.toString(), .toString(),
textColor: AppColors.mainBlue, textColor: AppColors.mainBlue,
@@ -195,7 +196,7 @@ class DesktopHomePage extends StatelessWidget {
Widget _yourTenderText(HomeViewModel homeViewModel) { Widget _yourTenderText(HomeViewModel homeViewModel) {
final isYourTenders = final isYourTenders =
homeViewModel.data?.data?.tenders!.isNotEmpty ?? false; (homeViewModel.data?.data?.tenders?.isNotEmpty ?? false);
return ConstrainedBox( return ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 740), constraints: const BoxConstraints(maxWidth: 740),
child: Align( child: Align(
@@ -244,7 +245,7 @@ class DesktopHomePage extends StatelessWidget {
tender: homeViewModel.tenders[index], tender: homeViewModel.tenders[index],
onTap: () { onTap: () {
TenderDetailRouteData( TenderDetailRouteData(
tenderId: homeViewModel.tenders[index].id!, tenderId: homeViewModel.tenders[index].id ?? '',
).push(context); ).push(context);
}, },
); );
+4 -3
View File
@@ -105,7 +105,8 @@ class MobileHomePage extends StatelessWidget {
iconPath: AssetsManager.arrows, iconPath: AssetsManager.arrows,
title: HomeStrings.tenderSubmitted, title: HomeStrings.tenderSubmitted,
amount: amount:
tenderApprovalsStateResponse.data!.submittedTenders.toString(), (tenderApprovalsStateResponse.data?.submittedTenders ?? 0)
.toString(),
textColor: AppColors.mainBlue, textColor: AppColors.mainBlue,
enableTap: true, enableTap: true,
onTap: () { onTap: () {
@@ -171,7 +172,7 @@ class MobileHomePage extends StatelessWidget {
Widget _yourTenderText(HomeViewModel homeViewModel) { Widget _yourTenderText(HomeViewModel homeViewModel) {
final isYourTenders = final isYourTenders =
homeViewModel.data?.data?.tenders!.isNotEmpty ?? false; (homeViewModel.data?.data?.tenders?.isNotEmpty ?? false);
return Padding( return Padding(
padding: EdgeInsets.symmetric(horizontal: 24.0.w()), padding: EdgeInsets.symmetric(horizontal: 24.0.w()),
child: Text( child: Text(
@@ -220,7 +221,7 @@ class MobileHomePage extends StatelessWidget {
tender: homeViewModel.tenders[index], tender: homeViewModel.tenders[index],
onTap: () { onTap: () {
TenderDetailRouteData( TenderDetailRouteData(
tenderId: homeViewModel.tenders[index].id!, tenderId: homeViewModel.tenders[index].id ?? '',
).push(context); ).push(context);
}, },
); );
+4 -3
View File
@@ -124,7 +124,8 @@ class TabletHomePage extends StatelessWidget {
iconPath: AssetsManager.arrows, iconPath: AssetsManager.arrows,
title: HomeStrings.tenderSubmitted, title: HomeStrings.tenderSubmitted,
amount: amount:
tenderApprovalsStateResponse.data!.submittedTenders.toString(), (tenderApprovalsStateResponse.data?.submittedTenders ?? 0)
.toString(),
textColor: AppColors.mainBlue, textColor: AppColors.mainBlue,
enableTap: true, enableTap: true,
@@ -201,7 +202,7 @@ class TabletHomePage extends StatelessWidget {
Widget _yourTenderText(HomeViewModel homeViewModel) { Widget _yourTenderText(HomeViewModel homeViewModel) {
final isYourTenders = final isYourTenders =
homeViewModel.data?.data?.tenders!.isNotEmpty ?? false; (homeViewModel.data?.data?.tenders?.isNotEmpty ?? false);
return Text( return Text(
isYourTenders ? HomeStrings.yourTenders : HomeStrings.recommendedTenders, isYourTenders ? HomeStrings.yourTenders : HomeStrings.recommendedTenders,
style: TextStyle( style: TextStyle(
@@ -241,7 +242,7 @@ class TabletHomePage extends StatelessWidget {
tender: homeViewModel.tenders[index], tender: homeViewModel.tenders[index],
onTap: () { onTap: () {
TenderDetailRouteData( TenderDetailRouteData(
tenderId: homeViewModel.tenders[index].id!, tenderId: homeViewModel.tenders[index].id ?? '',
).push(context); ).push(context);
}, },
); );
+5 -5
View File
@@ -34,7 +34,7 @@ class TendersListItem extends StatelessWidget {
SizedBox( SizedBox(
width: double.infinity, width: double.infinity,
child: Text( child: Text(
timeConvertor(tender.publicationDate!), timeConvertor(tender.publicationDate ?? 0),
style: TextStyle( style: TextStyle(
fontSize: 12.0.sp(), fontSize: 12.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
@@ -64,7 +64,7 @@ class TendersListItem extends StatelessWidget {
), ),
), ),
Text( Text(
timeConvertor(tender.tenderDeadline!), timeConvertor(tender.tenderDeadline ?? 0),
style: TextStyle( style: TextStyle(
fontSize: 14.0.sp(), fontSize: 14.0.sp(),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@@ -76,7 +76,7 @@ class TendersListItem extends StatelessWidget {
), ),
SizedBox(height: 12.0.h()), SizedBox(height: 12.0.h()),
Text( Text(
tender.title!, tender.title ?? '',
style: TextStyle( style: TextStyle(
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
fontSize: 16.0.sp(), fontSize: 16.0.sp(),
@@ -88,7 +88,7 @@ class TendersListItem extends StatelessWidget {
SizedBox( SizedBox(
width: double.infinity, width: double.infinity,
child: Text( child: Text(
tender.description!, tender.description ?? '',
textAlign: TextAlign.start, textAlign: TextAlign.start,
maxLines: 4, maxLines: 4,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
@@ -110,7 +110,7 @@ class TendersListItem extends StatelessWidget {
SvgPicture.asset(AssetsManager.location), SvgPicture.asset(AssetsManager.location),
SizedBox(width: 1.0.w()), SizedBox(width: 1.0.w()),
Text( Text(
tender.countryCode!, tender.countryCode ?? '',
style: TextStyle( style: TextStyle(
fontSize: 12.0.sp(), fontSize: 12.0.sp(),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
+21 -21
View File
@@ -125,10 +125,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.4.0" version: "1.4.1"
checked_yaml: checked_yaml:
dependency: transitive dependency: transitive
description: description:
@@ -269,10 +269,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: fake_async name: fake_async
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.2" version: "1.3.3"
ffi: ffi:
dependency: transitive dependency: transitive
description: description:
@@ -572,26 +572,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker name: leak_tracker
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.8" version: "11.0.2"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.9" version: "3.0.10"
leak_tracker_testing: leak_tracker_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_testing name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.1" version: "3.0.2"
lints: lints:
dependency: transitive dependency: transitive
description: description:
@@ -620,26 +620,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.17" version: "0.12.18"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.11.1" version: "0.13.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.16.0" version: "1.17.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@@ -961,10 +961,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.4" version: "0.7.9"
time: time:
dependency: transitive dependency: transitive
description: description:
@@ -1041,10 +1041,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vector_math name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.2.0"
vm_service: vm_service:
dependency: transitive dependency: transitive
description: description:
@@ -1118,5 +1118,5 @@ packages:
source: hosted source: hosted
version: "3.1.3" version: "3.1.3"
sdks: sdks:
dart: ">=3.7.2 <4.0.0" dart: ">=3.9.0-0 <4.0.0"
flutter: ">=3.29.0" flutter: ">=3.29.0"
+15 -14
View File
@@ -58,18 +58,19 @@ flutter:
- assets/icons/ - assets/icons/
- assets/svgs/ - assets/svgs/
- assets/pngs/ - assets/pngs/
- assets/fonts/
# fonts: fonts:
# - family: Schyler - family: Roboto
# fonts: fonts:
# - asset: fonts/Schyler-Regular.ttf - asset: assets/fonts/Roboto-Black.ttf
# - asset: fonts/Schyler-Italic.ttf weight: 900
# style: italic - asset: assets/fonts/Roboto-Bold.ttf
# - family: Trajan Pro weight: 700
# fonts: - asset: assets/fonts/Roboto-Medium.ttf
# - asset: fonts/TrajanPro.ttf weight: 500
# - asset: fonts/TrajanPro_Bold.ttf - asset: assets/fonts/Roboto-Regular.ttf
# weight: 700 weight: 400
# - asset: assets/fonts/Roboto-Light.ttf
# For details regarding fonts from package dependencies, weight: 300
# see https://flutter.dev/to/font-from-package - asset: assets/fonts/Roboto-Thin.ttf
+24
View File
@@ -0,0 +1,24 @@
(() => {
var P = () => navigator.vendor === "Google Inc." || navigator.agent === "Edg/", E = () => typeof ImageDecoder > "u" ? !1 : P(), L = () => typeof Intl.v8BreakIterator < "u" && typeof Intl.Segmenter < "u", W = () => { let n = [0, 97, 115, 109, 1, 0, 0, 0, 1, 5, 1, 95, 1, 120, 0]; return WebAssembly.validate(new Uint8Array(n)) }, w = { hasImageCodecs: E(), hasChromiumBreakIterators: L(), supportsWasmGC: W(), crossOriginIsolated: window.crossOriginIsolated }; function l(...n) { return new URL(C(...n), document.baseURI).toString() } function C(...n) { return n.filter(t => !!t).map((t, i) => i === 0 ? _(t) : j(_(t))).filter(t => t.length).join("/") } function j(n) { let t = 0; for (; t < n.length && n.charAt(t) === "/";)t++; return n.substring(t) } function _(n) { let t = n.length; for (; t > 0 && n.charAt(t - 1) === "/";)t--; return n.substring(0, t) } function T(n, t) { return n.canvasKitBaseUrl ? n.canvasKitBaseUrl : t.engineRevision && !t.useLocalCanvasKit ? C("https://www.gstatic.com/flutter-canvaskit", t.engineRevision) : "canvaskit" } var v = class { constructor() { this._scriptLoaded = !1 } setTrustedTypesPolicy(t) { this._ttPolicy = t } async loadEntrypoint(t) { let { entrypointUrl: i = l("main.dart.js"), onEntrypointLoaded: r, nonce: e } = t || {}; return this._loadJSEntrypoint(i, r, e) } async load(t, i, r, e, a) { a ??= o => { o.initializeEngine(r).then(c => c.runApp()) }; let { entryPointBaseUrl: s } = r; if (t.compileTarget === "dart2wasm") return this._loadWasmEntrypoint(t, i, s, a); { let o = t.mainJsPath ?? "main.dart.js", c = l(s, o); return this._loadJSEntrypoint(c, a, e) } } didCreateEngineInitializer(t) { typeof this._didCreateEngineInitializerResolve == "function" && (this._didCreateEngineInitializerResolve(t), this._didCreateEngineInitializerResolve = null, delete _flutter.loader.didCreateEngineInitializer), typeof this._onEntrypointLoaded == "function" && this._onEntrypointLoaded(t) } _loadJSEntrypoint(t, i, r) { let e = typeof i == "function"; if (!this._scriptLoaded) { this._scriptLoaded = !0; let a = this._createScriptTag(t, r); if (e) console.debug("Injecting <script> tag. Using callback."), this._onEntrypointLoaded = i, document.head.append(a); else return new Promise((s, o) => { console.debug("Injecting <script> tag. Using Promises. Use the callback approach instead!"), this._didCreateEngineInitializerResolve = s, a.addEventListener("error", o), document.head.append(a) }) } } async _loadWasmEntrypoint(t, i, r, e) { if (!this._scriptLoaded) { this._scriptLoaded = !0, this._onEntrypointLoaded = e; let { mainWasmPath: a, jsSupportRuntimePath: s } = t, o = l(r, a), c = l(r, s); this._ttPolicy != null && (c = this._ttPolicy.createScriptURL(c)); let d = (await import(c)).compileStreaming(fetch(o)), f; t.renderer === "skwasm" ? f = (async () => { let m = await i.skwasm; return window._flutter_skwasmInstance = m, { skwasm: m.wasmExports, skwasmWrapper: m, ffi: { memory: m.wasmMemory } } })() : f = Promise.resolve({}), await (await (await d).instantiate(await f)).invokeMain() } } _createScriptTag(t, i) { let r = document.createElement("script"); r.type = "application/javascript", i && (r.nonce = i); let e = t; return this._ttPolicy != null && (e = this._ttPolicy.createScriptURL(t)), r.src = e, r } }; async function I(n, t, i) { if (t < 0) return n; let r, e = new Promise((a, s) => { r = setTimeout(() => { s(new Error(`${i} took more than ${t}ms to resolve. Moving on.`, { cause: I })) }, t) }); return Promise.race([n, e]).finally(() => { clearTimeout(r) }) } var y = class {
setTrustedTypesPolicy(t) { this._ttPolicy = t } loadServiceWorker(t) {
if (!t) return console.debug("Null serviceWorker configuration. Skipping."), Promise.resolve(); if (!("serviceWorker" in navigator)) {
let o = "Service Worker API unavailable."; return window.isSecureContext || (o += `
The current context is NOT secure.`, o += `
Read more: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts`), Promise.reject(new Error(o))
} let { serviceWorkerVersion: i, serviceWorkerUrl: r = l(`flutter_service_worker.js?v=${i}`), timeoutMillis: e = 4e3 } = t, a = r; this._ttPolicy != null && (a = this._ttPolicy.createScriptURL(a)); let s = navigator.serviceWorker.register(a).then(o => this._getNewServiceWorker(o, i)).then(this._waitForServiceWorkerActivation); return I(s, e, "prepareServiceWorker")
} async _getNewServiceWorker(t, i) { if (!t.active && (t.installing || t.waiting)) return console.debug("Installing/Activating first service worker."), t.installing || t.waiting; if (t.active.scriptURL.endsWith(i)) return console.debug("Loading from existing service worker."), t.active; { let r = await t.update(); return console.debug("Updating service worker."), r.installing || r.waiting || r.active } } async _waitForServiceWorkerActivation(t) { if (!t || t.state === "activated") if (t) { console.debug("Service worker already active."); return } else throw new Error("Cannot activate a null service worker!"); return new Promise((i, r) => { t.addEventListener("statechange", () => { t.state === "activated" && (console.debug("Activated new service worker."), i()) }) }) }
}; var g = class { constructor(t, i = "flutter-js") { let r = t || [/\.js$/, /\.mjs$/]; window.trustedTypes && (this.policy = trustedTypes.createPolicy(i, { createScriptURL: function (e) { if (e.startsWith("blob:")) return e; let a = new URL(e, window.location), s = a.pathname.split("/").pop(); if (r.some(c => c.test(s))) return a.toString(); console.error("URL rejected by TrustedTypes policy", i, ":", e, "(download prevented)") } })) } }; var k = n => { let t = WebAssembly.compileStreaming(fetch(n)); return (i, r) => ((async () => { let e = await t, a = await WebAssembly.instantiate(e, i); r(a, e) })(), {}) }; var b = (n, t, i, r) => (window.flutterCanvasKitLoaded = (async () => { if (window.flutterCanvasKit) return window.flutterCanvasKit; let e = i.hasChromiumBreakIterators && i.hasImageCodecs; if (!e && t.canvasKitVariant == "chromium") throw "Chromium CanvasKit variant specifically requested, but unsupported in this browser"; let a = e && t.canvasKitVariant !== "full", s = r; a && (s = l(s, "chromium")); let o = l(s, "canvaskit.js"); n.flutterTT.policy && (o = n.flutterTT.policy.createScriptURL(o)); let c = k(l(s, "canvaskit.wasm")), p = await import(o); return window.flutterCanvasKit = await p.default({ instantiateWasm: c }), window.flutterCanvasKit })(), window.flutterCanvasKitLoaded); var U = async (n, t, i, r) => { let e = i.crossOriginIsolated && !t.forceSingleThreadedSkwasm ? "skwasm" : "skwasm_st", s = l(r, `${e}.js`); n.flutterTT.policy && (s = n.flutterTT.policy.createScriptURL(s)); let o = k(l(r, `${e}.wasm`)); return await (await import(s)).default({ instantiateWasm: o, mainScriptUrlOrBlob: new Blob([`import '${s}'`], { type: "application/javascript" }) }) }; var S = class { async loadEntrypoint(t) { let { serviceWorker: i, ...r } = t || {}, e = new g, a = new y; a.setTrustedTypesPolicy(e.policy), await a.loadServiceWorker(i).catch(o => { console.warn("Exception while loading service worker:", o) }); let s = new v; return s.setTrustedTypesPolicy(e.policy), this.didCreateEngineInitializer = s.didCreateEngineInitializer.bind(s), s.loadEntrypoint(r) } async load({ serviceWorkerSettings: t, onEntrypointLoaded: i, nonce: r, config: e } = {}) { e ??= {}; let a = _flutter.buildConfig; if (!a) throw "FlutterLoader.load requires _flutter.buildConfig to be set"; let s = u => { switch (u) { case "skwasm": return w.hasChromiumBreakIterators && w.hasImageCodecs && w.supportsWasmGC; default: return !0 } }, o = (u, m) => { switch (u.renderer) { case "auto": return m == "canvaskit" || m == "html"; default: return u.renderer == m } }, c = u => u.compileTarget === "dart2wasm" && !w.supportsWasmGC || e.renderer && !o(u, e.renderer) ? !1 : s(u.renderer), p = a.builds.find(c); if (!p) throw "FlutterLoader could not find a build compatible with configuration and environment."; let d = {}; d.flutterTT = new g, t && (d.serviceWorkerLoader = new y, d.serviceWorkerLoader.setTrustedTypesPolicy(d.flutterTT.policy), await d.serviceWorkerLoader.loadServiceWorker(t).catch(u => { console.warn("Exception while loading service worker:", u) })); let f = T(e, a); p.renderer === "canvaskit" ? d.canvasKit = b(d, e, w, f) : p.renderer === "skwasm" && (d.skwasm = U(d, e, w, f)); let h = new v; return h.setTrustedTypesPolicy(d.flutterTT.policy), this.didCreateEngineInitializer = h.didCreateEngineInitializer.bind(h), h.load(p, d, e, r, i) } }; window._flutter || (window._flutter = {}); window._flutter.loader || (window._flutter.loader = new S);
})();
//# sourceMappingURL=flutter.js.map
if (!window._flutter) {
window._flutter = {};
}
_flutter.buildConfig = { "useLocalCanvasKit": true, "engineRevision": "cf56914b326edb0ccb123ffdc60f00060bd513fa", "builds": [{ "compileTarget": "dart2js", "renderer": "canvaskit", "mainJsPath": "main.dart.js" }] };
_flutter.loader.load({
serviceWorkerSettings: {
serviceWorkerVersion: "3781924539"
}
});