Add entryPointBaseUrl support for web workers

Introduces the entryPointBaseUrl property to configuration in index.html and flutter_bootstrap.js, and updates python.js to use this base URL when creating Python web workers. This change allows for more flexible deployment scenarios where the entry point base URL may differ.
This commit is contained in:
Feodor Fitsner 2025-09-26 09:02:57 -07:00
parent b89da8ac93
commit 4d71b7501d
3 changed files with 7 additions and 4 deletions

View File

@ -3,6 +3,7 @@
var flutterConfig = {
multiViewEnabled: flet.multiView,
entryPointBaseUrl: flet.entryPointBaseUrl,
assetBase: flet.assetBase
};
if (flet.webRenderer != "auto") {

View File

@ -25,6 +25,7 @@
multiView: false,
noCdn: "{{ cookiecutter.no_cdn }}".toLowerCase() == "true",
webSocketEndpoint: "/ws",
entryPointBaseUrl: "/",
assetBase: "/",
routeUrlStrategy: "{{ cookiecutter.route_url_strategy }}",
canvasKitBaseUrl: "/canvaskit/",

View File

@ -6,13 +6,14 @@ let _documentUrl = document.URL;
// This method is called from Dart on backend.connect()
// dartOnMessage is called on backend.onMessage
// it accepts "data" of type JSUint8Array
globalThis.jsConnect = async function(appId, args, dartOnMessage) {
globalThis.jsConnect = async function (appId, args, dartOnMessage) {
let app = {
"dartOnMessage": dartOnMessage
};
console.log(`Starting up Python worker: ${appId}, args: ${args}`);
_apps[appId] = app;
app.worker = new Worker("python-worker.js");
app.worker = new Worker((flet.entryPointBaseUrl.endsWith("/") ?
flet.entryPointBaseUrl.slice(0, -1) : flet.entryPointBaseUrl) + "python-worker.js");
var error;
app.worker.onmessage = (event) => {
@ -50,7 +51,7 @@ globalThis.jsConnect = async function(appId, args, dartOnMessage) {
// Called from Dart on backend.send
// data is a message serialized to JSUint8Array
globalThis.jsSend = async function(appId, data) {
globalThis.jsSend = async function (appId, data) {
if (appId in _apps) {
const app = _apps[appId];
app.worker.postMessage(data);
@ -58,7 +59,7 @@ globalThis.jsSend = async function(appId, data) {
}
// Called from Dart on channel.disconnect
globalThis.jsDisconnect = async function(appId) {
globalThis.jsDisconnect = async function (appId) {
if (appId in _apps) {
console.log(`Terminating Python worker: ${appId}`);
const app = _apps[appId];