Home > Back-end >  How to solve "Do not use BuildContext across async gaps" in Riverpod's ConsumerWidget
How to solve "Do not use BuildContext across async gaps" in Riverpod's ConsumerWidget

Time:12-22

I get the warning "Do not use BuildContext across async gaps" when I use code like this:

await ref.read(testFutureProvider.notifier).doSomethingAsync();
Navigator.of(context).pop();

Normally it is possible to check the mounted property like this:

if(!mounted) return;

or

if(!context.mounted) return;

How can I avoid using BuildContext across async gaps in Riverpod in a ConsumerWidget?

CodePudding user response:

Try this:

ref.read(testFutureProvider.notifier).doSomethingAsync().then((value){
    Navigator.of(context).pop();
})

CodePudding user response:

The solution is to retrieve everything depending on your BuildContext before running async code:

NavigatorState nav = Navigator.of(context);
await ref.read(testFutureProvider.notifier).doSomethingAsync();
nav.pop();

CodePudding user response:

Try the following code:

try {
  await ref.read(testFutureProvider.notifier).doSomethingAsync();
} catch (e) {
  debugPrint(e);
} finally {
  Navigator.of(context).pop();
}

await ref.read(testFutureProvider.notifier).doSomethingAsync().then((value) => Navigator.of(context).pop()).catchError((e) => debugPrint(e));

I suggest you choose one of the two codes above as they both check for errors for you.

  • Related