import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hms_gms_availability/flutter_hms_gms_availability.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:huawei_map/map.dart' as hmsMap; class AppMap extends StatefulWidget{ CameraPositionCallback onCameraMove; Map initialCamera; AppMapState _state; AppMap(this.initialCamera, {this.onCameraMove}); @override State createState() => _state = AppMapState(); moveTo({@required CameraPosition cameraPostion}){ if(_state.isHuawei){ final cameraJson = cameraPostion.toMap(); final camera = hmsMap.CameraPosition.fromMap(cameraJson); _state._huaweiMapController.animateCamera(hmsMap.CameraUpdate.newCameraPosition(camera)); }else{ _state.googleMapController.animateCamera(CameraUpdate.newCameraPosition(cameraPostion)); } } } class AppMapState extends State{ bool isHuawei; Completer _googleMapControllerComp = Completer(); GoogleMapController googleMapController; Completer _huaweiMapControllerComp = Completer(); hmsMap.HuaweiMapController _huaweiMapController; checkIsHuawei() async{ isHuawei = await FlutterHmsGmsAvailability.isHmsAvailable; setState(() {}); } @override void initState() { checkIsHuawei(); } @override Widget build(BuildContext context) { if(isHuawei == null) return CircularProgressIndicator(); return map(); } Widget map() => isHuawei ? huaweiMap() : googleMap(); googleMap(){ return GoogleMap( mapType: MapType.normal, zoomControlsEnabled: false, myLocationButtonEnabled: true, myLocationEnabled: true, initialCameraPosition: CameraPosition.fromMap(widget.initialCamera), onCameraMove: widget.onCameraMove, onMapCreated: (GoogleMapController controller) { googleMapController = controller; _googleMapControllerComp.complete(controller); }, ); } Widget huaweiMap(){ return hmsMap.HuaweiMap( mapType: hmsMap.MapType.normal, zoomControlsEnabled: false, myLocationButtonEnabled: true, myLocationEnabled: true, initialCameraPosition: hmsMap.CameraPosition.fromMap(widget.initialCamera), onCameraMove: (camera) => widget.onCameraMove(CameraPosition.fromMap(camera.toMap())), onMapCreated: (controller){ _huaweiMapController = controller; _huaweiMapControllerComp .complete(controller); }, ); } }