55 lines
2.2 KiB
JavaScript
55 lines
2.2 KiB
JavaScript
{{flutter_js}}
|
|
{{flutter_build_config}}
|
|
|
|
// Override buildConfig to force local CanvasKit usage
|
|
if (window._flutter && window._flutter.buildConfig) {
|
|
// Remove engineRevision to prevent CDN usage
|
|
delete window._flutter.buildConfig.engineRevision;
|
|
// Add useLocalCanvasKit flag
|
|
window._flutter.buildConfig.useLocalCanvasKit = true;
|
|
}
|
|
|
|
// Override the internal canvaskit path resolution function
|
|
if (window._flutter && window._flutter.loader) {
|
|
const originalLoad = window._flutter.loader.load;
|
|
window._flutter.loader.load = function(options) {
|
|
options = options || {};
|
|
options.config = options.config || {};
|
|
// Force local CanvasKit
|
|
options.config.canvasKitBaseUrl = "/canvaskit/";
|
|
// Disable Google Fonts
|
|
options.config.canvasKitForceCpuOnly = false;
|
|
return originalLoad.call(this, options);
|
|
};
|
|
}
|
|
|
|
// Configure Flutter to use local CanvasKit files instead of CDN
|
|
_flutter.loader.load({
|
|
config: {
|
|
// Use local CanvasKit files to avoid issues with filtered domains
|
|
canvasKitBaseUrl: "/canvaskit/",
|
|
// Don't fetch from Google CDN
|
|
canvasKitForceCpuOnly: false,
|
|
},
|
|
onEntrypointLoaded: async function(engineInitializer) {
|
|
try {
|
|
let appRunner = await engineInitializer.initializeEngine();
|
|
await appRunner.runApp();
|
|
} catch (error) {
|
|
console.error('Failed to initialize Flutter app:', error);
|
|
// Fallback: Try with CPU-only rendering if WebGL fails
|
|
try {
|
|
let appRunner = await engineInitializer.initializeEngine({
|
|
renderer: "html",
|
|
});
|
|
await appRunner.runApp();
|
|
} catch (fallbackError) {
|
|
console.error('Fallback initialization also failed:', fallbackError);
|
|
// Show a user-friendly error message
|
|
document.body.innerHTML = '<div style="display:flex;justify-content:center;align-items:center;height:100vh;font-family:Arial"><div style="text-align:center;"><h2>مشکل در بارگذاری برنامه</h2><p>لطفا اتصال اینترنت خود را بررسی کنید و صفحه را مجددا بارگذاری کنید.</p><button onclick="location.reload()" style="padding:10px 20px;font-size:16px;cursor:pointer;">تلاش مجدد</button></div></div>';
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|