import 'dart:async'; import 'dart:io'; 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_hmsavailability/huawei_hmsavailability.dart'; import 'package:huawei_map/map.dart' as hmsMap; class AppMap extends StatefulWidget { CameraPositionCallback onCameraMove; Map initialCamera; AppMapState _state; Function onMapCreated; Function onCameraIdle; AppMap(this.initialCamera, {this.onCameraMove, this.onMapCreated, this.onCameraIdle}); @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 = false; Completer _googleMapControllerComp = Completer(); GoogleMapController googleMapController; Completer _huaweiMapControllerComp = Completer(); hmsMap.HuaweiMapController _huaweiMapController; HmsApiAvailability hmsApiAvailability; checkIsHuawei() async { await hmsApiAvailability.isHMSAvailable().then((value) { isHuawei = value == 0 ? true : false; }); print(isHuawei); setState(() {}); } @override void initState() { hmsApiAvailability = HmsApiAvailability(); if (Platform.isAndroid) checkIsHuawei(); super.initState(); } @override Widget build(BuildContext context) { if (isHuawei == null) return CircularProgressIndicator(); return map(); } Widget map() => isHuawei ? huaweiMap() : googleMap(); Widget googleMap() { return GoogleMap( mapType: MapType.normal, zoomControlsEnabled: true, myLocationButtonEnabled: true, myLocationEnabled: true, initialCameraPosition: CameraPosition.fromMap(widget.initialCamera), onCameraMove: widget.onCameraMove, onMapCreated: (GoogleMapController controller) { googleMapController = controller; _googleMapControllerComp.complete(controller); widget.onMapCreated(); }, onCameraIdle: widget.onCameraIdle, ); } 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); widget.onMapCreated(); }, onCameraIdle: () { print("onCameraIdle"); widget.onCameraIdle(); }, ); } }