Невозможно использовать Карты Google с Flutter

В настоящее время я работаю над приложением, которое решает проблемы общественного транспорта с помощью удобной навигации.

Я нахожусь на самой ранней стадии разработки приложения. У меня возникла проблема с плагином Google Maps. Я создал ключ API в Google Cloud, специально для Google Maps. Идея карты состоит в том, чтобы сделать ее интерактивной, с маркерами и булавками, но сначала мне нужно создать карту.

У меня есть простой класс main.dart, который выглядит следующим образом (раньше в нем было больше элементов, но я безуспешно пытался заставить эту работу работать и поэтому удалил все ненужное):

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MapScreen(),
    );
  }
}

class MapScreen extends StatefulWidget {
  @override
  _MapScreenState createState() => _MapScreenState();
}

class _MapScreenState extends State<MapScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Google Maps in Flutter')),
      body: GoogleMap(
        initialCameraPosition: CameraPosition(
          target: LatLng(37.7749, -122.4194), // San Francisco coordinates
          zoom: 12,
        ),
      ),
    );
  }
}

В моем AndroidManifest.xml я попытался добавить свой ключ:

<manifest xmlns:android = "http://schemas.android.com/apk/res/android">
    <application
        android:label = "test1"
        android:name = "${applicationName}"
        android:icon = "@mipmap/ic_launcher">

          <meta-data
              android:name = "com.google.android.geo.API_KEY"
              android:value = "ActualAPIKeyIDecidedToHide" />
              
        <activity
            android:name = ".MainActivity"
            android:exported = "true"
            android:launchMode = "singleTop"
            android:theme = "@style/LaunchTheme"
            android:configChanges = "orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated = "true"
            android:windowSoftInputMode = "adjustResize">

            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
            <meta-data
              android:name = "io.flutter.embedding.android.NormalTheme"
              android:resource = "@style/NormalTheme"
              />
            <intent-filter>
                <action android:name = "android.intent.action.MAIN"/>
                <category android:name = "android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name = "flutterEmbedding"
            android:value = "2" />
    </application>
    <!-- Required to query activities that can process text, see:
         https://developer.android.com/training/package-visibility?hl=en and
         https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.

         In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
    <queries>
        <intent>
            <action android:name = "android.intent.action.PROCESS_TEXT"/>
            <data android:mimeType = "text/plain"/>
        </intent>
    </queries>
</manifest>

Приложения должны работать правильно и отображать простую карту, но вместо этого она белая (за исключением панели приложения), и в моей КОНСОЛИ ОТЛАДКИ я получаю следующую ошибку:

V/GoogleMapController( 5590): Controller was disposed before GoogleMap was ready.
E/PlatformViewsController( 5590): Disposing platform view threw an exception
E/PlatformViewsController( 5590): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.LinkedList.isEmpty()' on a null object reference
E/PlatformViewsController( 5590):   at com.google.android.gms.dynamic.DeferredLifecycleHelper.zae(com.google.android.gms:play-services-base@@18.0.1:1)
E/PlatformViewsController( 5590):   at com.google.android.gms.dynamic.DeferredLifecycleHelper.onDestroy(com.google.android.gms:play-services-base@@18.0.1:2)
E/PlatformViewsController( 5590):   at com.google.android.gms.maps.MapView.onDestroy(com.google.android.gms:play-services-maps@@18.2.0:1)
E/PlatformViewsController( 5590):   at io.flutter.plugins.googlemaps.GoogleMapController.destroyMapViewIfNecessary(GoogleMapController.java:914)
E/PlatformViewsController( 5590):   at io.flutter.plugins.googlemaps.GoogleMapController.dispose(GoogleMapController.java:600)
E/PlatformViewsController( 5590):   at io.flutter.plugin.platform.PlatformViewsController$1.dispose(PlatformViewsController.java:256)
E/PlatformViewsController( 5590):   at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.dispose(PlatformViewsChannel.java:150)
E/PlatformViewsController( 5590):   at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.onMethodCall(PlatformViewsChannel.java:58)
E/PlatformViewsController( 5590):   at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:267)
E/PlatformViewsController( 5590):   at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:292)
E/PlatformViewsController( 5590):   at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319)
E/PlatformViewsController( 5590):   at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/PlatformViewsController( 5590):   at android.os.Handler.handleCallback(Handler.java:942)
E/PlatformViewsController( 5590):   at android.os.Handler.dispatchMessage(Handler.java:99)
E/PlatformViewsController( 5590):   at android.os.Looper.loopOnce(Looper.java:201)
E/PlatformViewsController( 5590):   at android.os.Looper.loop(Looper.java:288)
E/PlatformViewsController( 5590):   at android.app.ActivityThread.main(ActivityThread.java:7872)
E/PlatformViewsController( 5590):   at java.lang.reflect.Method.invoke(Native Method)
E/PlatformViewsController( 5590):   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/PlatformViewsController( 5590):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
D/EGL_emulation( 5590): app_time_stats: avg=22221.97ms min=118.97ms max=44324.98ms count=2

════════ Exception caught by widgets library ═══════════════════════════════════
The following NoSuchMethodError was thrown building MyApp(dirty):
No constructor '' declared in class 'null'.
Receiver: null
Tried calling: new ()

The relevant error-causing widget was:
    MyApp MyApp:file:///C:/Users/alexa/OneDrive/Skrivbord/test1/lib/main.dart:4:23

When the exception was thrown, this was the stack:
#0      NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:191:5)
#1      MyApp.build (package:test1/main.dart:10:13)
#2      StatelessElement.build (package:flutter/src/widgets/framework.dart:5550:49)

Я также хотел бы упомянуть, что я использую Visual Studio в Windows 11 и эмулятор Pixel 8 Pro.

Я пытался:

  • различные руководства в Интернете, надеясь, что это сработает.

  • создать новый проект и вставить то же самое. Не работает.

  • флаттер чистый и флаттер бегает, тоже не получилось.

  • Повторный импорт Карт Google несколько раз. Тоже не сработало.

  • Изменение settings.gradle minSdkVersion. Решена одна ошибка, но теперь вместо нее появляется вот эта:

ошибка возникла с тем простым кодом, которым вы делитесь, или с другим кодом?, потому что я не могу воспроизвести ошибку с этим кодом

GNassro 12.04.2024 02:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
217
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предоставленный вами код работает отлично. В любом случае попробуйте приведенный ниже код, если это решит вашу проблему.

Создайте контроллер карты Google

  final Completer<GoogleMapController> _controller =
  Completer<GoogleMapController>();

Затем в виджете GoogleMap() используйте этот контроллер, назначив его параметру onMapCreated.

GoogleMap(
    initialCameraPosition: CameraPosition(
      target: LatLng(37.7749, -122.4194), // San Francisco coordinates
      zoom: 12,
    ),
   onMapCreated: (GoogleMapController c) {
              _controller.complete(c);  // <--- Assign controller
          },
  ),

Другие вопросы по теме