当我使用MediaQuery.of(context).padding.top而在小部件树中没有navBar时,它会返回实际的true值。
MediaQuery.of(context).padding.top
Reloaded 1 of 529 libraries in 637ms. I/flutter (31730): 24.0
但是当我把appBar放到widget树中时,它只返回0.0。
Reloaded 1 of 529 libraries in 764ms. I/flutter (31730): 0.0
有人能帮我解释一下为什么会发生这种事吗?
7y4bm7vi1#
从此属性的docs:如果您使用了此填充(例如,通过构建一个小部件,在其布局中封装或考虑此填充,使子部件不再暴露于此填充),则应使用MediaQuery.removePadding工厂插入一个新的MediaQuery小部件,从而为小部件树中的后续后代删除此填充。由于顶部填充由navBar负责,因此它不再暴露给其下方的小部件。
bn31dyow2#
在我的例子中,我传递了padding值,并在Page1中使用了padding.top。
padding
padding.top
Widget build(BuildContext context) { final padding = MediaQuery.of(context).padding; return SafeArea( child: Scaffold( body: IndexedStack( children: [ Page1(padding), Page2(), Page3(), Page4(), ], ),
2条答案
按热度按时间7y4bm7vi1#
从此属性的docs:
如果您使用了此填充(例如,通过构建一个小部件,在其布局中封装或考虑此填充,使子部件不再暴露于此填充),则应使用MediaQuery.removePadding工厂插入一个新的MediaQuery小部件,从而为小部件树中的后续后代删除此填充。
由于顶部填充由navBar负责,因此它不再暴露给其下方的小部件。
bn31dyow2#
在我的例子中,我传递了
padding
值,并在Page1中使用了padding.top
。