| # Example of using Wasm with RFW |
| |
| 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. |
| |
| ## Building |
| |
| 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. |
| |
| ## Conventions |
| |
| 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. |
| |
| ## Application behavior |
| |
| 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. |