HarmonyOS鸿蒙Next中flutter如何适配智慧多窗(顶部窗口控制条遮挡)
HarmonyOS鸿蒙Next中flutter如何适配智慧多窗(顶部窗口控制条遮挡) 顶部窗口控制条避让适配智慧多窗 在flutter里,切换智慧多窗时,MediaQuery.of(_context!).padding.top会变成0,这块该如何判断适配?
2 回复
MediaQuery.of(context).padding.top 返回的是Flutter渲染页面被遮挡的部分的尺寸
由于顶部的被遮挡区,通常就是状态栏或者刘海部分,所以这个方法就可以间接来获取状态栏高度。
但是根据MediaQuery的源码看描述,父布局有可能会消耗了这个padding。例如:
上述代码,在Scaffold内部,就拿不到padding了,结果就为0
这种情况下就会发现两次获取的高度都有了并且一致。
所以需要自己根据需要适配的组件,重新做一下获取padding的处理。有些情况下父组件占了padding,被源码手动remove了,就会导致获取不到。
class MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
print('外层获取状态栏高度:${MediaQuery.of(context).padding.top}');
return Scaffold(
// appBar: AppBar(
// backgroundColor: Theme.of(context).colorScheme.inversePrimary,
// title: Text(widget.title),
// ),
body: Builder(
builder: (context) {
print('内层获取状态栏高度:${MediaQuery.of(context).padding.top}');
return const Text('data');
},
),
);
}
}
监听页面长度变化,可以使用 MediaQuery.of(context).size 获取屏幕的宽度和高度。从而动态调整界面元素的大小和位置
class MyWidget extends StatelessWidget {
const MyWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final screenSize = MediaQuery.of(context).size;
return Container(
width: screenSize.width,
height: screenSize.height,
child: Text('Hello, World!'),
);
}
}
更多关于HarmonyOS鸿蒙Next中flutter如何适配智慧多窗(顶部窗口控制条遮挡)的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html