mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
fix: notify state changed after set state
This commit is contained in:
parent
ba3f2f3c02
commit
ca89fd93f3
@ -201,9 +201,9 @@ class _FieldNameTextFieldState extends State<_FieldNameTextField> {
|
|||||||
|
|
||||||
void listenOnPopoverChanged(BuildContext context) {
|
void listenOnPopoverChanged(BuildContext context) {
|
||||||
if (_popoverCallback != null) {
|
if (_popoverCallback != null) {
|
||||||
widget.popoverMutex.removePopoverStateListener(_popoverCallback!);
|
widget.popoverMutex.removePopoverListener(_popoverCallback!);
|
||||||
}
|
}
|
||||||
_popoverCallback = widget.popoverMutex.listenOnPopoverStateChanged(() {
|
_popoverCallback = widget.popoverMutex.listenOnPopoverChanged(() {
|
||||||
if (focusNode.hasFocus) {
|
if (focusNode.hasFocus) {
|
||||||
final node = FocusScope.of(context);
|
final node = FocusScope.of(context);
|
||||||
node.unfocus();
|
node.unfocus();
|
||||||
|
@ -5,14 +5,14 @@ import 'popover.dart';
|
|||||||
/// If multiple popovers are exclusive,
|
/// If multiple popovers are exclusive,
|
||||||
/// pass the same mutex to them.
|
/// pass the same mutex to them.
|
||||||
class PopoverMutex {
|
class PopoverMutex {
|
||||||
final ValueNotifier<PopoverState?> _stateNotifier = ValueNotifier(null);
|
final _PopoverStateNotifier _stateNotifier = _PopoverStateNotifier();
|
||||||
PopoverMutex();
|
PopoverMutex();
|
||||||
|
|
||||||
void removePopoverStateListener(VoidCallback listener) {
|
void removePopoverListener(VoidCallback listener) {
|
||||||
_stateNotifier.removeListener(listener);
|
_stateNotifier.removeListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
VoidCallback listenOnPopoverStateChanged(VoidCallback callback) {
|
VoidCallback listenOnPopoverChanged(VoidCallback callback) {
|
||||||
listenerCallback() {
|
listenerCallback() {
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
@ -21,24 +21,31 @@ class PopoverMutex {
|
|||||||
return listenerCallback;
|
return listenerCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
void close() {
|
void close() => _stateNotifier.state?.close();
|
||||||
_stateNotifier.value?.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
PopoverState? get state => _stateNotifier.value;
|
PopoverState? get state => _stateNotifier.state;
|
||||||
|
|
||||||
set state(PopoverState? newState) {
|
set state(PopoverState? newState) => _stateNotifier.state = newState;
|
||||||
if (_stateNotifier.value != null && _stateNotifier.value != newState) {
|
|
||||||
_stateNotifier.value?.close();
|
|
||||||
}
|
|
||||||
_stateNotifier.value = newState;
|
|
||||||
}
|
|
||||||
|
|
||||||
void removeState() {
|
void removeState() {
|
||||||
_stateNotifier.value = null;
|
_stateNotifier.state = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_stateNotifier.dispose();
|
_stateNotifier.dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class _PopoverStateNotifier extends ChangeNotifier {
|
||||||
|
PopoverState? _state;
|
||||||
|
|
||||||
|
PopoverState? get state => _state;
|
||||||
|
|
||||||
|
set state(PopoverState? newState) {
|
||||||
|
if (_state != null && _state != newState) {
|
||||||
|
_state?.close();
|
||||||
|
}
|
||||||
|
_state = newState;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user