google-maps - Flutter Google Maps 多次不必要地重建父小部件
问题描述
我在 Parent Widget 中有 Google Maps Widget,每次 google maps 小部件更新时,父小部件都会重建,在 Navigator.push 上,google maps 小部件会导致父小部件重建 3 次。当我从父小部件中删除谷歌地图小部件时,问题就解决了!
这是我的父小部件代码:
class AptInfo extends StatelessWidget {
@override
Widget build(BuildContext context) {
var data = MediaQuery.of(context);
print('arpts page rebuilt');
return SafeArea(
child: Scaffold(
backgroundColor: Colors.black,
body: Row(children: <Widget>[
Flexible(
child: MenuButts('ARPTS'),
),
Align(
alignment: Alignment.center,
child: Container(
height: 90 * SizeConfig.heightMultiplier,
width: 85 * SizeConfig.widthMultiplier,
child: Column(
children: <Widget>[
Row(
children: <Widget>[
Column(
children: <Widget>[
Container(
padding: EdgeInsets.only(top: 15),
alignment: Alignment.center,
child: Text(
'Search Airports : ',
style: TextStyle(
color: Colors.white,
fontSize:
2.2 * SizeConfig.textMultiplier,
fontWeight: FontWeight.bold),
),
),
Padding(
padding: const EdgeInsets.only(
top: 15, bottom: 5),
child: Container(
alignment: Alignment.center,
child: AutoCompleteAp()),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
width: data.size.width - 90,
height: data.size.height / 3,
alignment: Alignment.center,
child: MapSample()),
),
],
),
],
),
Expanded(
child: Container(
alignment: Alignment.center, child: Rwys())),
],
))),
])));
}
}
这是谷歌地图小部件的代码:
class MapSample extends StatefulWidget {
@override
State<MapSample> createState() => _MapSampleState();
}
class _MapSampleState extends State<MapSample> {
GoogleMapController mapController2;
Position _currentPosition;
@override
Widget build(BuildContext context) {
final AirportsList airsList =
Provider.of<AirportsList>(context, listen: false);
final int myind = Provider.of<AirportsList>(context).selectedInd;
if (myind != null) {
var lat = airsList.airports[airsList.selectedInd].lat;
var long = airsList.airports[airsList.selectedInd].long;
if (mapController2 != null) {
if (_currentPosition.latitude != lat) {
mapController2.animateCamera(CameraUpdate.newCameraPosition(
CameraPosition(target: LatLng(lat, long), zoom: 12)));
print('$lat , $long');
}
}
_currentPosition = Position(latitude: lat, longitude: long);
}
var data = MediaQuery.of(context);
return myind != null
? GoogleMap(
gestureRecognizers: Set()
..add(Factory<PanGestureRecognizer>(() => PanGestureRecognizer()))
..add(Factory<ScaleGestureRecognizer>(
() => ScaleGestureRecognizer()))
..add(Factory<TapGestureRecognizer>(() => TapGestureRecognizer()))
..add(Factory<VerticalDragGestureRecognizer>(
() => VerticalDragGestureRecognizer())),
tiltGesturesEnabled: true,
scrollGesturesEnabled: true,
rotateGesturesEnabled: true,
indoorViewEnabled: false,
myLocationButtonEnabled: false,
myLocationEnabled: false,
mapType: MapType.satellite,
initialCameraPosition: CameraPosition(
target: LatLng(
_currentPosition.latitude, _currentPosition.longitude),
zoom: 12),
onMapCreated: (GoogleMapController controller) {
mapController2 = controller;
},
markers: Set<Marker>.of(airsList.markers),
zoomGesturesEnabled: true,
)
: Container();
}
}
我几乎尝试了一切!仍然无法正常工作。
解决方案
推荐阅读
- ios - 如何从“yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ”格式的日期获取日期字符串?
- c# - 如何在单击按钮时实例化数组中的下一个预制件?
- r - 合并两个不同行的表?
- android - Android Firebase SDK Github 认证
- android - 如何在拨出电话期间播放哔声文件并传输到接收器
- r - 闪亮 - 不能将类型“闭包”强制转换为“字符”类型的向量
- javascript - 放大镜弹出窗口不起作用..所有文件路径都正确
- javascript - 如何将img标签中的图像源设置为图像对象
- javascript - 在带有 knex 的后续查询中使用由输入语句生成的 id
- elasticsearch - 在elasticsearch中对包含空值的嵌套字段进行排序