我最近有一个需求,我需要测量银条中的子元素与顶部之间的距离,但始终会提示findrendereobject为空。 我什至无法尝试widgetsbinding.instance.addpostframecallback 控制台错误:
:didApplyConstraints
请大家看看发生了什么,为什么不能测量身高〜非常感谢!!!
我的代码:
SKScene Frame-Cycle
答案 0 :(得分:2)
您的全局键通过_body()
方法附加到窗口小部件,但是仅在model.busy = false and model.error = false
时才调用此方法。这意味着globalKeyOne.currentContext
为model.busy = true || model.error = true
时将为空。在所有情况下,您的_afterLayout(...)
都会被调用,这就是NPE失败的原因。
答案 1 :(得分:0)
尝试将其放入构建函数而不是initState()
答案 2 :(得分:0)
使用 widgetsbinding.instance.addpostframecallback
如果将方法getPosition放置在widgetsbinding ...中,则请记住将其添加到getPosition(_)的参数中
由于某些原因,这可行
这是示例代码
import 'package:flutter/material.dart';
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
GlobalKey _akey = GlobalKey();
var top;
var left;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback(_afterLayout);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
height: 200,
width: 300,
key: _akey,
color: Colors.blue,
),
),
);
}
_afterLayout(_) {
_getPosition();
}
_getPosition() async {
final RenderBox rb = _akey.currentContext.findRenderObject();
var position = rb.localToGlobal(Offset.zero);
top = position.dy;
left = position.dx;
print('$left , $top');
}
}