import 'dart:async'; import 'package:hooks_riverpod/hooks_riverpod.dart'; class JsEvent { const JsEvent(this.method, [this.args]); final String method; final List? args; } class WebReloadController { final _controller = StreamController.broadcast(); Stream get stream => _controller.stream; void callEvent(JsEvent event) => _controller.add(event); Future dispose() => _controller.close(); } final webReloadControllerProvider = Provider((ref) { final controller = WebReloadController(); ref.onDispose(() => unawaited(controller.dispose())); return controller; }); final webReloadPProvider = StreamProvider.autoDispose((ref) { return ref.watch(webReloadControllerProvider).stream; });