LoginSignup
2
0

【Flutter】StackでPositionedを追加するとなぜかエラーがでる。

Posted at

Positionedを追加するとエラーがでる

Positionedがないときはうまくレンダリングされるのに、Positionedをつけるとエラーが発生するという状況。
簡単な該当プログラムを下に示す。

Stack(
    children:<Widget>[
        Positioned(
            left:10,
            right:10,
            child:Container(
                width: 10,
                height: 10,
                child: MyWidget()//自分で作ったWidget
            )
        )
    ]
)

エラーログとかを調べると、どっかのサイズが無限になっているとかでてくる。
MyWidget()をしているとはいえ、Containerで囲っているからサイズは確定できるはず。なのにサイズが分からないとかワケワカメっていう状態になって、解決に苦労したので備忘録として残しておく。

解決方法

Stackのサイズを指定してあげる必要がある。

以下、ChatGPTの回答。

エラーが発生する原因は、Positionedが使用されるとサイズが有限でなくなり、Stackがその子要素のサイズを決定できなくなることです。Positionedは、Stack内での子要素の配置とサイズを制御するために使用されますが、その際には親要素であるStackのサイズが有限である必要があります。
Positionedウィジェットを使用する際に、親要素であるStackのサイズを指定していない場合や、指定したサイズが有限でない場合にこのエラーが発生します。

ChatGPTの回答を参考に、以下のようにプログラムを変えたら無事に解決した。

Container(
    height: 100,
    width: 100,
    child:Stack(
        children:<Widget>[
            Positioned(
                left:10,
                right:10,
                child:Container(
                    width: 10,
                    height: 10,
                    child: MyWidget()//自分で作ったWidget
                )
            )
        ]
    )
)

まだ残る疑問点

Positionedの使い方を見ていると、Containerで囲っていないやつも見た気がする。
例えば、このサイトなどでは、Containerで囲っていない。bodyとかだと、自動で決定するんかな??という疑問が湧くが、一応目的は達成したので深追いはしないことにした。
ここらへんに詳しい方がいらっしゃいましたら、ご教示お願いします。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0