In this example, the application downloads both RFW descriptions of UI and Wasm logic to drive it. The Flutter application itself does not contain any of the calculator UI or logic.
Currently this only runs on macOS, Windows, and Linux, since package:wasm
does not yet support Android, iOS, or web.
Before running this package, you must run flutter pub run wasm:setup
in this directory. Before doing this, you will need to have installed Rust and clang.
To rebuild the files in the logic/ directory (which are the files that the application downloads at runtime), you will additionally need to have installed clang and lld, and dart must be on your path.
The application renders the remote widget named root
defined in the logic/calculator.rfw
file, and loads the Wasm module defined in the logic/calculator.wasm
file.
The Wasm module must implement a function value
that takes no arguments and returns an integer, which is the data to pass to the interface. This will be the first function called.
That data is stored in the value
key of the data exposed to the remote widgets, as a map with two values, numeric
(which stores the integer as-is) and string
(which stores its string representation, e.g. for display using a Text
widget).
The remote widgets can signal events. The names of such events are looked up as functions in the Wasm module. The arguments
key, if present, must be a list of integers to pass to the function.
Only the core.widgets
local library is loaded into the runtime.
The demo application fetches the RFW and Wasm files on startup, if it has not downloaded them before or if they were downloaded more than six hours earlier.