Как получить долготу и широту из flutter_map, нажав где-нибудь на карте?

#android #flutter #flutter-dependencies

Вопрос:

Мне нужно вернуть длину и широту после выбора места на карте, поэтому я нажимаю где-то на карте, и она возвращает информацию о широте и широте, я могу запустить карту, добавить места, но я просто не могу выбрать место и получить обратный вызов с этой информацией, я нашел решения для карт googlemap, но не для flutter_map, большое спасибо !!

 import 'package:flutter/material.dart'; import 'package:flutter_map/flutter_map.dart';  import 'package:latlong2/latlong.dart' as latlng; import 'package:flutter_map_tappable_polyline/flutter_map_tappable_polyline.dart';  class MapScreen extends StatefulWidget {  @override  _MapScreenState createState() =gt; _MapScreenState(); }  class _MapScreenState extends Statelt;MapScreengt; {  @override  Widget build(BuildContext context) {  return Scaffold(  appBar: AppBar(  title: Text('Your Map'),  ),  body: FlutterMap(  options: new MapOptions(  center: latlng.LatLng(-23.5732052, -46.6331934),  zoom: 18.0,  plugins: [  TappablePolylineMapPlugin(),  ],  ),  layers: [  TileLayerOptions(  urlTemplate: "https://api.mapbox.com/styles/v1/dxxx/ckwii7q6bxxrauou3d/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoiZGVtaWFuMjAyMSIsImEiOiJjxxxxxxxxxxxxxxxxxxxaWs1In0.2x2m7ka-KZwzBR5XXgYkXQ",  subdomains: ['a', 'b', 'c'],  additionalOptions: {  'accessToken':'pk.eyJ1IjoiZGVxxxxxxxxxxxxxxxxxxxxxxxxxxcHgxNXZoMnB1dGVvOWViaWs1In0.2x2m7ka-KZwzBR5XXgYkXQ',  'id': 'mapbox.mapbox-streets-v8',  },  attributionBuilder: (_) {  return Text("© OpenStreetMap contributors");  },  ),  TappablePolylineLayerOptions(  // Will only render visible polylines, increasing performance  polylineCulling: true,  polylines: [  TaggedPolyline(  points: [latlng.LatLng(-22.5732052, -47.6331934), latlng.LatLng(-22.5732052, -47.6331934)],   tag: "My Polyline", // An optional tag to distinguish polylines in callback  // ...all other Polyline options  ),  ],  onTap: (polylines, tapPosition) =gt; print('Tapped: '    polylines.map((polyline) =gt; polyline.tag).join(',')    ' at '    tapPosition.globalPosition.toString()),   onMiss: (tapPosition) {  print('No polyline was tapped at position '    tapPosition.globalPosition.toString());  }  ),  MarkerLayerOptions(  markers: [  Marker(  width: 40.0,  height: 40.0,  point: latlng.LatLng(-23.5732052, -46.6331934),  builder: (ctx) =gt;  Container(  child: FlutterLogo(),  ),  ),  ],  ),  ],  ),  );  } }  

Ответ №1:

Я использую package:google_maps_flutter пакет, но если вы не хотите использовать этот пакет, процедура все равно должна быть такой же. Просто добавьте ontap() в виджет карты.

 child: GoogleMap(  onTap: (latLng) {  print('${latLng.latitude}, ${latLng.longitude}');  },  

Для вас упаковка выглядит примерно так:

 options: MapOptions(  center: LatLng(45.5231, -122.6765),  zoom: 13.0,  onTap: _handleTap),  

Комментарии:

1. Отличный друг, это сработало

2. Если это сработало для вас, пожалуйста, примите ответ 🙂

Ответ №2:

Спасибо за помощь, это сработало, есть одна вещь, которую я не понял, но в любом случае сработало, это то, что первый аргумент гласит::

функция пустоты(нажатие, задержка)? onTap,

Но если я попытаюсь установить этот тип в своей функции выше в качестве входящего ввода, это не сработает, не знаю почему, поэтому мне пришлось использовать dynamic !?

 void _retPositionMap(dynamic positio, latlng.LatLng direct) {    print(positio.runtimeType);  // print(direct.latitude);  // print(direct.longitude);  }  class _MapScreenState extends Statelt;MapScreengt; {  @override  Widget build(BuildContext context) {  return FlutterMap(  options: MapOptions(  center: latlng.LatLng(-23.569953, -46.635863),  zoom: 14.0,  //onTap: _handleTap,  onTap: _retPositionMap,   ),  layers: [  TileLayerOptions(  urlTemplate: "https://api.mapbox.com/styles/v1/dxx2021/ckwii7q6b284d14s0jrauou3d/tiles/256/{z}/{x}/{y}@2x?access_token=pk.exxjoiZGVtaWFuMjAyxxxxx2cHgxNXZoMnB1dGVvOWViaWs1In0.2x2m7ka-KZwzBR5XXgYkXQ",  // subdomains: ['a', 'b', 'c'],  additionalOptions: {  'accessToken':'pk.eyJ1IjoiZGVtxxxxxxxxiOiJja3dpOGc2cHgxNXZoMnB1dGVvOWViaWs1In0.2x2m7ka-KZwzBR5XXgYkXQ',  'id': 'mapbox.mapbox-streets-v8',  },  // attributionBuilder: (_) {  // return Text("© OpenStreetMap contributors");  // },  ),  MarkerLayerOptions(  markers: [  Marker(  width: 80.0,  height: 80.0,  point: latlng.LatLng(-23.569953, -46.635863),  builder: (ctx) =gt;  Container(  child: FlutterLogo(),  ),  ),  ],  ),  ],  );  } }