根据方向更改支架内容的正确方法

时间:2019-05-12 19:33:35

标签: dart flutter maps

我有一个带有GoogleMap小部件和几个Text小部件的屏幕。我想做的是让地图在不使用AppBar的情况下横向使用整个屏幕,而在纵向方向上限制为Container大小。

现在,我只有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小部件中是否可以有工作手势(滚动,平移等)。

1 个答案:

答案 0 :(得分:0)

如果有人提出有人建议使用此方法,但注释被删除:  
Widget build(BuildContext context) { final isLandScape = MediaQuery.of(context).orientation == Orientation.landscape; return Scaffold( appBar: isLandScape ? null : AppBar( title: Text('Title'), ),
我对Visibility小部件也使用了相同的方法,该方法除了map之外还包括其他小部件:

 visible: isLandScape ? false : true,

与带有地图的容器相同:

Container(
          height: isLandScape ? MediaQuery.of(context).size.height : MediaQuery.of(context).size.height/3,
          child: GoogleMap(
            ///
          ),
        ),

现在看起来可以稳定运行。