Skip to content

How to include a WebAssembly module in a Flutter Web application? #48122

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
malte-v opened this issue Jan 3, 2020 · 8 comments · Fixed by #48316
Closed

How to include a WebAssembly module in a Flutter Web application? #48122

malte-v opened this issue Jan 3, 2020 · 8 comments · Fixed by #48316
Assignees
Labels
c: new feature Nothing broken; request for a new capability c: proposal A detailed proposal for a change to Flutter d: stackoverflow Good question for Stack Overflow framework flutter/packages/flutter repository. See also f: labels. platform-web Web applications specifically would be a good package Separate Flutter package should be made for this
Milestone

Comments

@malte-v
Copy link

malte-v commented Jan 3, 2020

Note: This is shamelessly copied from https://stackoverflow.com/questions/59568536/how-to-include-a-webassembly-module-in-a-flutter-web-application because I think this is a bug/is missing documentation.

I'm trying to extend my Flutter Web application with some Rust code via WebAssembly. My project structure looks like this:

lib/
- main.dart
web/
  - wasm_demo/
     - src/
       - lib.rs
     - pkg/
       - wasm_demo.js
       - wasm_demo_bg.wasm
     - bootstrap.js
     - Cargo.toml
  - index.html

The Rust code just creates a String and returns it:

// web/wasm_demo/src/lib.rs

use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn get_string() -> String {
    String::from("This is a Rust String!")
}

When compiled with wasm-pack build the bytecode ends up in web/wasm_demo/pkg/wasm_demo_bg.wasm. wasm_demo.js is just a JavaScript module exporting the get_string function from wasm_demo_bg.wasm:

import * as wasm from './wasm_demo_bg.wasm';

...

/**
* @returns {string}
*/
export function get_string() {
    ...
}

bootstrap.js imports that module and puts it into the window object:

// bootstrap.js

import * as wasm_demo from "./pkg/wasm_demo";

window.wasm_demo = wasm_demo;

index.html loads that bootstrapper prior to launching the actual application:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Rust/WASM/Flutter interop demo</title>
</head>

<body>
  <script src="wasm_demo/bootstrap.js" type="module"></script>

  <script src="main.dart.js" type="application/javascript"></script>
</body>

</html>

And finally, Flutter displays the Rust String:

import 'dart:js';

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Rust/WASM/Flutter interop demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext buildContext) {
    var rustString = context["wasm_demo"].callMethod('get_string').toString();

    return Scaffold(
      appBar: AppBar(
        title: Text("Rust/WASM/Flutter interop demo"),
      ),
      body: Center(
        child: Text(rustString),
      ),
    );
  }
}

The problem I have is that wasm_demo_bg.wasm is apparently not included in the bundle:

:44809/wasm_demo/pkg/wasm_demo:1 Failed to load resource: the server responded with a status of 404 (Not Found)

Is there any way to tell Flutter that the WebAssembly module is needed in the bundle? Thanks!

Steps to Reproduce

  1. Clone this: https://github.com/malte-v/flutter-rust-interop
  2. flutter run -d chrome
  3. See Chrome developer console

Target Platform: Web
Target OS version/browser: Google Chrome Version 78.0.3904.70
Devices: --

logs
➜  flutter-rust-interop git:(master) ✗ flutter run -d chrome --verbose
[  +12 ms] executing: [/opt/flutter/] git -c log.showSignature=false log -n 1 --pretty=format:%H
[  +20 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H
[        ] 1946fc4da0f80c522d7e3ae7d4f7309908ed86f2
[        ] executing: [/opt/flutter/] git describe --match v*.*.* --first-parent --long --tags
[   +5 ms] Exit code 0 from: git describe --match v*.*.* --first-parent --long --tags
[        ] v1.10.14-0-g1946fc4da
[   +4 ms] executing: [/opt/flutter/] git rev-parse --abbrev-ref --symbolic @{u}
[   +6 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u}
[        ] origin/dev
[        ] executing: [/opt/flutter/] git ls-remote --get-url origin
[   +5 ms] Exit code 0 from: git ls-remote --get-url origin
[        ] https://github.com/flutter/flutter.git
[  +33 ms] executing: [/opt/flutter/] git rev-parse --abbrev-ref HEAD
[   +6 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD
[        ] dev
[  +52 ms] executing: /opt/android-sdk/platform-tools/adb devices -l
[   +7 ms] Exit code 0 from: /opt/android-sdk/platform-tools/adb devices -l
[        ] List of devices attached
[  +12 ms] Artifact Instance of 'AndroidMavenArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[   +2 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[  +85 ms] Generating /home/malte/work/flutter-rust-interop/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java
[  +89 ms] Launching lib/main.dart on Chrome in debug mode...
[        ] Building application for the web...
[+7462 ms] Starting daemon...
[  +91 ms] Initializing inputs
[   +7 ms] Reading cached asset graph...
[ +144 ms] Reading cached asset graph completed, took 142ms

[ +161 ms] Checking for updates since last build...
[ +450 ms] Checking for updates since last build completed, took 450ms

[   +6 ms] Initializing inputs
[   +1 ms] Reading cached asset graph...
[        ] Reading cached asset graph completed, took 142ms
[        ] Checking for updates since last build...
[        ] Checking for updates since last build completed, took 450ms
[ +107 ms] Serving DevTools at http://127.0.0.1:37153

[ +588 ms] About to build [web]...
[   +2 ms] Running build...
[ +128 ms] Running build completed, took 55ms

[        ] Caching finalized dependency graph...
[   +6 ms] Caching finalized dependency graph completed, took 91ms

[  +12 ms] Succeeded after 160ms with 0 outputs (0 actions)

[   +5 ms] Building application for the web... (completed in 9.2s)
[        ] Attempting to connect to browser instance..
[+2725 ms] Failed to load asset at path: packages/build_web_compilers/src/dev_compiler/dart_sdk.js.

                    Status code: 404

                    Headers:
                    {
                      "date": "Fri, 03 Jan 2020 12:37:58 GMT",
                      "content-length": "9",
                      "x-frame-options": "SAMEORIGIN",
                      "content-type": "text/plain; charset=utf-8",
                      "x-xss-protection": "1; mode=block",
                      "x-content-type-options": "nosniff",
                      "server": "dart:io with Shelf",
                      "via": "1.1 shelf_proxy"
                    }

                    Content:
                    Not Found

[ +939 ms] Debug service listening on ws://127.0.0.1:46807/N1ysg6IiTLc=

[   +9 ms] Attempting to connect to browser instance.. (completed in 3.7s)
[   +1 ms] 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 
[        ] Warning: Flutter's support for building web applications is highly experimental.
[        ] For more information see https://github.com/flutter/flutter/issues/34082.
[        ] 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 👻 
[        ] 🔥  To hot restart (and rebuild state), press "r" or "R".
[        ] For a more detailed help message, press "h". To quit, press "q".
[   +4 ms] Debug service listening on ws://127.0.0.1:46807/N1ysg6IiTLc=
[ +571 ms] ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
[   +7 ms] The following NoSuchMethodError was thrown building MyHomePage(dirty):
[        ] 'callMethod'
[        ] Dynamic call of null.
[        ] Receiver: null
[        ] Arguments: ["get_string"]
[  +10 ms] User-created ancestor of the error-causing widget was:
[        ] MaterialApp org-dartlang-app:///packages/web_test/main.dart:13:12
[        ] When the exception was thrown, this was the stack:
[        ] package:build_web_compilers/src/dev_compiler/dart_sdk.js 3995:11  throw_
[        ] package:build_web_compilers/src/dev_compiler/dart_sdk.js 4410:15  defaultNoSuchMethod
[        ] package:build_web_compilers/src/dev_compiler/dart_sdk.js 4406:27  noSuchMethod
[        ] package:build_web_compilers/src/dev_compiler/dart_sdk.js 4161:19  callNSM
[   +4 ms] package:build_web_compilers/src/dev_compiler/dart_sdk.js 4163:27  _checkAndCall
[        ] package:build_web_compilers/src/dev_compiler/dart_sdk.js 4242:17  callMethod
[        ] package:build_web_compilers/src/dev_compiler/dart_sdk.js 4245:17  dsend
[        ] package:web_test/main.dart 26:43                                  build
[        ] package:flutter/src/widgets/framework.dart 4026:28                build
[   +9 ms] package:flutter/src/widgets/framework.dart 3958:15                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[   +8 ms] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[  +33 ms] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[  +15 ms] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[  +18 ms] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[  +16 ms] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 5271:32                mount
[  +11 ms] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/overlay.dart 593:16                   mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[  +11 ms] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[  +10 ms] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[ +988 ms] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[   +2 ms] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[   +4 ms] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[   +3 ms] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 5165:14                mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[   +1 ms] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 4111:11                [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/framework.dart 3978:16                performRebuild
[        ] package:flutter/src/widgets/framework.dart 3755:5                 rebuild
[        ] package:flutter/src/widgets/framework.dart 3941:5                 [_firstBuild]
[        ] package:flutter/src/widgets/framework.dart 3936:5                 mount
[        ] package:flutter/src/widgets/framework.dart 3109:13                inflateWidget
[        ] package:flutter/src/widgets/framework.dart 2903:12                updateChild
[        ] package:flutter/src/widgets/binding.dart 1031:16                  [_rebuild]
[        ] package:flutter/src/widgets/binding.dart 1002:5                   mount
[        ] package:flutter/src/widgets/binding.dart 945:16                   <fn>
[        ] package:flutter/src/widgets/framework.dart 2327:19                buildScope
[        ] package:flutter/src/widgets/binding.dart 944:12                   attachToRenderTree
[        ] package:flutter/src/widgets/binding.dart 821:24                   attachRootWidget
[        ] package:flutter/src/widgets/binding.dart 807:7                    <fn>
[        ] package:build_web_compilers/src/dev_compiler/dart_sdk.js 28696:9  internalCallback
[        ] ════════════════════════════════════════════════════════════════════════════════════════════════════
➜  flutter-rust-interop git:(master) ✗ flutter analyze
Analyzing flutter-rust-interop...                                       
No issues found! (ran in 1.2s)
flutter-rust-interop git:(master) ✗ flutter doctor -v
[✓] Flutter (Channel dev, v1.10.14, on Linux, locale en_US.UTF-8)
    • Flutter version 1.10.14 at /opt/flutter
    • Framework revision 1946fc4da0 (3 months ago), 2019-10-07 15:23:31 -0700
    • Engine revision 1d62160fdb
    • Dart version 2.6.0 (build 2.6.0-dev.5.0 d6c6d12ebf)

 
[!] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /opt/android-sdk/
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • ANDROID_HOME = /opt/android-sdk
    • Java binary at: /usr/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_232-b09)
    ! Some Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses

[✓] Chrome - develop for the web
    • Chrome at google-chrome

[!] Android Studio (not installed)
    • Android Studio not found; download from https://developer.android.com/studio/index.html
      (or visit https://flutter.dev/setup/#android-setup for detailed instructions).

[✓] Connected device (2 available)
    • Chrome          • chrome          • web-javascript • Google Chrome 78.0.3904.70
    • Headless Server • headless-server • web-javascript • Flutter Tools

! Doctor found issues in 2 categories.
@iapicca iapicca added d: stackoverflow Good question for Stack Overflow documentation framework flutter/packages/flutter repository. See also f: labels. c: proposal A detailed proposal for a change to Flutter c: new feature Nothing broken; request for a new capability would be a good package Separate Flutter package should be made for this platform-web Web applications specifically labels Jan 6, 2020
@iapicca
Copy link
Contributor

iapicca commented Jan 6, 2020

@rodydavis
Copy link
Contributor

Here is a dart plugin for the web that calls web assembly!

https://moor.simonbinder.eu/web/
https://pub.dev/packages/moor

@rodydavis
Copy link
Contributor

Currently after you build for release you need to copy the extra files in the web/ folder to builder/web/

@malte-v
Copy link
Author

malte-v commented Jan 12, 2020

I'm not sure if this is my fault, but the issue seems to persist.

Flutter 1.13.9-pre.59 • channel master • https://github.com/flutter/flutter.git
Framework • revision ab36346af6 (19 hours ago) • 2020-01-11 14:20:05 -0500
Engine • revision 3d37d39d95
Tools • Dart 2.8.0 (build 2.8.0-dev.0.0 395daaa3ec)

@malte-v
Copy link
Author

malte-v commented Jan 13, 2020

The bundle now includes the WASM file, but I get the following error:

wasm_demo_bg.wasm:1 Failed to load module script: The server responded with a non-JavaScript MIME type of "application/wasm". Strict MIME type checking is enforced for module scripts per HTML spec.

I think this issue should be reopened @jonahwilliams

@malte-v
Copy link
Author

malte-v commented Jan 13, 2020

Turns out it was my fault. I was using bindings generated for use with webpack rather than running on the browser directly. Anyways, thanks for fixing this issue so quickly!

@vasishath
Copy link

Does this work on debug builds ? For me the files get copied in release build but only the files included in index.html get copied while running in debug mode.

@github-actions
Copy link

This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Aug 19, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
c: new feature Nothing broken; request for a new capability c: proposal A detailed proposal for a change to Flutter d: stackoverflow Good question for Stack Overflow framework flutter/packages/flutter repository. See also f: labels. platform-web Web applications specifically would be a good package Separate Flutter package should be made for this
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants