Flame升级至1.4后报错:Field 'body'未初始化,求解答
Flame 1.4版本中BodyComponent的late变量访问问题解答
问题根源
Flame 1.4版本给BodyComponent的body字段加上了late修饰符,Dart中late变量的语义是变量会在首次使用前完成初始化,且不会被自动赋值为null。你用body?.position ?? Vector2.zero()这种空安全写法之所以报错,是因为静态分析器认为你可能在body未初始化时就访问它——late变量不存在"为null"的状态,要么已初始化有值,要么访问时直接抛出异常,所以?.的空检查在这里完全不生效。
解决方案
直接访问(推荐)
正常情况下,Flame框架会在组件挂载时自动调用createBody()初始化body,所以组件挂载后body一定是可用的,直接写:Vector2 get position => body.position;如果担心提前访问的极端情况,可加断言做运行时检查:
Vector2 get position { assert(body != null, "Body未完成初始化,请勿提前访问"); return body.position; }判断初始化状态后返回默认值
如果你需要在body初始化前返回默认值,可以用BodyComponent提供的hasBody属性判断:Vector2 get position => hasBody ? body.position : Vector2.zero();
内容的提问来源于stack exchange,提问作者matti peter
相关产品推荐
相关产品推荐

