mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-11-04 04:47:13 +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,16 +239,19 @@ 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() {
 | 
				
			||||||
    _subscription.close();
 | 
					    if (!closed) {
 | 
				
			||||||
    _element._manualListeners?.remove(this);
 | 
					      _subscription.close();
 | 
				
			||||||
 | 
					      _element._manualListeners?.remove(this);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    super.close();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user