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:
markvideon
2024-03-15 17:27:24 +10:30
committed by GitHub
parent 17da92b2d1
commit e3aaa7c21d
2 changed files with 14 additions and 6 deletions

View File

@ -9,7 +9,7 @@ dependencies:
flame_riverpod: ^5.3.0
flutter:
sdk: flutter
flutter_riverpod: ^2.1.3
flutter_riverpod: ^2.5.1
dev_dependencies:
flame_lint: ^0.2.0

View File

@ -219,8 +219,13 @@ class RiverpodAwareGameWidgetState<T extends Game> extends GameWidgetState<T>
_assertNotDisposed();
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(
ProviderScope.containerOf(context, listen: false).listen(
container,
container.listen(
provider,
listener,
onError: onError,
@ -234,16 +239,19 @@ class RiverpodAwareGameWidgetState<T extends Game> extends GameWidgetState<T>
}
}
class _ListenManual<T> implements ProviderSubscription<T> {
_ListenManual(this._subscription, this._element);
class _ListenManual<T> extends ProviderSubscription<T> {
_ListenManual(super.source, this._subscription, this._element);
final ProviderSubscription<T> _subscription;
final RiverpodAwareGameWidgetState _element;
@override
void close() {
_subscription.close();
_element._manualListeners?.remove(this);
if (!closed) {
_subscription.close();
_element._manualListeners?.remove(this);
}
super.close();
}
@override