flutter - 为什么使用这个简单的 initState 代码会导致 Flutter 崩溃?
问题描述
class _HomeScreenState extends State<HomeScreen> {
String uid = "";
@override
void initState() {
FirebaseAuth.instance.currentUser().then((user) {
setState(() {
uid = user.uid;
super.initState();
});
});
}
我运行最新版本的 Flutter,之前从未遇到过任何这些问题。Flutter 完成 xcode 构建,在模拟器上打开但只有白屏,1 秒后 Flutter 崩溃并出现以下异常:
**Failed assertion: line 1110 pos 12: '_debugLifecycleState == _StateLifecycle.created': is not true.
#0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:42:39)
#1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:38:5)
#2 State.initState (package:flutter/src/widgets/framework.dart:1110:12)
#3 _HomeScreenState.initState.<anonymous closure>.<anonymous closure> (package:schoolEachother1_0/screens/home_screen.dart:25:15)
#4 State.setState (package:flutter/src/widgets/framework.dart:1233:30)
#5 _HomeScreenState.initState.<anonymous closure> (package:schoolEachother1_0/screens/home_screen.dart:23:7)
#6 _rootRunUnary (dart:async/zone.dart:1192:38)
#7 _CustomZone.runUnary (dart:async/zone.dart:1085:19)
#8 _FutureListener.handleValue (dart:async/future_impl.dart:141:18)*
#9 Future._propagateToListeners.handleValueCallback (dart:async/futu<…>
*** First throw call stack:
(
0 CoreFoundation 0x00007fff23e3cf0e __exceptionPreprocess + 350
1 libobjc.A.dylib 0x00007fff50ba89b2 objc_exception_throw + 48
2 CoreFoundation 0x00007fff23e3cc88 +[NSException raise:format:arguments:] + 88
3 Foundation 0x00007fff258b8c9b -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 166
4 Runner 0x00000001031ad6d7 _ZN8firebase9firestore4util16ObjcThrowHandlerENS1_13ExceptionTypeEPKcS4_iRKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE + 343
5 Runner 0x00000001031acf25 _ZN8firebase9firestore4util5ThrowENS1_13ExceptionTypeEPKcS4_iRKNSt3__<…>*
谁能告诉我我做错了什么?
提前致谢
解决方案
super.initState()
必须独立于initState()
方法中的其余代码调用。
@override
void initState() {
FirebaseAuth.instance.currentUser().then((user) {
setState(() {
uid = user.uid;
});
});
super.initState();
}
推荐阅读
- android - 来自受管理帐户的 Google Play 控制台
- c# - 在 Entity Framework Core 5 中获取列标题名称和相关表标题名称
- kubernetes - 在 ArgoCD 中启动/停止应用程序
- pandas - 如何使用 pytest for pandas udf 数据框获取测试覆盖率报告,因为我的覆盖率报告没有覆盖 udf 函数内的行
- python - 动画被删除而没有渲染任何东西。这很可能是无意的?
- python - 如何在单个测试文件中为每个类测试计时
- amazon-web-services - 安全的 aws s3 对象(使用 jwt 等授权方控制访问,Web 应用程序通常会如何做)
- ruby-on-rails - rails content_tag 处理选项
- html-table - 将html转换为pdf时itextsharp行跨度不起作用
- python - 如何覆盖django中的相关字段?