An image widget has no size until its bytes arrive, so it takes up no space at first. The moment it loads, it snaps to its real height and pushes everything below it down:
The fix is always the same idea: decide the image's box before the bytes show up:
You know the ratio. Most images go full width and you know their shape (a 16:9 hero, a 4:3 card). Wrap it in AspectRatio and the height is reserved from the first frame:
A parent already fixes the height. A product card in an e-commerce app with a static height, image on top, text below. Let Expanded hand the image whatever's left: