Flutter cast RenderObject to RenderBox

Viewed 3457

I am trying to follow this tutorial creating a DropDown. But I can not copy his code because Flutter 2.0 is forbidding it because I can of these lines:

  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;
  }

As you can see I tried do add some ! and ? but it is still not working. The main issue is that findRenderObject returns RenderObject but I need it to be a RenderBox... Any idea what's wrong here? Can not figure it out..

3 Answers

The solution was easier than I thought:

simply use as like this:

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

Sometimes actionkey may shows error, so simply use as

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

u can also add more safety check, based on @Chris's

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