It'*_*hil 10 flutter flutter-test flutter-dependencies flutter-layout
我已将 pub yaml 升级到主要版本flutter pub upgrade --major versions
,它给了我很多建议错误我不\xe2\x80\x99t 明白为什么?。有人可以解释一下吗?
这是一个例子。它说Do not use BuildContexts across async gaps
我在这里应该做什么。
_resetEmail(String password,) async {\n final user = FirebaseAuth.instance.currentUser;\n final credential =\n EmailAuthProvider.credential(email: user!.email!, password: password);\n try {\n UserCredential;\n await FirebaseAuth.instance.currentUser\n ?.reauthenticateWithCredential(credential);\n\n ///The problem is here\n Navigator.push(\n context,\n PageTransition(\n type: PageTransitionType.rightToLeft,\n child: const ResetEmailScreen()));\n ///\n\n } on FirebaseAuthException {\n Fluttertoast.showToast(\n msg: 'Wrong password',\n gravity: ToastGravity.TOP,\n toastLength: Toast.LENGTH_LONG,\n backgroundColor: Colors.grey[400],\n textColor: Colors.black,\n );\n }\n }\n
Run Code Online (Sandbox Code Playgroud)\n
Kau*_*dru 19
在Navigator.push之前添加一个条件if (mounted)
。您正在异步方法中使用上下文。当执行此方法时,上下文可能会发生变化。但这个上下文正在被传递给导航器。因此我认为错误..
Anm*_*ngh 10
在方法中存储 BuildContext 会导致异步间隙,如果应用程序崩溃,稍后可能会导致难以找到问题。
因此,当从 StatefulWidget 使用 BuildContext 时,必须在异步间隔后检查已安装的属性。
解决方案
使用“if (!mounted) return;” 在使用上下文之前。
if (!mounted) return;
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child: const ResetEmailScreen()));
Run Code Online (Sandbox Code Playgroud)
找到避免“不要跨异步间隙使用 BuildContexts”的最佳解决方案:
对于无状态小部件:
if (context.mounted) {
Navigator.pop(context);
}
Run Code Online (Sandbox Code Playgroud)
对于 StateFull 小部件:
if (mounted) {
Navigator.pop(context);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12998 次 |
最近记录: |