You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
diplomatic-quarter/lib/widgets/app_map/google_huawei_map.dart

94 lines
2.8 KiB
Dart

import 'dart:async';
import 'package:diplomaticquarterapp/services/pharmacy_services/writeReview_service.dart';
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;
Function onMapCreated;
Function onCameraIdle;
AppMap(this.initialCamera, {this.onCameraMove, this.onMapCreated, this.onCameraIdle});
@override
State<StatefulWidget> 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<AppMap> {
bool isHuawei = false;
Completer<GoogleMapController> _googleMapControllerComp = Completer();
GoogleMapController googleMapController;
Completer<hmsMap.HuaweiMapController> _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();
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();
},
);
}
}