mirror of https://github.com/flutter/samples.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.4 KiB
44 lines
1.4 KiB
// Sets up a channel to JS-interop with Flutter
|
|
(function() {
|
|
"use strict";
|
|
// This function will be called from Flutter when it prepares the JS-interop.
|
|
window._stateSet = function () {
|
|
window._stateSet = function () {
|
|
console.log("Call _stateSet only once!");
|
|
};
|
|
|
|
// The state of the flutter app, see `class _MyAppState` in lib/main.dart.
|
|
let appState = window._appState;
|
|
|
|
let valueField = document.querySelector("#value");
|
|
let updateState = function () {
|
|
valueField.value = appState.count;
|
|
};
|
|
|
|
// Register a callback to update the HTML field from Flutter.
|
|
appState.addHandler(updateState);
|
|
|
|
// Render the first value (0).
|
|
updateState();
|
|
|
|
let incrementButton = document.querySelector("#increment");
|
|
incrementButton.addEventListener("click", (event) => {
|
|
appState.increment();
|
|
});
|
|
|
|
let screenSelector = document.querySelector("#screen-selector");
|
|
screenSelector.addEventListener("change", (event) => {
|
|
appState.changeDemoScreenTo(event.target.value);
|
|
setJsInteropControlsEnabled(event.target.value === 'counter');
|
|
});
|
|
|
|
// Enables/disables the Value/Increment controls.
|
|
function setJsInteropControlsEnabled(enabled) {
|
|
let elements = document.querySelectorAll("#increment, label[for='value']");
|
|
elements.forEach((el) => {
|
|
el.classList.toggle('disabled', !enabled);
|
|
})
|
|
}
|
|
};
|
|
}());
|