كيفية استخدام الخرائط في تطبيق Flutter مجانًا باستخدام flutter_map_pick_route_sherifammar
مع تزايد الحاجة إلى تطبيقات تعتمد على الخرائط، مثل تطبيقات التوصيل، تتبع المواقع، الرحلات، الخدمات القريبة، وتحديد المسارات، أصبح وجود حل سهل ومجاني لإضافة الخرائط داخل تطبيق Flutter أمرًا مهمًا لكثير من المطورين.
في العادة، قد يفكر المطور مباشرة في استخدام Google Maps، لكن بعض الخدمات تحتاج إلى إعدادات API وربما ترتبط بتكاليف حسب الاستخدام. لذلك يبحث الكثيرون عن حلول تعتمد على خرائط مفتوحة مثل OpenStreetMap مع مكتبات Flutter جاهزة.
من المكتبات التي تقدم فكرة عملية في هذا المجال مكتبة flutter_map_pick_route_sherifammar، وهي مكتبة Flutter تساعدك على البحث عن الأماكن، اختيار نقطتين على الخريطة، رسم مسار بينهما، وقياس المسافة بالمتر، مع اعتمادها على OpenStreetMap.
تنويه مهم حول عبارة بدون API
رغم أن المكتبة تعتمد على خرائط OpenStreetMap المجانية، إلا أن مثال الاستخدام الرسمي يوضح أنها تحتاج إلى مفتاح من خدمة OpenRouteService داخل الخاصية orsApiKey من أجل إنشاء المسار بين نقطتين.
لذلك يمكن القول إن عرض الخريطة نفسها يعتمد على OpenStreetMap، لكن حساب المسارات في المثال المتاح يحتاج إلى API Key من OpenRouteService. ولهذا السبب، عند استخدام المكتبة في مشروع حقيقي، يجب مراجعة شروط الاستخدام وحدود الاستخدام المجاني للخدمة التي تعتمد عليها في حساب المسارات.
ما هي مكتبة flutter_map_pick_route_sherifammar؟
flutter_map_pick_route_sherifammar هي مكتبة Flutter مفتوحة المصدر تساعد المطورين على إضافة خريطة تفاعلية داخل التطبيق مع إمكانية اختيار المواقع ورسم المسارات بين نقطتين.
بحسب وصف الحزمة على pub.dev، توفر المكتبة إمكانية البحث عن الأماكن، اختيار موقعين مختلفين، إنشاء مسار بين نقطتين، وقياس المسافة بالمتر بينهما، وهي تستخدم OpenStreetMap وتصف نفسها بأنها مجانية وسهلة الاستخدام.
تعتمد المكتبة على مجموعة من الحزم المهمة مثل:
flutter_mapلعرض الخرائط.latlong2للتعامل مع إحداثيات خطوط الطول والعرض.geolocatorوlocationللتعامل مع الموقع.permission_handlerلإدارة صلاحيات الموقع.httpلتنفيذ طلبات الشبكة.
الرابط الرسمي للمكتبة
يمكنك الوصول إلى صفحة المكتبة الرسمية من خلال الرابط التالي:
https://pub.dev/packages/flutter_map_pick_route_sherifammarأهم استخدامات المكتبة
يمكن استخدام flutter_map_pick_route_sherifammar في عدة أنواع من التطبيقات، مثل:
- تطبيقات التوصيل.
- تطبيقات حجز الرحلات.
- تطبيقات تحديد موقع العميل.
- تطبيقات البحث عن الأماكن.
- تطبيقات تتبع المسارات.
- تطبيقات الخدمات الميدانية.
- تطبيقات الخرائط البسيطة التي تحتاج إلى اختيار نقطة أو مسار.
ميزات مكتبة flutter_map_pick_route_sherifammar
1. البحث عن الأماكن
تدعم المكتبة البحث عن المواقع والأماكن، مما يساعد المستخدم على اختيار نقطة معينة بدلًا من الاعتماد فقط على التحريك اليدوي للخريطة.
2. اختيار نقطتين على الخريطة
تسمح المكتبة باختيار نقطتين مختلفتين، مثل نقطة البداية ونقطة النهاية، وهي ميزة مهمة في تطبيقات التوصيل أو الرحلات.
3. رسم مسار بين نقطتين
من أهم وظائف المكتبة أنها تساعد على إنشاء مسار بين نقطتين على الخريطة. هذه الميزة تجعلها مناسبة للتطبيقات التي تحتاج إلى عرض اتجاه أو مسار للمستخدم.
4. حساب المسافة بالمتر
توفر المكتبة إمكانية قياس المسافة بين نقطتين بالمتر، وهي ميزة مفيدة إذا كنت تريد حساب تكلفة توصيل، مدة تقريبية، أو مجرد عرض المسافة للمستخدم.
5. الاعتماد على OpenStreetMap
تعتمد المكتبة على OpenStreetMap من خلال flutter_map، وهذا يجعلها خيارًا مناسبًا لمن يريد استخدام خرائط مفتوحة المصدر داخل تطبيق Flutter.
6. سهولة الاستخدام
المكتبة توفر Widget جاهزًا باسم FlutterMapSearchAndPinkRoute يمكن إضافته مباشرة داخل واجهة التطبيق مع تمرير الإحداثيات ومفتاح OpenRouteService.
تثبيت مكتبة flutter_map_pick_route_sherifammar
لإضافة المكتبة إلى مشروع Flutter، افتح ملف pubspec.yaml وأضف الحزمة داخل قسم dependencies:
dependencies:
flutter_map_pick_route_sherifammar: ^0.0.10
بعد ذلك شغّل الأمر التالي:
flutter pub get
أو يمكنك إضافتها من خلال الأمر:
flutter pub add flutter_map_pick_route_sherifammar
استيراد المكتبة داخل ملف Dart
بعد تثبيت الحزمة، قم باستيرادها في الملف الذي تريد استخدام الخريطة داخله:
import 'package:flutter_map_pick_route_sherifammar/flutter_map_pick_route_sherifammar.dart';
الاستخدام الأساسي للمكتبة
يمكنك استخدام Widget الجاهز FlutterMapSearchAndPinkRoute بهذا الشكل:
FlutterMapSearchAndPinkRoute(
orsApiKey: 'token from openrouteservice web site',
latidedCurrent: 25,
longtideCurrent: 91,
)
في هذا المثال:
orsApiKey: مفتاح OpenRouteService المطلوب لحساب المسار.latidedCurrent: خط العرض للموقع الحالي.longtideCurrent: خط الطول للموقع الحالي.
لاحظ أن أسماء الخصائص كما تظهر في مثال المكتبة تحتوي على كتابة محددة مثل latidedCurrent و longtideCurrent، لذلك يجب استخدامها كما هي في الإصدار الحالي.
مثال كامل داخل تطبيق Flutter
في المثال التالي سنعرض خريطة داخل صفحة بسيطة باستخدام المكتبة:
import 'package:flutter/material.dart';
import 'package:flutter_map_pick_route_sherifammar/flutter_map_pick_route_sherifammar.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Map Route Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MapRoutePage(),
);
}
}
class MapRoutePage extends StatelessWidget {
const MapRoutePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('اختيار مسار على الخريطة'),
),
body: FlutterMapSearchAndPinkRoute(
orsApiKey: 'YOUR_OPENROUTESERVICE_API_KEY',
latidedCurrent: 25,
longtideCurrent: 91,
),
);
}
}
بعد تشغيل التطبيق، تظهر واجهة الخريطة التي تسمح للمستخدم بالتعامل مع المواقع والمسارات حسب الوظائف التي توفرها المكتبة.
الحصول على مفتاح OpenRouteService
لأن المكتبة في مثالها الرسمي تطلب قيمة orsApiKey، ستحتاج إلى الحصول على مفتاح من موقع OpenRouteService إذا أردت استخدام حساب المسارات.
الفكرة العامة تكون كالتالي:
- إنشاء حساب في OpenRouteService.
- إنشاء API Key جديد.
- نسخ المفتاح.
- تمرير المفتاح داخل الخاصية
orsApiKey.
FlutterMapSearchAndPinkRoute(
orsApiKey: 'YOUR_API_KEY_HERE',
latidedCurrent: 25,
longtideCurrent: 91,
)
لا تضع المفتاح الحقيقي مباشرة داخل الكود إذا كان المشروع عامًا أو مفتوح المصدر. من الأفضل حفظه بطريقة آمنة حسب طبيعة مشروعك.
إضافة صلاحيات الموقع في Android
إذا كان التطبيق يحتاج إلى الوصول إلى موقع المستخدم الحالي، يجب إضافة صلاحيات الموقع داخل ملف:
android/app/src/main/AndroidManifest.xml أضف الصلاحيات التالية قبل وسم application:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
وفي بعض الحالات، إذا كنت تحتاج إلى الموقع في الخلفية، فقد تحتاج إلى صلاحيات إضافية، لكن لا تضفها إلا إذا كان التطبيق يحتاجها فعلًا.
إضافة صلاحيات الموقع في iOS
في iOS، يجب إضافة وصف سبب استخدام الموقع داخل ملف:
ios/Runner/Info.plistأضف المفاتيح التالية مع رسالة واضحة للمستخدم:
<key>NSLocationWhenInUseUsageDescription</key>
<string>نحتاج إلى موقعك لعرضه على الخريطة وتحديد المسار.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>نحتاج إلى موقعك لتحسين تجربة استخدام الخرائط داخل التطبيق.</string>
احرص على أن تكون الرسالة واضحة وصادقة، لأن أنظمة التشغيل تراجع سبب طلب الصلاحيات، والمستخدم أيضًا يحتاج إلى معرفة لماذا يطلب التطبيق موقعه.
مثال على وضع الخريطة داخل Container
إذا أردت عرض الخريطة داخل مساحة محددة بدلًا من جعلها تملأ الشاشة بالكامل، يمكنك وضعها داخل Container:
Container(
height: 400,
margin: const EdgeInsets.all(16),
child: FlutterMapSearchAndPinkRoute(
orsApiKey: 'YOUR_OPENROUTESERVICE_API_KEY',
latidedCurrent: 25,
longtideCurrent: 91,
),
)
هذا مفيد في صفحات مثل نموذج إنشاء طلب، حيث تريد أن يختار المستخدم الموقع أو المسار ضمن جزء محدد من الشاشة.
استخدام المكتبة داخل صفحة اختيار الموقع
يمكنك إنشاء صفحة مخصصة لاختيار الموقع أو المسار ثم الرجوع إلى الصفحة السابقة بعد انتهاء المستخدم من الاختيار، حسب ما تدعمه المكتبة وطريقة بناء تطبيقك.
class PickRoutePage extends StatelessWidget {
const PickRoutePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('اختيار المسار'),
),
body: FlutterMapSearchAndPinkRoute(
orsApiKey: 'YOUR_OPENROUTESERVICE_API_KEY',
latidedCurrent: 25,
longtideCurrent: 91,
),
);
}
}
ثم يمكنك فتح الصفحة باستخدام:
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const PickRoutePage(),
),
);
ما الفرق بين عرض الخريطة وحساب المسار؟
من المهم التفريق بين أمرين:
- عرض الخريطة: يمكن أن يتم باستخدام OpenStreetMap من خلال مكتبات مثل
flutter_map. - حساب المسار: يحتاج عادة إلى خدمة Routing مثل OpenRouteService أو غيرها.
لذلك، عندما نقول إن استخدام الخريطة مجاني، فهذا غالبًا يشير إلى عرض طبقات OpenStreetMap. أما حساب المسارات والبحث المتقدم فقد يحتاج إلى خدمة خارجية لها حدود استخدام وشروط خاصة.
هل يمكن استخدام الخرائط بدون Google Maps API؟
نعم، يمكن استخدام خرائط داخل Flutter بدون Google Maps API عن طريق الاعتماد على OpenStreetMap ومكتبات مثل flutter_map. ومكتبة flutter_map_pick_route_sherifammar مبنية حول هذا الاتجاه، لأنها تستخدم OpenStreetMap وتوفر وظائف جاهزة للتعامل مع المسارات.
لكن إذا كنت تريد حساب مسارات بين نقطتين، فقد تحتاج إلى API خاص بخدمة Routing مثل OpenRouteService، كما هو موضح في مثال المكتبة.
مميزات flutter_map_pick_route_sherifammar
- سهلة الاستخدام داخل تطبيقات Flutter.
- تعتمد على OpenStreetMap.
- توفر البحث عن الأماكن.
- تدعم اختيار نقطتين على الخريطة.
- تساعد على رسم مسار بين نقطتين.
- توفر قياس المسافة بالمتر.
- مناسبة للتجارب السريعة والمشاريع الصغيرة والمتوسطة.
عيوب أو ملاحظات قبل الاعتماد عليها
- تحتاج إلى مفتاح
orsApiKeyمن OpenRouteService لحساب المسارات حسب المثال الرسمي. - قد تحتاج إلى اختبارها جيدًا مع الإصدارات الحديثة من Flutter.
- أسماء بعض الخصائص تحتوي على كتابة غير معتادة مثل
latidedCurrentوlongtideCurrent. - قد لا تكون مناسبة إذا كنت تحتاج إلى تحكم متقدم جدًا في تصميم الخريطة والمسارات.
- يجب مراجعة شروط استخدام OpenStreetMap و OpenRouteService قبل إطلاق التطبيق تجاريًا.
نصائح مهمة عند استخدام المكتبة
- اختبر المكتبة على Android و iOS قبل الاعتماد عليها في الإنتاج.
- لا تحفظ API Key داخل مستودع عام.
- تأكد من إضافة صلاحيات الموقع بشكل صحيح.
- استخدم رسائل واضحة عند طلب إذن الموقع من المستخدم.
- اختبر سلوك الخريطة مع الإنترنت الضعيف.
- تأكد من أن حدود الاستخدام المجاني لخدمة Routing مناسبة لتطبيقك.
- استخدم مؤشرات تحميل عند البحث أو حساب المسار.
- وفّر رسالة خطأ واضحة إذا فشل تحميل المسار.
متى تستخدم هذه المكتبة؟
يمكنك استخدام flutter_map_pick_route_sherifammar إذا كنت تريد حلًا سريعًا لإضافة خريطة مع اختيار نقاط ورسم مسار داخل تطبيق Flutter، خصوصًا إذا كان مشروعك في مرحلة تجربة أو نموذج أولي أو تطبيق بسيط.
أما إذا كان تطبيقك يعتمد بشكل كبير على الخرائط، ويحتاج إلى تخصيصات متقدمة، طبقات متعددة، تحكم كامل في المسارات، أو أداء عالي جدًا مع عدد كبير من المستخدمين، فقد يكون من الأفضل دراسة استخدام flutter_map مباشرة وبناء طبقة مخصصة فوقه، أو استخدام حلول خرائط أكثر تخصصًا حسب احتياج المشروع.
مثال عملي مختصر
هذا مثال سريع يمكنك البدء منه:
import 'package:flutter/material.dart';
import 'package:flutter_map_pick_route_sherifammar/flutter_map_pick_route_sherifammar.dart';
class FreeMapExample extends StatelessWidget {
const FreeMapExample({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('خريطة ومسار'),
),
body: FlutterMapSearchAndPinkRoute(
orsApiKey: 'YOUR_OPENROUTESERVICE_API_KEY',
latidedCurrent: 25,
longtideCurrent: 91,
),
);
}
}
الخلاصة
تعتبر مكتبة flutter_map_pick_route_sherifammar خيارًا عمليًا للمطورين الذين يريدون إضافة خرائط ومسارات داخل تطبيقات Flutter بطريقة سهلة وسريعة. فهي تعتمد على OpenStreetMap، وتوفر وظائف مثل البحث عن الأماكن، اختيار نقطتين، رسم المسار، وقياس المسافة بالمتر.
رغم أن عنوان الفكرة قد يكون استخدام الخرائط بدون API مثل Google Maps API، إلا أن حساب المسارات في مثال المكتبة يحتاج إلى مفتاح orsApiKey من OpenRouteService. لذلك يجب التعامل مع المكتبة على أنها حل مجاني أو منخفض التكلفة لعرض الخرائط واختيار المسارات، مع ضرورة مراجعة حدود وشروط الخدمة المستخدمة في التوجيه.
إذا كنت تعمل على تطبيق يحتاج إلى ميزة اختيار موقع أو رسم مسار بشكل سريع، فهذه المكتبة تستحق التجربة، خاصة في المشاريع البسيطة والمتوسطة أو النماذج الأولية التي تحتاج إلى خريطة تفاعلية دون تعقيد كبير.
المصادر
لمشاهده مقاله حزمة Flutter للبحث داخل النص تدعم اللغه العربيه – scroll highlight text





