flutter 如何解决Riverpod的ConsumerWidget中“不要跨异步间隙使用BuildContext”的问题?

t98cgbkg  于 2022-12-24  发布在  Flutter
关注(0)|答案(3)|浏览(132)

当我使用如下代码时,我收到警告“不要跨异步间隙使用BuildContext”:

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

通常,check the mounted property可以如下所示:

if(!mounted) return;

if(!context.mounted) return;

如何避免在ConsumerWidget中跨Riverpod中的异步间隙使用BuildContext?

p5cysglq

p5cysglq1#

解决方案是在运行异步代码之前根据BuildContext检索所有内容:

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

bejyjqdl2#

试试这个:

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

xggvc2p63#

请尝试以下代码:

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));

我建议您选择上面两个代码中的一个,因为它们都可以为您检查错误。

相关问题