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とかだと、自動で決定するんかな??という疑問が湧くが、一応目的は達成したので深追いはしないことにした。
ここらへんに詳しい方がいらっしゃいましたら、ご教示お願いします。