123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import 'dart:convert';
- import 'dart:math';
- import 'package:flutter/material.dart';
- import 'package:flutter_tzh/home/view/YSChooseMapView.dart';
- import 'package:mapbox_gl/mapbox_gl.dart';
- import '../../tool/YSTools.dart';
- class YSMapView extends StatefulWidget {
- final Map location;
- const YSMapView({Key? key, required this.location}) : super(key: key);
- @override
- YSMapViewState createState() => YSMapViewState();
- }
- class YSMapViewState extends State<YSMapView> with WidgetsBindingObserver{
- MapboxMapController? _mapController;
- LatLng _latLng = const LatLng(0, 0);
- bool _isAgree = false;
- _onMapCreated(MapboxMapController controller) {
- _mapController = controller;
- }
- @override
- void initState() {
- WidgetsBinding.instance.addObserver(this);
- _latLng = LatLng(double.parse('${widget.location['latitude']??0}'), double.parse('${widget.location['longitude']??0}'));
- Future.delayed(const Duration(seconds: 1)).then((value) {
- _getLocation();
- });
- super.initState();
- }
- _getLocation() async{
- _isAgree = await permissionHandler('location');
- setState(() {});
- }
- @override
- void dispose() {
- WidgetsBinding.instance.removeObserver(this);
- // if(_mapController!=null){
- // _mapController!.dispose();
- // }
- super.dispose();
- }
- @override
- void didChangeAppLifecycleState(AppLifecycleState state) {
- if(state==AppLifecycleState.paused){
- setState(() {});
- LogUtil.d('didChangeAppLifecycleState=====paused');
- }
- super.didChangeAppLifecycleState(state);
- }
- void onStyleLoaded(MapboxMapController controller) {
- String geo = widget.location['coordinates'];
- Map geoMao = jsonDecode(geo);
- List coordinates = geoMao['coordinates']??[];
- List<LatLng> geometryList = [];
- for (List element in coordinates) {
- for (List elementSub in element) {
- geometryList.add(LatLng(elementSub[1], elementSub[0]));
- }
- }
- Future.delayed(const Duration(seconds: 1), () {
- controller.addSymbol(SymbolOptions(
- geometry: _latLng,
- iconImage: "images/Pointer.png",
- textField: widget.location['name'],
- textColor: "#FFFFFF",
- textOffset: const Offset(0, -2),
- textHaloWidth: 2,
- iconSize: 2,
- // textHaloColor: "#4AE6F0",
- ));
- controller.addLine(
- LineOptions(
- geometry: geometryList,
- lineColor: '#FF9900',
- lineWidth: 4
- )
- );
- controller.onSymbolTapped.add((argument) {
- ysShowBottomAlertView(context, YSChooseMapView(latitude: '${_latLng.latitude}', longitude: '${_latLng.longitude}'));
- });
- });
- }
- @override
- Widget build(BuildContext context) {
- return MapboxMap(
- styleString: MapboxStyles.SATELLITE,
- accessToken: accessToken,
- onMapCreated: _onMapCreated,
- initialCameraPosition: CameraPosition(target: _latLng, zoom: 14.0),
- onStyleLoadedCallback: () => onStyleLoaded(_mapController!),
- scrollGesturesEnabled: true,
- myLocationEnabled: _isAgree,
- attributionButtonMargins: const Point(1000, 0),
- logoViewMargins: const Point(1000, 0),
- // onUserLocationUpdated: (UserLocation location){
- // LogUtil.d('MapboxMap=======${location.position}');
- // _mapController!.addSymbol( SymbolOptions(
- // geometry: location.position,
- // iconImage: "images/Pointer.png",
- // textField: widget.location['位置'],
- // textColor: "#FFFFFF",
- // textOffset: const Offset(0, -2),
- // textHaloWidth: 2,
- // iconSize: 2,
- // // textHaloColor: "#4AE6F0",
- // ));
- // },
- );
- }
- }
|