import 'package:flutter/cupertino.dart'; /// Event system class ListenerReceipt { Function(T) listener; ListenerReceipt(this.listener); } class EventDelegate { final List> _receipts = []; ListenerReceipt addListener(Function(T) listener) { final receipt = ListenerReceipt(listener); _receipts.add(receipt); return receipt; } void removeListener(ListenerReceipt receipt) { _receipts.remove(receipt); print("removed listener"); } void trigger(T event) { print("triggering event"); for (var receipt in _receipts) { print("triggering listener"); try { receipt.listener(event); } catch (e) { print("Error in listener: $e"); removeListener(receipt); } } } } // flutter integration class DelegateBuilder extends StatefulWidget { final EventDelegate delegate; final Widget Function(BuildContext, T) builder; final Widget Function(BuildContext)? defaultBuilder; DelegateBuilder({required this.delegate, required this.builder, this.defaultBuilder}) : super(key: UniqueKey()) { print("created delegate builder widget"); } @override State createState() => _DelegateBuilderState(); } class _DelegateBuilderState extends State> { late ListenerReceipt _receipt; T? lastEvent; @override void initState() { super.initState(); print("init delegate builder widget"); _receipt = widget.delegate.addListener((event) { lastEvent = event; print("triggered"); setState(() { }); }); } @override void dispose() { super.dispose(); widget.delegate.removeListener(_receipt); print("disposed"); } @override Widget build(BuildContext context) { print("rebuilt"); print("Valid: ${lastEvent != null}"); return lastEvent == null ? widget.defaultBuilder == null ? Container() : widget.defaultBuilder!(context) : widget.builder(context, lastEvent!); } }