Flutter Don't use 'BuildContext's across async gaps
Flutter 出现以下警告:
Don't use 'BuildContext's across async gaps
awesome_dialog.AwesomeDialog(
context: context,
dialogType: awesome_dialog.DialogType.info,
animType: awesome_dialog.AnimType.rightSlide,
title: '版本更新',
desc: 'APP有新的版本,是否现在升级?',
btnOkText: '马上升级',
btnCancelText: '稍后升级',
btnCancelOnPress: () {
AppBaseData.isStartUpdate = false;
AppBaseData.isCheckUpdate = false;
//更新不再提示
LocalStorage.setIsNoPromptUpdate(true);
},
btnOkOnPress: () {
tryOtaUpdate();
},
).show();
原因是在异步方法中调用了弹出提示窗口(使用了BuildContexts)。
处理方式:添加mounted判断
mounted 是 bool 类型,表示当前 State 是否加载到树⾥。
常用于判断页面是否释放。
比如在程序中有些异步的处理,当处理结束时直接调用setState方法会直接报错,因为页面已经释放(dispose)了,此时无法渲染页面,这时就可以使用mounted来进行判断页面是否被释放,如果释放了就不进行渲染。
if (mounted){
awesome_dialog.AwesomeDialog(
context: context,
dialogType: awesome_dialog.DialogType.info,
animType: awesome_dialog.AnimType.rightSlide,
title: '版本更新',
desc: 'APP有新的版本,是否现在升级?',
btnOkText: '马上升级',
btnCancelText: '稍后升级',
btnCancelOnPress: () {
AppBaseData.isStartUpdate = false;
AppBaseData.isCheckUpdate = false;
//更新不再提示
LocalStorage.setIsNoPromptUpdate(true);
},
btnOkOnPress: () {
tryOtaUpdate();
},
).show();
}
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果