import 'package:flutter/widgets.dart'; abstract class GlobalState { static final _state = >[]; static void register(State state, [Object? key]) { _state.add(Pair(key, state)); } static T find([Object? key]) { for (var pair in _state) { if (pair.left == key && pair.right is T) { return pair.right as T; } } throw Exception('State not found'); } static T? findOrNull([Object? key]) { for (var pair in _state) { if (pair.left == key && pair.right is T) { return pair.right as T; } } return null; } static void unregister(State state, [Object? key]) { _state.removeWhere( (pair) => (key == null || pair.left == key) && pair.right == state); } } class Pair { K left; V right; Pair(this.left, this.right); } abstract class AutomaticGlobalState extends State { @override @mustCallSuper void initState() { super.initState(); GlobalState.register(this, key); } @override @mustCallSuper void dispose() { super.dispose(); GlobalState.unregister(this, key); } Object? get key; void update() { setState(() {}); } void refresh() { update(); } }