RenderBox のドライ レイアウトのサポート
まとめ
という名前の新しいメソッドcomputeDryLayout
に追加されましたRenderBox
プロトコル。
のサブクラスRenderBox
正しくレポートするために実装することが期待されています
のセットが与えられた場合、希望するサイズBoxConstraints
本質的な間
計算。実装するサブクラスcomputeDryLayout
もう必要ありません
オーバーライドperformResize
。
コンテクスト
新しい方法、computeDryLayout
に追加されました。RenderBox
プロトコルへの
の固有サイズを正しく計算するRenderParagraph
とWidgetSpan
子供たちとRenderWrap
。メソッドは次のセットを受け取ります。94ca0935-c779-46d2-a568-0ae805196414と
結果のサイズを計算することが期待されますRenderBox
変えずに
あらゆる内部状態。基本的には予行演習ですperformLayout
それだけ
結果のサイズを計算し、子を配置しません。のcomputeDryLayout
メソッドは組み込みプロトコルの一部です (「RenderBox.computeMinIntrinsicWidth
と友達)。
変更内容の説明
のサブクラスRenderBox
新しいものをオーバーライドする必要があるcomputeDryLayout
方法
の子孫として使用される場合RenderObject
本質的なクエリをクエリする可能性があります
その子のサイズ。これを行うウィジェットの例は次のとおりです。IntrinsicHeight
とIntrinsicWidth
。
デフォルトの実装は、RenderBox.performResize
サイズも使ってます
によって計算されるcomputeDryLayout
サイズ変更を実行します。オーバーライドperformResize
したがって、もはや必要ありません。
移行ガイド
すでにオーバーライドされているサブクラスperformResize
簡単に移行できます
関数シグネチャの変更void performResize()
にSize computeDryLayout(BoxConstraints constraints)
そして返却することで、
サイズを割り当てる代わりに計算されたサイズsize
セッター。老人
の実装performResize
取り外すことができます。
移行前のコード:
@override
void performResize() {
size = constraints.biggest;
}
移行後のコード:
// This replaces the old performResize method.
@override
Size computeDryLayout(BoxConstraints constraints) {
return constraints.biggest;
}
サブクラスがオーバーライドしない場合performResize
、の実装computeDryLayout
から抽出する必要がありますperformLayout
方法。
基本的、computeDryLayout
すべての仕事をする必要があるperformLayout
やってる
のサイズを把握するためにRenderBox
。ただし、それを割り当てる代わりに、
にsize
setter を使用すると、計算されたサイズが返されます。もしもcomputeDryLayout
は子のサイズを知る必要があるため、呼び出してそのサイズを取得する必要があります。getDryLayout
電話をかける代わりに子供に話しかけるlayout
。
何らかの理由でドライレイアウトを計算できない場合は、computeDryLayout
電話しなければなりませんdebugCannotComputeDryLayout
アサート内からダミーを返します
のサイズconst Size(0, 0)
。たとえば、ドライレイアウトを計算することは不可能です
のサイズの場合RenderBox
子のベースライン メトリクスに依存します。
@override
Size computeDryLayout(BoxConstraints constraints) {
assert(debugCannotComputeDryLayout(
reason: 'Layout requires baseline metrics, which are only available after a full layout.'
));
return const Size(0, 0);
}
タイムライン
リリースされたバージョン: 1.25.0-4.0.pre
安定版リリース: 2.0.0
参考文献
API ドキュメント:
RenderBox
computeMinInstrinsicWidth
computeDryLayout
getDryLayout
performResize
RenderWrap
RenderParagraph
関連する問題:
- 問題 48679
関連する PR:
- RenderParagraph および RenderWrap の組み込み関数を修正