Как использовать SDK навигации Google в приложениях Flutter

Вопрос или проблема

Навигационный SDK
Ссылка на sdk здесь
https://mapsplatform.google.com/maps-products/navigation-sdk/?utm_source=gamma&utm_medium=email&utm_campaign=GMP-global-Maps-email-of-GMP-gamma-email&utm_content=NavSDK_launch_2024
Создайте навигацию внутри приложения.
Навигационный sdk доступен для нативных iOS и Android, но как я могу использовать его во Flutter для навигации в приложении?

Я пытаюсь использовать навигационный sdk, но не могу использовать его во Flutter. Может кто-нибудь помочь мне?

Ответ или решение

Для использования Google Navigation SDK в приложении Flutter, вам необходимо учесть, что данный SDK изначально предназначен для нативной разработки под iOS и Android. Однако вы можете интегрировать его в ваше Flutter-приложение с помощью платформенных каналов. Вот пошаговое руководство по интеграции Navigation SDK в ваше Flutter-приложение.

Шаг 1: Подготовка проекта

  1. Создайте новый проект Flutter или откройте существующий.
  2. Добавьте необходимые зависимости в файл pubspec.yaml. Убедитесь, что у вас установлены необходимые плагины для работы с Android и iOS.

Шаг 2: Настройка Android

  1. Добавьте зависимости SDK в файл android/app/build.gradle:

    dependencies {
       implementation 'com.google.android.gms:play-services-maps:18.0.0'
       implementation 'com.google.maps.navigation:maps-navigation-sdk:1.0.0' // проверьте актуальную версию
    }
  2. Добавьте необходимые разрешения в файл AndroidManifest.xml:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
  3. Настройте ваш API ключ в AndroidManifest.xml:

    <application>
       <meta-data
           android:name="com.google.android.geo.API_KEY"
           android:value="ВАШ_API_КЛЮЧ"/>
    </application>

Шаг 3: Настройка iOS

  1. Добавьте зависимости SDK в ios/Podfile. Убедитесь, что в вашем Podfile есть необходимые зависимости:

    pod 'GoogleMaps'
    pod 'GoogleMapsNavigation'
  2. Добавьте разрешения в файл Info.plist:

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Мы используем вашу геолокацию для навигации.</string>
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>Мы используем вашу геолокацию для навигации.</string>
  3. Настройте ваш API ключ в Info.plist:

    <key>GMSApiKey</key>
    <string>ВАШ_API_КЛЮЧ</string>

Шаг 4: Создание платформенных каналов

Теперь, когда ваше приложение настроено, вам нужно создать платформенные каналы для общения между Flutter и нативными частями приложения.

  1. Создайте платформенный канал в вашем Dart коде:

    import 'package:flutter/services.dart';
    
    class NavigationService {
     static const platform = MethodChannel('com.example/navigation');
    
     Future<void> startNavigation() async {
       try {
         await platform.invokeMethod('startNavigation');
       } on PlatformException catch (e) {
         print("Ошибка навигации: ${e.message}");
       }
     }
    }
  2. Реализуйте метод на стороне Android:

    В файле вашего MainActivity (MainActivity.kt или MainActivity.java):

    class MainActivity: FlutterActivity() {
       private val CHANNEL = "com.example/navigation"
    
       override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
           super.configureFlutterEngine(flutterEngine)
    
           MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler {
               call, result ->
               if (call.method == "startNavigation") {
                   // Ваш код для инициализации навигации
                   startNavigation()
                   result.success(null)
               }
           }
       }
    
       private fun startNavigation() {
           // Инициализация и запуск Navigation SDK
       }
    }
  3. Реализуйте метод на стороне iOS:

    В файле вашего AppDelegate.swift:

    import Flutter
    import UIKit
    
    @UIApplicationMain
    class AppDelegate: FlutterAppDelegate {
       override func application(
           _ application: UIApplication,
           didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
       ) -> Bool {
           let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
           let navigationChannel = FlutterMethodChannel(name: "com.example/navigation",
                                                         binaryMessenger: controller.binaryMessenger)
           navigationChannel.setMethodCallHandler { (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
               if call.method == "startNavigation" {
                   // Ваш код для инициализации навигации
                   self.startNavigation()
                   result(nil)
               }
           }
           return GeneratedPluginRegistrant.register(with: self) && super.application(application, didFinishLaunchingWithOptions: launchOptions)
       }
    
       private func startNavigation() {
           // Инициализация и запуск Navigation SDK
       }
    }

Шаг 5: Запуск навигации

Теперь, когда вы реализовали платформенные каналы и методы инициализации, вы можете вызывать функцию startNavigation из вашего Flutter кода, что инициирует навигацию с использованием Google Navigation SDK.

Заключение

Хотя Google Navigation SDK не имеет прямой поддержки для Flutter, вы можете легко интегрировать его с помощью платформенных каналов. Убедитесь, что у вас есть актуальные API ключи и правильно настроены разрешения в вашем проекте. Обратите внимание на документацию Google по Navigation SDK для более подробной информации о методах и параметрах, которые вы можете использовать.

Оцените материал
Добавить комментарий

Капча загружается...