颤振出现在null上调用了方法'findRenderObject'

时间:2020-04-16 02:04:18

标签: flutter dart

我最近有一个需求,我需要测量银条中的子元素与顶部之间的距离,但始终会提示findrendereobject为空。 我什至无法尝试widgetsbinding.instance.addpostframecallback 控制台错误:

:didApplyConstraints 请大家看看发生了什么,为什么不能测量身高〜非常感谢!!! 我的代码:

SKScene Frame-Cycle

3 个答案:

答案 0 :(得分:2)

您的全局键通过_body()方法附加到窗口小部件,但是仅在model.busy = false and model.error = false时才调用此方法。这意味着globalKeyOne.currentContextmodel.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');
  }
}