-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Open
Labels
Description
Describe the bug
ProviderDidFail: bProvider
=> error: Bad state: The provider aProvider was disposed during loading state, yet no value could be emitted.To Reproduce
Create two screens. Screen A and Screen B. Screen A navigate you to screen B where it watches bProviderthen exit the screen and you will see the error
const String expToken =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE3NjAyODI5ODYsImV4cCI6MTc2MDI4Mjk4NywiYXVkIjoid3d3LmV4YW1wbGUuY29tIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsIkdpdmVuTmFtZSI6IkpvaG5ueSIsIlN1cm5hbWUiOiJSb2NrZXQiLCJFbWFpbCI6Impyb2NrZXRAZXhhbXBsZS5jb20iLCJSb2xlIjpbIk1hbmFnZXIiLCJQcm9qZWN0IEFkbWluaXN0cmF0b3IiXX0.GhUxTX_52dlsBYzFpop-KPruAjb8X8PR1jmT6aqaZAI";
@riverpod
Future<Response> a(Ref ref) async {
final dio = Dio();
final cancelToken = CancelToken();
ref.onDispose(() {
cancelToken.cancel();
dio.close();
});
return dio.get(
"https://dummyjson.com/auth/me?access-token=$expToken",
cancelToken: cancelToken,
);
}
@riverpod
Future<Response> b(Ref ref) => ref.watch(aProvider.future);final class ProviderCrashlytics extends ProviderObserver {
const ProviderCrashlytics();
final name = "CRASHLYTICS";
@override
void didAddProvider(ProviderObserverContext context, Object? value) {
if (value is! AsyncError) {
return;
}
log(
"⛔️ DidAddProvider: ${context.provider.name}\n"
"=> error: ${value.error}\n"
"=> stackTrace: ${value.stackTrace}",
name: name,
);
}
@override
void providerDidFail(
ProviderObserverContext context,
Object error,
StackTrace stackTrace,
) async {
log(
"⛔️ ProviderDidFail: ${context.provider.name}\n"
"=> error: $error\n"
"=> stackTrace: $stackTrace",
name: name,
);
if (!kDebugMode && !DevicePlatform.isWeb) {
unawaited(
FirebaseCrashlytics.instance.recordError(
error,
stackTrace,
reason: context.provider.name,
),
);
}
}
}Expected behavior
It should ignore the error