Flutter 在堆栈中覆盖小部件并更改其可见性n按钮单击

Flutter 在堆栈中覆盖小部件并更改其可见性n按钮单击,flutter,flutter-layout,Flutter,Flutter Layout,我有几个小部件作为堆栈小部件的子部件。我想在堆栈中添加一个OffstageWidget/Visible,并使其在按钮单击时可见和不可见。小部件应显示在地图上方,高度:50 主要的挑战是,当我使用定位来放置小部件时,它仍然可见 body: Stack(children: <Widget>[ Positioned.fill( //if map is empty show empty const loc copsonroad https://st

我有几个小部件作为堆栈小部件的子部件。我想在堆栈中添加一个OffstageWidget/Visible,并使其在按钮单击时可见和不可见。小部件应显示在地图上方,高度:50

主要的挑战是,当我使用定位来放置小部件时,它仍然可见

    body: Stack(children: <Widget>[
        Positioned.fill(
          //if map is empty show empty const loc copsonroad https://stackoverflow.com/a/56227535/10409567
          child: GoogleMap(
            myLocationEnabled: true,
            mapType: MapType.normal,
            onMapCreated: (GoogleMapController controller) async {
              _currentLocation();
              _controller.complete(controller);
            },
            polylines: Set<Polyline>.of(_mapPolylines.values),
            compassEnabled: true,
            myLocationButtonEnabled: true,
            initialCameraPosition: CameraPosition(

              target: LatLng(
                  latitude_current ?? -4.0428, longitude_current ?? 39.6725),
              zoom: 16.0,
            ),
          ),
        ),
...
body:Stack(子项:[
定位填充(
//如果地图为空,则显示空的const loc copsonroadhttps://stackoverflow.com/a/56227535/10409567
孩子:谷歌地图(
myLocationEnabled:对,
mapType:mapType.normal,
onMapCreated:(谷歌地图控制器)异步{
_currentLocation();
_控制器。完成(控制器);
},
多段线:一组(_mappylines.values),
同谋:是的,
myLocationButtonEnabled:正确,
initialCameraPosition:CameraPosition(
目标:拉丁美洲(
纬度-洋流-4.0428,经度-洋流-39.6725),
缩放:16.0,
),
),
),
...
我要添加的小部件

 Offstage(offstage:false,
                  child: Container(
                    height: 50,
                    child: Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: <Widget>[
                        Text(widget.distance),
                        Text(widget.time)
                    ],),
                  ),),
Offstage(Offstage:false,
子:容器(
身高:50,
子级:行(mainAxisAlignment:mainAxisAlignment.space,子级:[
文本(widget.distance),
文本(widget.time)
],),
),),

您可以使用
AnimatedOpacity
小部件进行此操作

body: Stack(children: <Widget>[
        AnimatedOpacity(
          opacity: opacityLevel,// maintain this as state variable
          duration: Duration(seconds: 3),
          child: Positioned.fill(
          //if map is empty show empty const loc copsonroad https://stackoverflow.com/a/56227535/1040956
          child: GoogleMap(
            myLocationEnabled: true,
            mapType: MapType.normal,
            onMapCreated: (GoogleMapController controller) async {
              _currentLocation();
              _controller.complete(controller);
            },
            polylines: Set<Polyline>.of(_mapPolylines.values),
            compassEnabled: true,
            myLocationButtonEnabled: true,
            initialCameraPosition: CameraPosition(

              target: LatLng(
                  latitude_current ?? -4.0428, longitude_current ?? 39.6725),
              zoom: 16.0,
            ),
          ),
        ),
        ),
body:Stack(子项:[
动产能力(
opacity:opacityLevel,//将其作为状态变量维护
持续时间:持续时间(秒数:3),
子:定位。填充(
//如果地图为空,则显示空的const loc copsonroadhttps://stackoverflow.com/a/56227535/1040956
孩子:谷歌地图(
myLocationEnabled:对,
mapType:mapType.normal,
onMapCreated:(谷歌地图控制器)异步{
_currentLocation();
_控制器。完成(控制器);
},
多段线:一组(_mappylines.values),
同谋:是的,
myLocationButtonEnabled:正确,
initialCameraPosition:CameraPosition(
目标:拉丁美洲(
纬度-洋流-4.0428,经度-洋流-39.6725),
缩放:16.0,
),
),
),
),
有关这方面的更多信息,请参见此处的官方文档和示例

您可以使用
AnimatedOpacity
小部件进行此操作

body: Stack(children: <Widget>[
        AnimatedOpacity(
          opacity: opacityLevel,// maintain this as state variable
          duration: Duration(seconds: 3),
          child: Positioned.fill(
          //if map is empty show empty const loc copsonroad https://stackoverflow.com/a/56227535/1040956
          child: GoogleMap(
            myLocationEnabled: true,
            mapType: MapType.normal,
            onMapCreated: (GoogleMapController controller) async {
              _currentLocation();
              _controller.complete(controller);
            },
            polylines: Set<Polyline>.of(_mapPolylines.values),
            compassEnabled: true,
            myLocationButtonEnabled: true,
            initialCameraPosition: CameraPosition(

              target: LatLng(
                  latitude_current ?? -4.0428, longitude_current ?? 39.6725),
              zoom: 16.0,
            ),
          ),
        ),
        ),
body:Stack(子项:[
动产能力(
opacity:opacityLevel,//将其作为状态变量维护
持续时间:持续时间(秒数:3),
子:定位。填充(
//如果地图为空,则显示空的const loc copsonroadhttps://stackoverflow.com/a/56227535/1040956
孩子:谷歌地图(
myLocationEnabled:对,
mapType:mapType.normal,
onMapCreated:(谷歌地图控制器)异步{
_currentLocation();
_控制器。完成(控制器);
},
多段线:一组(_mappylines.values),
同谋:是的,
myLocationButtonEnabled:正确,
initialCameraPosition:CameraPosition(
目标:拉丁美洲(
纬度-洋流-4.0428,经度-洋流-39.6725),
缩放:16.0,
),
),
),
),
有关这方面的更多信息,请参见此处的官方文档和示例

这是我的实现,单击FAB按钮显示隐藏到标签

Completer\u controller=Completer();
静态最终摄像机位置_kGooglePlex=摄像机位置(
目标:拉丁美洲(37.42796133580664,-122.085749655962),
缩放:14.4746,
);
布尔可见=真;
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
appBar:appBar(
标题:文本(“导航演示”),
),
主体:堆栈(
儿童:[
谷歌地图(
myLocationEnabled:对,
mapType:mapType.normal,
onMapCreated:(谷歌地图控制器)异步{
_控制器。完成(控制器);
},
同谋:是的,
myLocationButtonEnabled:正确,
initialCameraPosition:_kGooglePlex,
),
可见度(
可见的,可见的,
子:容器(
颜色:Colors.lime,
身高:50,
孩子:排(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
文本('45'),
文本(“10”),
],
),
),
),
],
),
浮动操作按钮:浮动操作按钮(
已按下:(){
设置状态(){
可见=!可见;
});
},
),
);
}

这是我的实现,单击FAB按钮显示隐藏到标签

Completer\u controller=Completer();
静态最终摄像机位置_kGooglePlex=摄像机位置(
目标:拉丁美洲(37.42796133580664,-122.085749655962),
缩放:14.4746,
);
布尔可见=真;
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
appBar:appBar(
标题:文本(“导航演示”),
),
主体:堆栈(
儿童:[
谷歌地图(
myLocationEnabled:对,
mapType:mapType.normal,
onMapCreated:(谷歌地图控制器)异步{
_控制器。完成(控制器);
},
同谋:是的,
myLocationButtonEnabled:正确,
initialCameraPosition:_kGooglePlex,
),
可见度(
可见的,可见的,
子:容器(
颜色:Colors.lime,
身高:50,
孩子:排(