mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-03 20:36:31 +08:00
fix: Resolve breaking changes from Riverpod affecting flame_riverpod (#3080)
Changes to how support for manual listeners is implemented in flutter_riverpod 2.5.1 (released 4 days ago) have affected flame_riverpod - specifically, the implementation of ProviderSubscription. This PR updates the implementation of manual listeners in flame_riverpod in the same manner that flutter_riverpod has.
This commit is contained in:
@ -9,7 +9,7 @@ dependencies:
|
|||||||
flame_riverpod: ^5.3.0
|
flame_riverpod: ^5.3.0
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
flutter_riverpod: ^2.1.3
|
flutter_riverpod: ^2.5.1
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flame_lint: ^0.2.0
|
flame_lint: ^0.2.0
|
||||||
|
|||||||
@ -219,8 +219,13 @@ class RiverpodAwareGameWidgetState<T extends Game> extends GameWidgetState<T>
|
|||||||
_assertNotDisposed();
|
_assertNotDisposed();
|
||||||
final listeners = _manualListeners ??= [];
|
final listeners = _manualListeners ??= [];
|
||||||
|
|
||||||
|
// Reading the container using "listen:false" to guarantee that this can
|
||||||
|
// be used inside initState.
|
||||||
|
final container = ProviderScope.containerOf(context, listen: false);
|
||||||
|
|
||||||
final sub = _ListenManual(
|
final sub = _ListenManual(
|
||||||
ProviderScope.containerOf(context, listen: false).listen(
|
container,
|
||||||
|
container.listen(
|
||||||
provider,
|
provider,
|
||||||
listener,
|
listener,
|
||||||
onError: onError,
|
onError: onError,
|
||||||
@ -234,17 +239,20 @@ class RiverpodAwareGameWidgetState<T extends Game> extends GameWidgetState<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ListenManual<T> implements ProviderSubscription<T> {
|
class _ListenManual<T> extends ProviderSubscription<T> {
|
||||||
_ListenManual(this._subscription, this._element);
|
_ListenManual(super.source, this._subscription, this._element);
|
||||||
|
|
||||||
final ProviderSubscription<T> _subscription;
|
final ProviderSubscription<T> _subscription;
|
||||||
final RiverpodAwareGameWidgetState _element;
|
final RiverpodAwareGameWidgetState _element;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void close() {
|
void close() {
|
||||||
|
if (!closed) {
|
||||||
_subscription.close();
|
_subscription.close();
|
||||||
_element._manualListeners?.remove(this);
|
_element._manualListeners?.remove(this);
|
||||||
}
|
}
|
||||||
|
super.close();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
T read() => _subscription.read();
|
T read() => _subscription.read();
|
||||||
|
|||||||
Reference in New Issue
Block a user