[英]Flutter: TextFormField not filling parent Container widget height
[英]Flutter, Access the padding value of parent container widget
我有一個 GridView 小部件嵌套在一個 SizedBox 小部件內,該小部件嵌套在一個 Container 小部件內
Container(
padding: EdgeInsets.all(10),
alignment: Alignment(0, 0),
child: SizedBox(
width: min(MediaQuery.of(context).size.width,
MediaQuery.of(context).size.height) -
20,
height: min(MediaQuery.of(context).size.width,
MediaQuery.of(context).size.height) -
20,
child: GridView.count(
padding: EdgeInsets.all(0),
crossAxisCount: sqrt(tiles.length).round(),
mainAxisSpacing: 5,
crossAxisSpacing: 5,
children: tiles,
shrinkWrap: true,
),
),
),
Container Widget 的邊緣插入為 10,因此在 SizedBox 中,我希望寬度和高度為最小屏幕寬度/高度減去此邊緣插入(因此為負 20,因為它在每一側)。
如何讀取父小部件的值以便知道它是 edgeInset? MediaQuery 可以通過上下文完成此操作嗎?
我知道我可以更早地將邊緣插入作為變量存儲並在兩個地方使用它,但是當我嘗試學習 Flutter 時,我更好奇是否有辦法讀取父小部件的值/屬性,以便他們的孩子可以隨時參考它們。
如果你提供一些 Widget 一個全局鍵
最終_key = GlobalKey();
Table(
key: _key,
children: _getTableRows(),
);
然后你可以像這樣計算小部件的大小:
void _getSize(_) {
final RenderBox _boardRender = _key.currentContext.findRenderObject();
final boardSize = MediaQuery.of(_key.currentContext).size;
final boardOffset = _boardRender.localToGlobal(Offset.zero);
//print('$boardSize:$boardOffset:$cellSize');
}
你可以看看https://api.flutter.dev/flutter/widgets/LayoutBuilder-class.html
Container
行為有些復雜,因此您的問題的答案將取決於container
的父級是誰。從文檔:
容器嘗試的順序是:遵守對齊,根據子級調整自身大小,遵守寬度、高度和約束,擴展以適應父級,盡可能小。
例如:如果您將容器放在Scaffold
的body
參數中並移除SizedBox
則GridView
將填充屏幕並具有您指定的填充。 (在這種情況下,您甚至不需要Container
而可以使用Padding
小部件。)
更廣泛地說,Flutter 在不同的范式中工作,您不需要“知道”父級的細節,因為您可以將任何小部件放置在任何其他小部件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.