当子部件没有参数来改变其布局时,如何使子部件展开以填充堆栈内的父容器?

How do I make a child widget expand to fill a parent container inside of a stack when the child has no parameters to alter its layout?

我正在构建纸牌游戏并使用火焰从精灵中拉出纸牌 sheet。问题是我设置了容纳 SpriteWidget 的容器的宽度和高度,但 SpriteWidget 扩展到容器的宽度或高度,但不是两者。我希望它 expand/stretch 与父容器大小相同。不幸的是,SpriteWidget 确实没有可用于更改其大小的参数。

我花了几个小时在互联网上搜索解决方案并尝试了一些小部件,包括 FittedBoxFlexPositioned.fill 等,但我无法以达到预期的效果。当 SpriteWidget 没有参数时,如何使它伸展以填充其父项?

class _PlayerHandPortraitLayout
    extends WidgetView<PlayerHand, _PlayerHandController> {
  @override
  final state;

  const _PlayerHandPortraitLayout(this.state) : super(state);

  @override
  Widget build(BuildContext build) {
    return Stack(
      children: state.displayHand().asMap().entries.map((cardItem) {
        var index = cardItem.key;
        var card = cardItem.value;
        return Positioned(
          left: index * CARD_OVERLAP_OFFSET,
          child: Draggable<Container>(
            childWhenDragging: Container(),
            child: Container(
              color: Colors.purple,
              width: state.cardWidth,
              height: state.cardHeight,
              child: SpriteWidget(
                sprite: state.spriteImages[card.suite.index][card.value.index],
              ),
            ),
            feedback: Container(
              color: Colors.yellow,
              width: state.cardWidth,
              height: state.cardHeight,
              child: SpriteWidget(
                sprite: state.spriteImages[card.suite.index][card.value.index],
              ),
            ),
          ),
        );
      }).toList(),
    );
  }
}

实际上这是不可能的,SpriteWidget被设计为只要它适合其父级上可用的最小尺寸就可以扩展,你可以查看它的源代码here

这样做是为了当 Sprite 父级的宽高比与 Sprite 的宽高比不同时,Sprite 不会变形。

如果您在某个用例中希望 Sprite 有意变形,请在 Flame 存储库上打开一个问题来解释该案例,我们可以尝试查看它。