Skip to content

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

Closed
@malte-v

Description

@malte-v

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.

Metadata

Metadata

Assignees

Labels

c: new featureNothing broken; request for a new capabilityc: proposalA detailed proposal for a change to Flutterd: stackoverflowGood question for Stack Overflowframeworkflutter/packages/flutter repository. See also f: labels.platform-webWeb applications specificallywould be a good packageSeparate Flutter package should be made for this

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions