Flutter 在堆栈中覆盖小部件并更改其可见性n按钮单击
我有几个小部件作为堆栈小部件的子部件。我想在堆栈中添加一个OffstageWidget/Visible,并使其在按钮单击时可见和不可见。小部件应显示在地图上方,高度:50 主要的挑战是,当我使用定位来放置小部件时,它仍然可见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
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,
孩子:排(