You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开启MapboxMap的myLocationEnabled导致Flutter安卓应用崩溃

Mapbox Flutter 开启myLocationEnabled后崩溃问题求助

运行包含MapboxMap组件的Flutter安卓应用时,应用可正常运行,但一旦开启myLocationEnabled: true就会崩溃,调试控制台输出错误信息。已正确配置Android文件夹中所有定位权限相关文件。

环境信息

  • 设备:通过无线ADB连接的Pixel 7 Pro
  • 开发环境:Docker中Ubuntu环境的Flutter(容器外也出现相同问题)
  • 依赖版本:
    • mapbox_gl: ^0.16.0
    • permission_handler: ^10.3.0

问题诉求

是否有已知修复方案?还是必须使用geolocator自行收集定位数据?这种方式对地图类应用来说不够优雅。

已尝试AI生成文件、在线教程、Stack Overflow方案等数十种实现,均无效;也试过mapbox_maps_flutter、mapbox-gl-js等其他API,问题依旧。

错误栈

E/Mbgl-MapChangeReceiver(29407): java.lang.IncompatibleClassChangeError: Found interface com.google.android.gms.location.FusedLocationProviderClient, but class was expected (declaration of 'com.google.android.gms.location.FusedLocationProviderClient' appears in /data/app/~~gb-5muDWr4YgcgsimCcKAQ==/com.mvp1.dsco-97NaE_OWQAZrtRkBhF9zRQ==/base.apk)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.android.core.location.GoogleLocationEngineImpl.requestLocationUpdates(GoogleLocationEngineImpl.java:58)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.android.core.location.GoogleLocationEngineImpl.requestLocationUpdates(GoogleLocationEngineImpl.java:26)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.android.core.location.LocationEngineProxy.requestLocationUpdates(LocationEngineProxy.java:34)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxsdk.location.LocationComponent.onLocationLayerStart(LocationComponent.java:1439)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxsdk.location.LocationComponent.enableLocationComponent(LocationComponent.java:1568)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxsdk.location.LocationComponent.setLocationComponentEnabled(LocationComponent.java:551)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxgl.MapboxMapController.enableLocationComponent(MapboxMapController.java:274)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxgl.MapboxMapController.updateMyLocationEnabled(MapboxMapController.java:1563)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxgl.MapboxMapController.access$100(MapboxMapController.java:91)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxgl.MapboxMapController$1.onStyleLoaded(MapboxMapController.java:141)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxsdk.maps.MapboxMap.notifyStyleLoaded(MapboxMap.java:963)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxsdk.maps.MapboxMap.onFinishLoadingStyle(MapboxMap.java:225)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxsdk.maps.MapView$MapCallback.onDidFinishLoadingStyle(MapView.java:1383)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxsdk.maps.MapChangeReceiver.onDidFinishLoadingStyle(MapChangeReceiver.java:198)
E/Mbgl-MapChangeReceiver(29407):    at com.mapbox.mapboxsdk.maps.NativeMapView.onDidFinishLoadingStyle(NativeMapView.java:1166)
E/Mbgl-MapChangeReceiver(29407):    at android.os.MessageQueue.nativePollOnce(Native Method)
E/Mbgl-MapChangeReceiver(29407):    at android.os.MessageQueue.next(MessageQueue.java:335)
E/Mbgl-MapChangeReceiver(29407):    at android.os.Looper.loopOnce(Looper.java:161)
E/Mbgl-MapChangeReceiver(29407):    at android.os.Looper.loop(Looper.java:288)
E/Mbgl-MapChangeReceiver(29407):    at android.app.ActivityThread.main(ActivityThread.java:7918)
E/Mbgl-MapChangeReceiver(29407):    at java.lang.reflect.Method.invoke(Native Method)
E/Mbgl-MapChangeReceiver(29407):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/Mbgl-MapChangeReceiver(29407):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

相关代码(map_page.dart)

import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:mapbox_gl/mapbox_gl.dart';

class MapPage extends StatefulWidget {
  const MapPage({super.key});

  @override
  MapPageState createState() => MapPageState();
}

class MapPageState extends State<MapPage> {
  // Imports the necessary Mapbox data from 'gradle.properties'.
  static const accessToken =
      String.fromEnvironment("MAPBOX_ACCESS_TOKEN", defaultValue: "");
  static const mapStyle = String.fromEnvironment("MAPBOX_STYLE_URL",
      defaultValue: "mapbox://styles/mapbox/dark-v11");

  late bool _locationRequested;
  late bool _locationEnabled;

  MapboxMapController? _mapController;

  @override
  void initState() {
    super.initState();
    _locationRequested = false;
    _locationEnabled = false;

    _getLocationPermission();
  }

  /// Reloads the page once location has been requested and enabled.
  Future<void> _getLocationPermission() async {
    if (!_locationRequested) await Permission.locationWhenInUse.request();

    bool locationGranted = await Permission.locationWhenInUse.isGranted;

    setState(() {
      _locationRequested = true;
      _locationEnabled = locationGranted;
    });
  }

  /// Calls `_buildMap()` if location is enabled;
  /// shows a loading circle otherwise.
  @override
  Widget build(BuildContext context) {
    Widget content =
        _locationEnabled ? _buildMap() : const CircularProgressIndicator();

    return Center(child: content);
  }

  /// Builds and displays the Mapbox map.
  /// (This can only be called if location is enabled.)
  Widget _buildMap() {
    return MapboxMap(
      // Until the camera starts tracking the user's location,
      // the map will center on Athens, Greece.
      initialCameraPosition: const CameraPosition(
        target: LatLng(37.983810, 23.727539),
        zoom: 12.0,
      ),
      accessToken: accessToken,
      onMapCreated: _onMapCreated,
      styleString: mapStyle,
      myLocationEnabled: true, //! Enabling this crashes the app
      myLocationTrackingMode: MyLocationTrackingMode.Tracking,
    );
  }

  void _onMapCreated(MapboxMapController controller) {
    debugPrint("DEBUG | `_onMapCreated()` called");
    // setState(() => _mapController = controller);
    _mapController = controller;
  }
}

内容的提问来源于stack exchange,提问作者S013

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:11:00