dart - 根据方向改变脚手架内容的正确方法
问题描述
我有一个带有 GoogleMap 小部件和几个文本小部件的屏幕。我正在尝试做的是让地图在没有 AppBar 的情况下以横向方式利用整个屏幕,同时在纵向方向上限制为容器大小。
现在我只有 2 个脚手架小部件,它们在每次方向更改时都会重新绘制,并且在几次旋转之后,整个设备会冻结,我必须重新启动它。
Widget build(BuildContext context) {
final mediaQueryData = MediaQuery.of(context);
if (mediaQueryData.orientation == Orientation.landscape) {
return Scaffold(
body:GoogleMap(
...
),
);
}
else{
return Scaffold(
appBar: AppBar(
title: Text('Title'),
),
body: ListView(
scrollDirection: Axis.vertical,
physics: NeverScrollableScrollPhysics(),
children: <Widget>[
Text('Text'),
Text('Text'),
Container(
height: MediaQuery.of(context).size.height/3,
child: GoogleMap(
...
),
),
],
),
);
}
因此,如果有人能指导我以更有效的方式做这样的事情,我将不胜感激。
此外,如果没有,我还想知道是否可以在嵌套在可滚动 ListView 中的 GoogleMap 小部件中使用工作手势(滚动、平移等)。
解决方案
如果有人感兴趣,有人建议使用此方法,但评论被删除:
Widget build(BuildContext context) {
final isLandScape = MediaQuery.of(context).orientation == Orientation.landscape;
return Scaffold(
appBar: isLandScape ? null : AppBar(
title: Text('Title'),
),
我也对包含地图以外的其他小部件的 Visibility 小部件使用了相同的方法:
visible: isLandScape ? false : true,
对于带有地图的容器也是如此:
Container(
height: isLandScape ? MediaQuery.of(context).size.height : MediaQuery.of(context).size.height/3,
child: GoogleMap(
///
),
),
现在似乎工作稳定。
推荐阅读
- java - 将字符串转换为日期时间 java
- azure-functions - 如何为 Zip 部署创建本地 zip 文件到 Azure Functions
- spring - Spring 5 静态资源映射
- python - 未从环境变量中读取机器人令牌
- c# - 需要忽略格式化字符
- ddev - 如何调试失败的附加 Dockerfile?
- css - 即使不需要,“溢出:滚动”也会导致滚动条出现吗?
- html - 两个表格之间的HTML表格宽度差异
- ios - 某天取消每日通知,但其余天仍显示通知
- c# - Entity Framework Core 2.2 使用标量 DBFunction 获取外键列表上的属性