Карта Google отображается с пустым местоположением даже при наличии действующего ключа API в флаттере при запуске приложAndroid

Форум для тех, кто программирует под Android
Ответить
Гость
 Карта Google отображается с пустым местоположением даже при наличии действующего ключа API в флаттере при запуске прилож

Сообщение Гость »


Я пытаюсь встроить собственное представление карты Google для android в свое приложение flutter. Я знаю, что у нас уже есть google_map_plugin на pub.dev, но чтобы улучшить себя как разработчика, я пытаюсь интегрировать собственный код Android в свое приложение Flutter

Вот мой дартс-код

const myGoogleMapView = 'myGoogleMapView'; класс MyGoogleMapView расширяет StatelessWidget { const MyGoogleMapView({super.key}); @переопределить Сборка виджета (контекст BuildContext) { вернуть Platform.isAndroid ? константный AndroidView( Тип просмотра: мойGoogleMapView, LayoutDirection: TextDirection.ltr, СозданиеПараммы: ноль, CreationParamsCodec: StandardMessageCodec(), ) : const UiKitView( Тип просмотра: мойGoogleMapView, LayoutDirection: TextDirection.ltr, СозданиеПараммы: ноль, CreationParamsCodec: StandardMessageCodec(), ); } } Далее на стороне Android я добавил свой ключ API в manifest, а также разрешение на подключение к Интернету

В MainActivity.kt

класс MainActivity: FlutterActivity() { переопределить удовольствие configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) флаттерДвигатель .platformViewsController .регистрация .registerViewFactory("myGoogleMapView", MyGoogleMapViewFactory(это)) } } Затем я создал MyGoogleMapViewFactory и MyGoogleMapView

class MyGoogleMapViewFactory(private val Activity: FlutterActivity) : PlatformViewFactory(StandardMessageCodec.INSTANCE) { переопределить fun create(context: Context, viewId: Int, args: Any?): PlatformView { val CreationParams = args as Map? вернуть MyGoogleMapView (контекст, viewId, CreationParams, активность) } } класс MyGoogleMapView(контекст: Context, id: Int, CreationParams: Map?,activity: FlutterActivity): PlatformView, OnMapReadyCallback { частный просмотр карты: MapView = MapView(контекст) частный вар загруженныйCallbackPending = ложь частная переменная mMap: GoogleMap? = ноль частный вар currentMarker: Маркер? = ноль переопределить удовольствие getView(): View { вернуть просмотр карты } переопределить удовольствие располагать() {} в этом { val layoutParams: ViewGroup.LayoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) Mapview.layoutParams = LayoutParams Mapview.onCreate (ноль) mapview.getMapAsync(это) } переопределить удовольствие onMapReady(googleMap: GoogleMap) { mMap = GoogleMap val myLocation = LatLng(37.7749, -122.4194) если (currentMarker!= ноль) { текущийМаркер?.remove() } currentMarker = mMap?.addMarker( MarkerOptions().position(myLocation).title("Название маркера") ) mMap?.moveCamera(CameraUpdateFactory.newLatLngZoom(myLocation, 10f)) } частное развлечение validateMapIfNeeded() { if (mMap == null || loadingCallbackPending) { возвращаться } загруженныйCallbackPending = истина mMap!!.setOnMapLoadedCallback { загруженныйCallbackPending = ложь postFrameCallback { postFrameCallback { Mapview.invalidate() } } } } частное развлечение postFrameCallback(f: Runnable) { Choreographer.getInstance().postFrameCallback { f.run() } } } Я просто вижу пустую карту Google с моим маркером. Я на 100% уверен, что мой ключ API правильный, поскольку я использую тот же ключ с тем же именем пакета в своем родном приложении android, и он работает нормально

Я также проверил код плагина карты Google на github, и они написали invalidateMapIfNeeded, который я скопировал и попробовал вызвать его в разных местах, например init, onMapReady и т. д., но у меня не сработало

Также я пытался использовать Hybrid композицию на стороне дротика

вернуть PlatformViewLink( Тип просмотра: мойGoogleMapView, SurfaceFactory: (контекст, контроллер) { вернуть AndroidViewSurface( контроллер: контроллер как AndroidViewController, жестРекознаватели: const {}, hitTestBehavior: PlatformViewHitTestBehavior.opaque, ); }, onCreatePlatformView: (параметры) { вернуть PlatformViewsService.initSurfaceAndroidView( идентификатор: params.id, Тип просмотра: мойGoogleMapView, LayoutDirection: TextDirection.ltr, СозданиеПараммы: ноль, CreationParamsCodec: const StandardMessageCodec(), onFocus: () { params.onFocusChanged(истина); }, ) ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated) ..создавать(); }, ); но это тоже не работает. когда я пытаюсь использовать простые представления, такие как TextView или EditText, со стороны Android, все работает нормально. Не знаю, в чем проблема с картой Google

Журналы здесь, так как я превысил лимит текста

Вывод


Изображение


Еще одна вещь, которую я заметил: когда я запускаю приложение в первый раз, карта Google пуста, как я показал выше, но если я продолжаю выполнять горячую перезагрузку несколько раз, карта начинает отображаться медленно. Посмотрите это видео, чтобы узнать больше
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»