hime_chann____
hime_chann____

Reputation: 151

Provider was disposed before a value was emitted

I wrote the following code and encountered the error The provider AutoDisposeFutureProvider<Data>#d1e31(465-0041) was disposed before a value was emitted.

I thought it was strange, so I debugged FutureProvider's onDispose and found that it was disposed during the await of the API call, which is confirmed by the output of disposed!


class HogeNotifier extends StateNotifier<Hoge> {

  onFormSubmitted(String input) async {
    final value = await _reader(searchProvider(input).future); // The provider AutoDisposeFutureProvider<Data>#d1e31(465-0041) was disposed before a value was emitted.
    // execute by using value
  }
}
final searchProvider =
    FutureProvider.autoDispose.family<Data, String>((ref, value) async {
  ref.onDispose(() {
    print("disposed!");
  });
    try {
      final result = await dataSource.find(keyword: value); //call api asynchronously
      return Future.value(result);
    } on Exception catch (e) {
      return Future<Data>.error(e);
    }
});

Why does the above error occur? How can I solve this problem?

Upvotes: 3

Views: 1345

Answers (1)

Ruble
Ruble

Reputation: 4824

maybe this can help solve the problem:

final searchProvider =
    FutureProvider.autoDispose.family<Data, String>((ref, value) async {

  ref.keepAlive();
  /// do next
});

Upvotes: 1

Related Questions