👌

Flutterにおけるネガティブマージン(マイナスマージン)

2023/01/19に公開

Flutterにおけるネガティブマージン(マイナスマージン)

StackOverflowを引用しつつとなりますが、以下のアプローチがありそうです

1. Positioned

前提として、Flutterはマージンの概念はなく、Paddingで構成します。
なので、Flutterはマイナスマージンを直接的にはできないですが、Positioned(cssでいうところの position: 'absolute')で Stack を利用し、重なる形で実装することで擬似的に実装できる。

Container(
  constraints: BoxConstraints.loose(Size.fromHeight(60.0)),
  decoration: BoxDecoration(color: Colors.black), 
  child: 
    Stack(
      alignment: Alignment.topCenter,
      overflow: Overflow.visible,
      children: [
        Positioned(
          top: 10.0,
          left: -15.0,
          right: -15.0,
          child: Text("OUTSIDE CONTAINER", style: TextStyle(color: Colors.red, fontSize: 24.0),)
        )
      ]
    )
)

2. Transform.translate

こっちのほうが認知負荷低くて簡単。個人的にはこちらを使っていきたい。(Positionedはよりレイアウト影響が大きいため)

Transform.translate(
   // e.g: vertical negative margin
   offset: const Offset(-10, 0),
   child: ...
),

Ref

https://stackoverflow.com/questions/48086486/does-flutter-support-negative-margin

Discussion