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.
 
 
 
 
 
 

150 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"] as String),
double.tryParse(event["longitude"] as String));
} else {
myLatLng = BMFCoordinate(event["latitude"] as double, event["longitude"] as double);
}
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,
),
);
}
}