我收到一个警告说
不要在异步间隙中使用'BuildContext'。(文档)尝试重写代码以不引用'BuildContext'。
我点击了Documentation链接,并按照他们的建议添加了if (!context.mounted) return;
行(见下文)。然而,我仍然得到相同的警告,虽然现在它指向我刚刚添加的行。这意味着什么?我可以做些什么来正确地编码它,使警告不出现?所有我需要这个按钮做的是运行一些异步工作,如果它是成功的,然后导航到一个不同的页面。
TextButton(
onPressed: () async {
final groupID = await database.createGroup();
if (!context.mounted) return; //Warning points here
if (groupID == '') {
Fluttertoast.showToast(msg: 'Error creating group');
} else {
groupNameController.clear();
Navigator.of(context).pop(); //Close the dialog box
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ScreenChat(groupID: groupID,)),
);
}
},
child: const Text('OK')
),
3条答案
按热度按时间9avjhtql1#
而不是使用:
尝试使用:
它还将抑制警告。
v8wbuo2f2#
而不是使用:
尝试使用:
它将抑制警告。
b09cbbtk3#
这个错误是说,当异步函数仍在加载/进行时,用户可以关闭应用程序或转到应用程序的另一个页面/屏幕,这将在完成后导致错误,因为它无法执行下一行
(if/else)
或检查(!context)
。出于这个原因,你需要检查这个页面/屏幕是否仍然是
mounted
,如果是,你要求它继续执行下一行,或者关闭它。简单地这样称呼它: