import 'dart:convert'; import 'dart:js_interop'; @JS('window.__zendegi__') external _ZendegiBridge? get _bridge; extension type _ZendegiBridge._(JSObject _) implements JSObject { external JSString getState(); external void onEvent(JSString json); external set updateState(JSFunction callback); } Map? readInitialState() { final bridge = _bridge; if (bridge == null) return null; final json = bridge.getState().toDart; return jsonDecode(json) as Map; } void onStateUpdated(void Function(Map state) callback) { final bridge = _bridge; if (bridge == null) return; bridge.updateState = ((JSString json) { final decoded = jsonDecode(json.toDart) as Map; callback(decoded); }).toJS; } void emitEvent(String type, [Map? payload]) { final bridge = _bridge; if (bridge == null) return; final event = {'type': type}; if (payload != null) { event['payload'] = payload; } bridge.onEvent(jsonEncode(event).toJS); }