إعداد مشروع Flutter

قبل إعداد مشروع Flutter، تأكَّد من إكمال الخطوات الأساسية الواردة ضمن قبل البدء. بعد تفعيل الفوترة وإنشاء مفتاح واجهة برمجة التطبيقات، يمكنك إعداد مشروع Flutter الذي تستخدمه لتطوير تطبيقك.

الخطوة 1: تثبيت البرامج المطلوبة

لإنشاء مشروع باستخدام حزمة "خرائط Google" لـ Flutter، يجب تثبيت حزمة تطوير البرامج (SDK) الخاصة بـ Flutter وإعداد بيئة التطوير للنظام الأساسي المستهدف. يمكنك الاطّلاع على دليل تثبيت Flutter للحصول على التفاصيل.

الخطوة 2: تثبيت حزمة "خرائط Google" لـ Flutter في مشروع جديد

يوفّر Flutter حزمة "خرائط Google" لـ Flutter كمكوّن إضافي لـ Flutter.

أنشئ مشروع Flutter وأضِف إضافة "خرائط Google".

  1. أنشئ مشروع Flutter جديدًا باستخدام الأمر `flutter create`:
      flutter create google_maps_in_flutter --platforms=android,ios,web
      
      Creating project google_maps_in_flutter...
      [Listing of created files elided]
      Wrote 127 files.
    
      All done!
    يمكنك العثور على رمز التطبيق في google_maps_in_flutter/lib/main.dart. لتشغيل تطبيقك، اكتب ما يلي:
      cd google_maps_in_flutter
      flutter run
    يستهدف هذا التطبيق أجهزة iOS وAndroid والويب. لا تتوافق حزمة تطوير البرامج (SDK) الخاصة بـ "خرائط Google" مع تطبيقات الكمبيوتر المكتبي خارج المتصفّح في الوقت الحالي.
  2. أضِف مكوّن حزمة Google Maps for Flutter الإضافي إلى هذا المشروع.
    flutter pub add google_maps_flutter
      
      Resolving dependencies...
      [Listing of dependencies elided]
    
      Changed 14 dependencies!

الخطوة 3: ضبط إصدار النظام الأساسي

Android

اضبط الحد الأدنى لإصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android.

  1. افتح ملف الإعداد android/app/build.gradle في بيئة التطوير المتكاملة (IDE) المفضّلة لديك.
  2. غيِّر قيمة android.defaultConfig.minSdkVersion إلى 21:
      android {
        //...
        defaultConfig {
            applicationId "com.example.google_maps_in_flutter"
            minSdkVersion 21     // Set to 21
            targetSdkVersion flutter.targetSdkVersion
            versionCode flutterVersionCode.toInteger()
            versionName flutterVersionName
        }
        //...
      }
  3. عند ضبط defaultConfig، حدِّد ApplicationID الفريد الخاص بك.
  4. مزامنة تغييرات مشروعك مع Gradle

iOS

اضبط الحدّ الأدنى لإصدار نظام التشغيل iOS.

  1. افتح ملف الإعداد ios/Podfile في بيئة التطوير المتكاملة (IDE) المفضّلة لديك.
  2. أضِف الأسطر التالية إلى بداية ملف Podfile هذا:
      # Set platform to 14.0 to enable latest Google Maps SDK
      platform :ios, '14.0'

الخطوة 4: إضافة مفتاح واجهة برمجة التطبيقات إلى المشروع

في قسم قبل البدء، أنشأت مفتاح واجهة برمجة تطبيقات لتطبيقك. والآن، أضِف هذا المفتاح إلى مشروع Flutter. بالنسبة إلى Flutter، عليك إضافة مفتاح واجهة برمجة التطبيقات هذا إلى جميع الأنظمة الأساسية المستهدَفة: iOS وAndroid والويب.

في الأمثلة التالية، استبدِل YOUR_API_KEY بمفتاح واجهة برمجة التطبيقات.

Android

لتبسيط هذه المهمة، ننصحك باستخدام المكوّن الإضافي Secrets Gradle لأجهزة Android.

