I am using riverpod_generator in my Flutter app to generate a provider for a controller that I use. The controller is actually a Notifier.
I am wondering where is the correct place in the controller to set up the disposal of resources (in this case, a BehaviorSubject, and its stream's subscription.
Is it ok to do it in the build()
method, as I have in the included code?
Thanks
part "provider.g.dart";
final PlayersSearchFiltersValue _initialFilters = PlayersSearchFiltersValue(
searchTerm: "",
);
@riverpod
class PlayersSearchAppController extends _$PlayersSearchAppController
implements PlayersSearchController {
late final PlayersService playersService =
ref.read(playersAppServiceProvider);
final BehaviorSubject<PlayersSearchFiltersValue> _filtersSubject =
BehaviorSubject();
late StreamSubscription<PlayersSearchFiltersValue> _filtersSubscription;
StreamSink<PlayersSearchFiltersValue> get _filtersSink =>
_filtersSubject.sink;
@override
AsyncValue<List<PlayerModel>> build() {
_initializeController();
return AsyncValue.data([]);
}
/// rest of the code
void _initializeController() {
_filtersSubscription = _filtersSubject.stream
.debounceTime(Duration(milliseconds: 500))
.listen((event) {
_onSearchPlayers(event);
});
ref.onDispose(() async {
await _filtersSubscription.cancel();
await _filtersSubject.close();
});
}
}