import 'package:flutter/material.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:latlong2/latlong.dart'; import 'package:geolocator/geolocator.dart'; class OsmMapPickerPage extends StatefulWidget { const OsmMapPickerPage({super.key}); @override State createState() => _OsmMapPickerPageState(); } class _OsmMapPickerPageState extends State { LatLng _pickedLocation = const LatLng(32.649704, 51.668222); final MapController _mapController = MapController(); @override void initState() { super.initState(); _moveToCurrentLocation(); } Future _moveToCurrentLocation() async { try { LocationPermission permission = await Geolocator.checkPermission(); if (permission == LocationPermission.denied || permission == LocationPermission.deniedForever) { permission = await Geolocator.requestPermission(); if (permission == LocationPermission.denied || permission == LocationPermission.deniedForever) { return; } } Position position = await Geolocator.getCurrentPosition( desiredAccuracy: LocationAccuracy.high, ); setState(() { _pickedLocation = LatLng(position.latitude, position.longitude); _mapController.move(_pickedLocation, 15.0); }); } catch (e) { print("Error getting location: $e"); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("موقعیت را روی نقشه مشخص کنید"), actions: [ IconButton( icon: const Icon(Icons.my_location), onPressed: () { _moveToCurrentLocation(); }, ), ], ), body: Stack( children: [ FlutterMap( mapController: _mapController, options: MapOptions( initialCenter: _pickedLocation, initialZoom: 13.0, onTap: (tapPosition, point) { setState(() { _pickedLocation = point; }); }, ), children: [ TileLayer( urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', userAgentPackageName: 'com.example.app', // نام پکیج برنامه شما ), MarkerLayer( markers: [ Marker( width: 80.0, height: 80.0, point: _pickedLocation, child: const Icon( Icons.location_on, color: Colors.red, size: 50.0, ), ), ], ), ], ), Positioned( bottom: 30, left: 50, right: 50, child: ElevatedButton( style: ElevatedButton.styleFrom( padding: const EdgeInsets.symmetric(vertical: 15), ), onPressed: () { Navigator.of(context).pop(_pickedLocation); }, child: const Text("تایید این موقعیت"), ), ), ], ), ); } }