https://pub.dev/packages/flutter_animarker
哇,这太烦人了。所以Animarker
是我的Google地图的Widget父级。地图上有很多标记。当用户需要从抽屉中找到特定标记时,他们点击项目&它会在相应的标记中触发涟漪效果。
问题是它从未停止波动。如果用户继续点击,它甚至会尝试为几个标记设置动画。
动画刚开始是爱,但现在我要爬墙了!
Animarker(
isActiveTrip: rippleAnimationActive,
rippleRadius: 0.5, //[0,1.0] range, how big is the circle
rippleColor: Colors.teal, // Color of fade ripple circle
rippleDuration: Duration(milliseconds: 2500), //Pulse ripple duration
markers: animatedMarkerSet,
mapId: _mapController.future.then<int>((value) => value.mapId),
child: GoogleMap(
key: Key("myGoogleMap"),
mapType: MapType.hybrid,
initialCameraPosition: _edinburghCamera,
markers: _markers,
myLocationEnabled: true,
onMapCreated: (GoogleMapController controller) {
_mapController.complete(controller);
},
),
),
我在Tap((上触发抽屉项目中的动画:
onTap: () {
animatedMarkerSet = {
RippleMarker(
markerId: MarkerId(presentLocation.name),
position: presentLocation.latLng,
ripple: true) };
setState(() {
presentLocation = _location;
animatedMarkerSet;
rippleAnimationActive = true;
});
//setState(() => _markers.add(marker));
Navigator.of(context).pop();
},
您可以看到,我创建了一个全新的标记来设置动画,并将其添加到已设置动画的MarkerSet中。这很好用。
当用户点击标记时,任何标记都会向上滑动有关位置的详细信息。我尝试停用正在波动的ANY标记。然而,无论我尝试什么,它都不会停止:
setState(() {
rippleAnimationActive = false;
animatedMarkerSet.clear(); // nuke from orbit
}
我还尝试过将animatedMarkerSet更改为Map,并尝试使用以下方法停用波纹:
void newLocationUpdate(LocationDetails oldLocation) {
var marker = RippleMarker(
markerId: MarkerId(oldLocation.name),
position: oldLocation.latLng,
ripple: false,
);
setState(() => animatedMarkerMap[MarkerId(oldLocation.name)] = marker);
}
但这也不起作用。
我真的真的只需要打开和关闭动画。我不明白为什么Animarker对setState()
如此抗拒,让它停止。
事实上,在任何情况下,最好的办法可能是让它运行5秒,然后关闭,但我也不知道如何做到这一点。Grrrr!
好吧,我想明白了。AniMarker是最终的动画标记集。因此,一旦你递给它一组RippleMarkers,它就会为它们设置动画,但你不能通过SetState()
调用将其关闭。
我试着编辑AniMarker类,使其不是最终的,这样你就可以改变它的数据集,但我认为,因为它是建立在GoogleMap的Marker类上的,而且它们是最终的,所以它不会起作用。
因此AniMarker目前的效用有限。
我的工作只是改变谷歌地图marker:
选项,这样我就可以通过更改标记的颜色来突出显示它。也可以更改circles:
GoogleMap选项,根据用户交互动态高亮显示标记。