mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 07:47:24 +00:00
Update state management.
This commit is contained in:
66
lib/foundation/global_state.dart
Normal file
66
lib/foundation/global_state.dart
Normal file
@@ -0,0 +1,66 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
abstract class GlobalState {
|
||||
static final _state = <Pair<Object?, State>>[];
|
||||
|
||||
static void register(State state, [Object? key]) {
|
||||
_state.add(Pair(key, state));
|
||||
}
|
||||
|
||||
static T find<T extends State>([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<T extends State>([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, V> {
|
||||
K left;
|
||||
V right;
|
||||
|
||||
Pair(this.left, this.right);
|
||||
}
|
||||
|
||||
abstract class AutomaticGlobalState<T extends StatefulWidget>
|
||||
extends State<T> {
|
||||
@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();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user