#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(), ), ), ], ), ], ); } }