لتثبيت المكوّن الإضافي Secrets Gradle لأجهزة Android وتخزين مفتاح واجهة برمجة التطبيقات، اتّبِع الخطوات التالية:

  1. في Android Studio، افتح ملف build.gradle على مستوى الجذر وأضِف الرمز التالي إلى العنصر dependencies ضمن buildscript.

    Groovy

    buildscript {
        dependencies {
            // ...
            classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
        }
    }

    Kotlin

    buildscript {
        dependencies {
            // ...
            classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1")
        }
    }
  2. افتح ملف build.gradle على مستوى التطبيق وأضِف الرمز التالي إلى العنصر plugins.

    Groovy

    plugins {
        id 'com.android.application'
        // ...
        id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
    }

    Kotlin

    plugins {
        id("com.android.application")
        // ...
        id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
    }
  3. إذا كنت تستخدم "استوديو Android"، زامِن مشروعك مع Gradle.
  4. افتح ملف local.properties في دليل مستوى مشروعك، ثم أضِف الرمز التالي. استبدِل YOUR_API_KEY بمفتاح واجهة برمجة التطبيقات.
    MAPS_API_KEY=YOUR_API_KEY
  5. في ملف AndroidManifest.xml، انتقِل إلى com.google.android.geo.API_KEY وعدِّل السمة android:value على النحو التالي:
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${MAPS_API_KEY}" />
        

    ملاحظة:com.google.android.geo.API_KEY هو اسم البيانات الوصفية المقترَح لمفتاح واجهة برمجة التطبيقات. يمكن استخدام مفتاح بهذا الاسم للمصادقة على عدة واجهات برمجة تطبيقات مستندة إلى &quot;خرائط Google&quot; على نظام التشغيل Android، بما في ذلك حزمة تطوير البرامج (SDK) في Flutter. لضمان التوافق مع الأنظمة القديمة، تتيح واجهة برمجة التطبيقات أيضًا استخدام الاسم com.google.android.maps.v2.API_KEY. يتيح هذا الاسم القديم المصادقة على الإصدار 2 من واجهة برمجة التطبيقات Android Maps API فقط. يمكن للتطبيق تحديد اسم واحد فقط من أسماء البيانات الوصفية لمفتاح واجهة برمجة التطبيقات. إذا تم تحديد كليهما، ستعرض واجهة برمجة التطبيقات استثناءً.

ملاحظة: كما هو موضّح أعلاه، com.google.android.geo.API_KEY هو اسم البيانات الوصفية المقترَح لمفتاح واجهة برمجة التطبيقات. يمكن استخدام مفتاح بهذا الاسم للمصادقة على واجهات برمجة تطبيقات متعددة مستندة إلى &quot;خرائط Google&quot; على نظام التشغيل Android، بما في ذلك حزمة تطوير البرامج (SDK) في Flutter. لضمان التوافق مع الأنظمة القديمة، تتيح واجهة برمجة التطبيقات أيضًا استخدام الاسم com.google.android.maps.v2.API_KEY. يتيح هذا الاسم القديم المصادقة على الإصدار 2 من واجهة برمجة التطبيقات Android Maps API فقط. يمكن للتطبيق تحديد اسم واحد فقط من أسماء البيانات الوصفية لمفتاح واجهة برمجة التطبيقات. إذا تم تحديد كليهما، ستعرض واجهة برمجة التطبيقات استثناءً.

iOS

أضِف مفتاح واجهة برمجة التطبيقات إلى ملف AppDelegate.swift.

  1. افتح ملف ios/Runner/AppDelegate.swift في مشروع Flutter باستخدام بيئة التطوير المتكاملة (IDE) المفضّلة لديك.
  2. أضِف عبارة الاستيراد التالية لإضافة حزمة "خرائط Google" لـ Flutter إلى تطبيقك:
  3. import GoogleMaps
  4. أضِف واجهة برمجة التطبيقات إلى طريقتك application(_:didFinishLaunchingWithOptions:)، مع استبدال مفتاح واجهة برمجة التطبيقات بـ YOUR_API_KEY:
    GMSServices.provideAPIKey("YOUR_API_KEY")
  5. احفظ ملف AppDelegate.swift وأغلقه.

يجب أن يشبه ملف AppDelegate.swift المكتمل ما يلي:

import UIKit
import Flutter
import GoogleMaps  // Add this import

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)

    // TODO: Add your Google Maps API key
    GMSServices.provideAPIKey("YOUR_API_KEY")

    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

الويب

