我已经把pub yaml升级到了flutter pub upgrade --major versions
的主版本,它给了我很多建议,我不明白为什么会出错?有人能解释一下吗?
这是一个例子,它说Do not use BuildContexts across async gaps
我应该怎么做。
_resetEmail(String password,) async {
final user = FirebaseAuth.instance.currentUser;
final credential =
EmailAuthProvider.credential(email: user!.email!, password: password);
try {
UserCredential;
await FirebaseAuth.instance.currentUser
?.reauthenticateWithCredential(credential);
///The problem is here
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child: const ResetEmailScreen()));
///
} on FirebaseAuthException {
Fluttertoast.showToast(
msg: 'Wrong password',
gravity: ToastGravity.TOP,
toastLength: Toast.LENGTH_LONG,
backgroundColor: Colors.grey[400],
textColor: Colors.black,
);
}
}
2条答案
按热度按时间lf5gs5x21#
在导航器前添加一个条件
if (mounted)
。你在异步方法中使用了一个上下文。当这个方法被执行时,上下文可以改变。但是这个上下文被传递给了导航器。因此我认为错误是...w8ntj3qf2#
将BuildContext存储在方法中会导致异步间隙,这可能会在应用崩溃时导致查找问题的困难。
因此,当从StatefulWidget使用BuildContext时,必须在异步间隙之后检查已安装属性。
使用"如果(!已安装)返回; "然后再使用上下文。