You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.3 KiB
152 lines
4.3 KiB
import 'dart:ui'; |
|
import 'package:flutter/material.dart'; |
|
import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart'; |
|
import 'package:flutter_baidu_mapapi_map/flutter_baidu_mapapi_map.dart'; |
|
import 'package:huixiang/utils/flutter_utils.dart'; |
|
import 'package:huixiang/utils/location.dart'; |
|
import 'package:huixiang/view_widget/my_appbar.dart'; |
|
import 'package:flutter_screenutil/flutter_screenutil.dart'; |
|
|
|
class LocationMap extends StatefulWidget { |
|
final Map<String, String> arguments; |
|
|
|
LocationMap({this.arguments}); |
|
|
|
@override |
|
State<StatefulWidget> createState() { |
|
return _LocationMap(); |
|
} |
|
} |
|
|
|
class _LocationMap extends State<LocationMap> { |
|
@override |
|
void initState() { |
|
super.initState(); |
|
|
|
startLocation(); |
|
} |
|
|
|
void startLocation() async { |
|
Location.getInstance() |
|
.aMapFlutterLocation |
|
.onResultCallback() |
|
.listen((event) { |
|
if (event != null && |
|
event["latitude"] != null && |
|
event["longitude"] != null) { |
|
print("location: $event"); |
|
if (event["latitude"] is String && event["longitude"] is String) { |
|
myLatLng = BMFCoordinate(double.tryParse(event["latitude"]), |
|
double.tryParse(event["longitude"])); |
|
} else { |
|
myLatLng = BMFCoordinate(event["latitude"], event["longitude"]); |
|
} |
|
AppUtils.coordConvert(myLatLng).then((value) { |
|
this.myLatLng = value; |
|
locationShow(); |
|
}); |
|
} |
|
}); |
|
Location.getInstance().prepareLoc(); |
|
Location.getInstance().startLocation(context); |
|
} |
|
|
|
locationShow() { |
|
BMFLocation location = BMFLocation( |
|
coordinate: myLatLng, |
|
altitude: 0, |
|
horizontalAccuracy: 5, |
|
verticalAccuracy: -1.0, |
|
speed: -1.0, |
|
course: -1.0, |
|
); |
|
BMFUserLocation userLocation = BMFUserLocation( |
|
location: location, |
|
); |
|
setState(() { |
|
_mapController.updateLocationData(userLocation); |
|
}); |
|
} |
|
|
|
@override |
|
void dispose() { |
|
super.dispose(); |
|
Location.getInstance().stopLocation(); |
|
} |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Scaffold( |
|
appBar: MyAppBar( |
|
background: Color(0xFFF7F7F7), |
|
title: widget.arguments["storeName"], |
|
titleColor: Colors.black87, |
|
titleSize: 18.sp, |
|
leadingColor: Colors.black, |
|
), |
|
body: Container( |
|
child: BMFMapWidget( |
|
mapOptions: BMFMapOptions( |
|
center: BMFCoordinate( |
|
double.tryParse(widget.arguments["lat"]), |
|
double.tryParse(widget.arguments["lng"]), |
|
), |
|
showZoomControl: false, |
|
showMapScaleBar: false, |
|
zoomLevel: 12, |
|
), |
|
onBMFMapCreated: onMapCreated, |
|
), |
|
), |
|
); |
|
} |
|
|
|
BMFMapController _mapController; |
|
BMFCoordinate latLng; |
|
BMFCoordinate myLatLng; |
|
BMFMarker bmfMarker; |
|
|
|
onMapCreated(BMFMapController controller) { |
|
_mapController = controller; |
|
setState(() { |
|
_mapController.showUserLocation(true); |
|
_mapController.setCustomMapStyle('assets/map_style/chatian.sty', 0); |
|
BMFUserLocationDisplayParam displayParam = BMFUserLocationDisplayParam( |
|
locationViewOffsetX: 0, |
|
locationViewOffsetY: 0, |
|
accuracyCircleFillColor: Colors.red, |
|
accuracyCircleStrokeColor: Colors.blue, |
|
isAccuracyCircleShow: true, |
|
locationViewImage: 'assets/image/icon_my_location.png', |
|
locationViewHierarchy: |
|
BMFLocationViewHierarchy.LOCATION_VIEW_HIERARCHY_BOTTOM, |
|
); |
|
_mapController.updateLocationViewWithParam(displayParam); |
|
addMarker(); |
|
}); |
|
} |
|
|
|
addMarker() async { |
|
// latLng = await AppUtils.coordConvert(BMFCoordinate(double.tryParse(widget.arguments["lat"]), |
|
// double.tryParse(widget.arguments["lng"]))); |
|
latLng = BMFCoordinate(double.tryParse(widget.arguments["lat"]), |
|
double.tryParse(widget.arguments["lng"])); |
|
|
|
if (bmfMarker == null && _mapController != null) { |
|
bmfMarker = BMFMarker( |
|
position: latLng, |
|
centerOffset: BMFPoint(0.5, 0.7), |
|
enabled: false, |
|
icon: "assets/image/icon_map_marker.png", |
|
draggable: false, |
|
); |
|
_mapController.addMarker(bmfMarker); |
|
} |
|
_mapController.updateMapOptions( |
|
BMFMapOptions( |
|
center: latLng, |
|
zoomLevel: 15, |
|
), |
|
); |
|
} |
|
}
|
|
|