dart 将渲染对象抖动投射到渲染框

u5rb5r59  于 2022-12-28  发布在  其他
关注(0)|答案(4)|浏览(168)

我试图按照这个tutorial创建一个DropDown。但我不能复制他的代码,因为Flutter 2.0是禁止它,因为我可以这些行:

void findDropdownData() {
    RenderBox renderBox = actionKey.currentContext!.findRenderObject()!;
    height = renderBox.size.height;
    width = renderBox.size.width;
    Offset? offset = renderBox.localToGlobal(Offset.zero);
    xPosition = offset!.dx;
    yPosition = offset.dy;
  }

正如你所看到的,我试着添加一些!?,但它仍然不起作用。主要问题是findRenderObject返回RenderObject,但我需要它是一个RenderBox ...任何想法是什么错在这里?不能弄清楚...

fcg9iug3

fcg9iug31#

解决办法比我想象的要简单:
只需像这样使用as

RenderBox renderBox =
    actionKey.currentContext!.findRenderObject()! as RenderBox;
ux6nzvsh

ux6nzvsh2#

有时候actionkey可能会显示错误,所以简单地使用 * 作为 *

RenderBox renderBox = context.findRenderObject()! as RenderBox;
scyqe7ek

scyqe7ek3#

你也可以添加更多的安全检查,基于@Chris的

RenderObject? obj = context.findRenderObject();
    if (obj == null) {
        return;
    }
    bool isBox = obj is RenderBox;
    if (isBox == false) {
        return;
    }
    RenderBox box = obj as RenderBox;
fd3cxomn

fd3cxomn4#

您也可以这样解决它

final renderBox = actionKey.currentContext!.findRenderObject()! as RenderBox;

相关问题