FlutterMapsArabic

رسم الطرق وتتبع الموقع في Flutter خطوة بخطوة 🛣️

May 17, 20264 min read
Flutter Maps Navigation Cover Image

يا مساء الفل يا شباب! كتير مننا وهو شغال على Apps فيها خرائط (Maps) بيحتاج يعمل "Navigation" بسيط.. يعني عايز يرسم طريق بين نقطتين (مثلاً مكان اليوزر واللوكيشن بتاع الجراج) وكمان يتابع حركة اليوزر وهو ماشي عشان الطريق يتحدث معاه.

النهاردة هشرحلكم إزاي عملت كدة في تطبيق Easy Parking باستخدام flutter_osm_plugin و geolocator.

1 إزاي ترسم "الخط" (الطريق) بين نقطتين؟

في الـ OSM Plugin الموضوع بسيط جداً، فيه ميثود اسمها drawRoad دي بتاخد نقطة البداية والنهاية وبترسم لك "Polyline" بيمشي مع الشوارع الحقيقية، مش مجرد خط مستقيم!

map_service.dart
Future<void> drawRoute(GeoPoint start, GeoPoint end) async {
  await mapController.drawRoad(
    start,
    end,
    roadOption: const RoadOption(
      roadWidth: 10,
      roadColor: Colors.blue,
      zoomInto: true, 
    ),
  );
}

2 إزاي تتبع حركة اليوزر "Real-time"؟

عشان تعرف اليوزر مكانه فين دلوقتي وبيمشي إزاي بنستخدم الـ Geolocator. الفكرة إننا بنفتح "Stream" بيدينا اللوكيشن الجديد كل ما اليوزر يتحرك مسافة معينة.

  • نفتح الـ Stream: بنحدد فيه الـ accuracy والـ distanceFilter (مثلاً كل ما يتحرك 10 متر ابعتلي تحديث)
  • نحدث الخريطة: مع كل نقطة جديدة بنحرك الـ Marker بتاع اليوزر أو بنرسم الطريق تاني لو حابين
location_tracker.dart
void trackUserMovement() {
  Geolocator.getPositionStream(
    locationSettings: const LocationSettings(
      accuracy: LocationAccuracy.high,
      distanceFilter: 10, 
    ),
  ).listen((Position position) {

    final newUserPoint = GeoPoint(
      latitude: position.latitude,
      longitude: position.longitude,
    );
    
    mapController.goToLocation(newUserPoint);
    
    print("اليوزر وصل هنا: ${position.latitude}, ${position.longitude}");
  });
}

ليه الطريقة دي جامدة؟

  • الدقة: الـ drawRoad بتستخدم بيانات OpenStreetMap وبترسم طريق حقيقي.
  • الكفاءة: الـ Geolocator stream خفيف جداً على البطارية لو ظبطت الـ distanceFilter بشكل صحيح.
Abdalrahman Reda

Written by Abdalrahman Reda

Software Engineer specialized in Flutter and Python Backend development. Writing about technology, coding practices, and creating impactful applications.