أضِف مفتاح واجهة برمجة التطبيقات إلى ملف تطبيق index.html.

  1. افتح ملف web/index.html في مشروع Flutter باستخدام بيئة التطوير المتكاملة (IDE) المفضّلة لديك.
  2. أضِف علامة النص البرمجي التالية داخل العلامة <head>، مع استبدال YOUR_API_KEY بمفتاح واجهة برمجة التطبيقات.
    <script>
      (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
        key: "YOUR_API_KEY",
        v: "weekly",
        // Use the 'v' parameter to indicate the version to use (weekly, beta, alpha, etc.).
        // Add other bootstrap parameters as needed, using camel case.
      });
    </script>
  3. احفظ ملف index.html وأغلقه.

    يجب أن يشبه قسم head الكامل من index.html ما يلي:

        <head>
          <base href="/">
          
          <meta charset="UTF-8">
          <meta content="IE=Edge" http-equiv="X-UA-Compatible">
          <meta name="description" content="A new Flutter project.">
          
          <!-- iOS meta tags & icons -->
          <meta name="apple-mobile-web-app-capable" content="yes">
          <meta name="apple-mobile-web-app-status-bar-style" content="black">
          <meta name="apple-mobile-web-app-title" content="google_maps_in_flutter">
          <link rel="apple-touch-icon" href="icons/Icon-192.png">
          
          <script>
            (g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
              key: "YOUR_API_KEY",
              v: "weekly",
              // Use the 'v' parameter to indicate the version to use (weekly, beta, alpha, etc.).
              // Add other bootstrap parameters as needed, using camel case.
              });
          </script>
          
          <title>google_maps_in_flutter</title>
          <link rel="manifest" href="manifest.json">
        </head>

الخطوة 5: إضافة خريطة

يوضّح الرمز التالي كيفية إضافة خريطة بسيطة إلى تطبيق Flutter جديد.

  1. افتح ملف lib/main.dart في مشروع Flutter باستخدام بيئة التطوير المتكاملة (IDE) المفضّلة لديك.
  2. أضِف طرقًا أو عدِّلها في طريقة التطبيق الرئيسية التلقائية لإنشاء مثيل من mapController وتهيئته.
          import 'package:flutter/material.dart';
          import 'package:google_maps_flutter/google_maps_flutter.dart';
          
          void main() => runApp(const MyApp());
          
          class MyApp extends StatefulWidget {
            const MyApp({super.key});
          
            @override
            State<MyApp> createState() => _MyAppState();
          }
          
          class _MyAppState extends State<MyApp> {
            late GoogleMapController mapController;
          
            final LatLng _center = const LatLng(-33.86, 151.20);
          
            void _onMapCreated(GoogleMapController controller) {
              mapController = controller;
            }
          
            @override
            Widget build(BuildContext context) {
              return MaterialApp(
                home: Scaffold(
                  appBar: AppBar(
                    title: const Text('Maps Sample App'),
                    backgroundColor: Colors.green[700],
                  ),
                  body: GoogleMap(
                    onMapCreated: _onMapCreated,
                    initialCameraPosition: CameraPosition(
                      target: _center,
                      zoom: 11.0,
                    ),
                  ),
                ),
              );
            }
          }
  3. ابدأ أي محاكيات أو أجهزة تريد تشغيل تطبيقك عليها.
  4. شغِّل تطبيقك. من المفترض أن تظهر لك نتيجة مشابهة لما يلي:
      flutter run
    
       
        Multiple devices found:
        Android phone (mobile) • emulator-5554 • android-arm64  • Android 13 (API 33) (emulator)
        iPhone (mobile)  • ios • com.apple.CoreSimulator.SimRuntime.iOS-16-2 (simulator)
        Chrome (web) • chrome • web-javascript • Google Chrome 108.0.5359.124
        [1]: Android phone
        [2]: iPhone
        [3]: Chrome
        
        Please choose one (To quit, press "q/Q"): 

    اكتب رقم النظام الأساسي الذي تريد تشغيله. في كل مرة تستدعي فيها flutter run، سيقدّم لك Flutter هذه الخيارات. إذا لم يكن نظام التطوير يتضمّن محاكيًا قيد التشغيل أو جهاز اختبار متصلاً، من المفترض أن يختار Flutter فتح Chrome.

    يجب أن تعرض كل منصة خريطة في وسطها مدينة سيدني، أستراليا. إذا لم تظهر الخريطة، تأكَّد من أنّك أضفت مفتاح واجهة برمجة التطبيقات إلى المشروع المستهدف المناسب.

الخطوات التالية

بعد الحصول على مفتاح واجهة برمجة تطبيقات ومشروع Flutter، يمكنك إنشاء التطبيقات وتشغيلها. تقدّم حزمة "خرائط Google" لـ Flutter العديد من الأدلة التعليمية والتطبيقات النموذجية التي يمكن أن تساعدك في البدء. لمزيد من المعلومات، يُرجى الاطّلاع على المراجع التالية: