โปรดตรวจสอบว่าคุณได้ทำตามขั้นตอนเบื้องต้น ในส่วน "สิ่งที่ต้องทำก่อนเริ่มต้น" แล้วก่อนที่จะตั้งค่าโปรเจ็กต์ Flutter หลังจากที่คุณเปิดใช้ การเรียกเก็บเงิน และสร้างคีย์ API แล้ว คุณจะตั้งค่าโปรเจ็กต์ Flutter ที่ใช้ พัฒนาแอปได้
ขั้นตอนที่ 1: ติดตั้งซอฟต์แวร์ที่จำเป็น
หากต้องการสร้างโปรเจ็กต์โดยใช้แพ็กเกจ Google Maps สำหรับ Flutter คุณต้องติดตั้ง Flutter SDK และตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์สำหรับแพลตฟอร์มเป้าหมาย ดูรายละเอียดได้จากคู่มือการติดตั้ง Flutter guide
ขั้นตอนที่ 2: ติดตั้งแพ็กเกจ Google Maps สำหรับ Flutter ในโปรเจ็กต์ใหม่
Flutter มีแพ็กเกจ Google Maps สำหรับ Flutter เป็นปลั๊กอิน Flutter
สร้างโปรเจ็กต์ Flutter แล้วเพิ่มปลั๊กอิน Maps
-
สร้างโปรเจ็กต์ Flutter ใหม่โดยใช้ `flutter create`
โค้ดของแอปพลิเคชันจะอยู่ในflutter create google_maps_in_flutter --platforms=android,ios,webCreating project google_maps_in_flutter... [Listing of created files elided] Wrote 127 files. All done!google_maps_in_flutter/lib/main.dartหากต้องการเรียกใช้แอปพลิเคชัน ให้พิมพ์คำสั่งต่อไปนี้ แอปพลิเคชันนี้กำหนดเป้าหมายเป็น iOS, Android และเว็บ ปัจจุบัน Google Maps SDK ยังไม่รองรับแอปพลิเคชันเดสก์ท็อปนอกเบราว์เซอร์cd google_maps_in_flutterflutter run -
เพิ่มปลั๊กอินแพ็กเกจ Google Maps สำหรับ Flutter ลงในโปรเจ็กต์นี้
flutter pub add google_maps_flutterResolving dependencies... [Listing of dependencies elided] Changed 14 dependencies!
ขั้นตอนที่ 3: ตั้งค่าเวอร์ชันแพลตฟอร์ม
Android
ตั้งค่าเวอร์ชัน SDK ขั้นต่ำสำหรับ Android
- เปิดไฟล์การกำหนดค่า
android/app/build.gradleใน IDE ที่ต้องการ - เปลี่ยนค่า
android.defaultConfig.minSdkVersionเป็น21android { //... defaultConfig { applicationId "com.example.google_maps_in_flutter" minSdkVersion 21 // Set to 21 targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName } //... } - เมื่อกำหนดค่า
defaultConfigให้ระบุ ApplicationID ที่ไม่ซ้ำกันของคุณเอง - ซิงค์การเปลี่ยนแปลงโปรเจ็กต์กับ Gradle
iOS
ตั้งค่าเวอร์ชันแพลตฟอร์ม iOS ขั้นต่ำ
- เปิดไฟล์การกำหนดค่า
ios/Podfileใน IDE ที่ต้องการ - เพิ่มบรรทัดต่อไปนี้ที่จุดเริ่มต้นของ Podfile นี้
# Set platform to 14.0 to enable latest Google Maps SDK platform :ios, '14.0'
ขั้นตอนที่ 4: เพิ่มคีย์ API ลงในโปรเจ็กต์
ในส่วน "สิ่งที่ต้องทำก่อนเริ่มต้น" คุณได้สร้างคีย์ API สำหรับแอปแล้ว ตอนนี้ให้เพิ่ม คีย์ดังกล่าวลงในโปรเจ็กต์ Flutter สำหรับ Flutter คุณควรเพิ่มคีย์ API นี้ลงในแพลตฟอร์มเป้าหมายทั้งหมด ได้แก่ iOS, Android และเว็บ
ในตัวอย่างต่อไปนี้ ให้แทนที่ YOUR_API_KEY ด้วยคีย์ API ของคุณ
Android
เราขอแนะนำให้คุณใช้ ปลั๊กอินข้อมูลลับ Gradle สำหรับ Android เพื่อลดความซับซ้อนของงานนี้
วิธีติดตั้งปลั๊กอินข้อมูลลับ Gradle สำหรับ Android และจัดเก็บคีย์ API
-
ใน Android Studio ให้เปิดไฟล์
build.gradleระดับราก แล้วเพิ่มโค้ดต่อไปนี้ลงในองค์ประกอบdependenciesในส่วนbuildscriptGroovy
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") } }
-
เปิดไฟล์
build.gradleระดับแอป แล้วเพิ่มโค้ดต่อไปนี้ลงในองค์ประกอบpluginsGroovy
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") }
- หากใช้ Android Studio ให้ ซิงค์โปรเจ็กต์กับ Gradle
-
เปิดไฟล์
local.propertiesในไดเรกทอรีระดับโปรเจ็กต์ แล้วเพิ่ม โค้ดต่อไปนี้ แทนที่YOUR_API_KEYด้วยคีย์ API ของคุณMAPS_API_KEY=YOUR_API_KEY
-
ในไฟล์
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คือชื่อข้อมูลเมตาที่แนะนำ สำหรับคีย์ API คุณสามารถใช้คีย์ที่มีชื่อนี้เพื่อตรวจสอบสิทธิ์กับ API หลายรายการที่อิงตาม Google Maps ในแพลตฟอร์ม Android รวมถึง Flutter SDK นอกจากนี้ API ยังรองรับชื่อcom.google.android.maps.v2.API_KEYเพื่อให้เข้ากันได้กับรุ่นก่อนหน้า ชื่อเดิมนี้ อนุญาตให้ตรวจสอบสิทธิ์กับ Android Maps API v2 เท่านั้น แอปพลิเคชันสามารถ ระบุชื่อข้อมูลเมตาของคีย์ API ได้เพียงชื่อเดียว หากระบุทั้ง 2 ชื่อ API จะแสดงข้อยกเว้น
หมายเหตุ: ดังที่แสดงไว้ข้างต้น
com.google.android.geo.API_KEY คือชื่อข้อมูลเมตาที่แนะนำ
สำหรับคีย์ API คุณสามารถใช้คีย์ที่มีชื่อนี้เพื่อตรวจสอบสิทธิ์กับ API หลายรายการที่อิงตาม Google Maps ในแพลตฟอร์ม Android รวมถึง
Flutter SDK นอกจากนี้ API ยังรองรับชื่อ com.google.android.maps.v2.API_KEY เพื่อให้เข้ากันได้กับรุ่นก่อนหน้า ชื่อเดิมนี้อนุญาตให้ตรวจสอบสิทธิ์กับ Android Maps API v2 เท่านั้น แอปพลิเคชันสามารถ
ระบุชื่อข้อมูลเมตาของคีย์ API ได้เพียงชื่อเดียว หากระบุทั้ง 2 ชื่อ API
จะแสดงข้อยกเว้น
iOS
เพิ่มคีย์ API ลงในไฟล์ AppDelegate.swift
- เปิดไฟล์
ios/Runner/AppDelegate.swiftในโปรเจ็กต์ Flutter ด้วย IDE ที่ต้องการ - เพิ่มคำสั่งนำเข้าต่อไปนี้เพื่อเพิ่มแพ็กเกจ Google Maps สำหรับ Flutter ลงในแอป
- เพิ่ม API ลงในเมธอด
application(_:didFinishLaunchingWithOptions:)โดยแทนที่ YOUR_API_KEY ด้วยคีย์ APIGMSServices.provideAPIKey("YOUR_API_KEY") - บันทึกและปิดไฟล์
AppDelegate.swift
import GoogleMaps
ไฟล์ 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) } }
เว็บ
เพิ่มคีย์ API ลงในไฟล์แอปพลิเคชัน index.html
- เปิดไฟล์
web/index.htmlในโปรเจ็กต์ Flutter ด้วย IDE ที่ต้องการ - เพิ่มแท็กสคริปต์ต่อไปนี้ภายในแท็ก
<head>โดยแทนที่YOUR_API_KEYด้วยคีย์ API<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>
- บันทึกและปิดไฟล์
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 ใหม่
- เปิดไฟล์
lib/main.dartในโปรเจ็กต์ Flutter ด้วย IDE ที่ต้องการ - เพิ่มหรืออัปเดตเมธอดในเมธอดหลักเริ่มต้นของแอปเพื่อสร้างและเริ่มต้นอินสแตนซ์ของ
mapControllerimport '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, ), ), ), ); } }
- เริ่มโปรแกรมจำลองหรืออุปกรณ์ที่คุณต้องการเรียกใช้แอปพลิเคชัน
- เรียกใช้แอปพลิเคชัน คุณควรเห็นเอาต์พุตที่มีลักษณะดังนี้
flutter runMultiple 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 runFlutter จะแสดงตัวเลือกเหล่านี้ หากระบบการพัฒนาไม่มีโปรแกรมจำลองที่กำลังทำงานอยู่หรืออุปกรณ์ทดสอบที่เชื่อมต่ออยู่ Flutter ควรเลือกเปิด Chromeแต่ละแพลตฟอร์มควรแสดงแผนที่ที่อยู่ตรงกลางซิดนีย์ ประเทศออสเตรเลีย หากไม่เห็นแผนที่ ให้ตรวจสอบว่าคุณได้เพิ่มคีย์ API ลงในโปรเจ็กต์เป้าหมายที่เหมาะสมแล้ว
ขั้นตอนถัดไป
เมื่อมีคีย์ API และโปรเจ็กต์ Flutter แล้ว คุณก็สร้างและเรียกใช้แอปได้ แพ็กเกจ Google Maps สำหรับ Flutter มีบทแนะนำและแอปตัวอย่างมากมายที่จะช่วยให้คุณเริ่มต้นใช้งานได้ ดูข้อมูลเพิ่มเติมได้จากแหล่งข้อมูลต่อไปนี้
- บทแนะนำการเพิ่มแผนที่พร้อมมาร์กเกอร์
- Codelabs สำหรับ Flutter ที่มี Google Maps Platform
- ตัวอย่างโค้ด ใน GitHub