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

Flutter Android应用无法渲染Google Map的问题求助

问题

我想在Android应用中渲染一个简单的Google Map,已经启用Google Map API并配置到AndroidManifest.xml,也更新了pubspec.yaml和build.gradle文件,但试了多种组合后还是无法在屏幕上显示地图。查了很多资料都没解决,每次执行flutter pub get后会出现依赖版本不兼容提示。

执行flutter pub get的输出

[demo] flutter pub get --no-example
Resolving dependencies...
  google_maps 6.3.0 (7.0.0 available)
  js 0.6.7 (0.7.0 available)
  leak_tracker 10.0.0 (10.0.4 available)
  leak_tracker_flutter_testing 2.0.1 (3.0.3 available)
  leak_tracker_testing 2.0.1 (3.0.1 available)
  meta 1.11.0 (1.12.0 available)
  test_api 0.6.1 (0.7.0 available)
  vm_service 13.0.0 (14.0.0 available)
Got dependencies!
8 packages have newer versions incompatible with dependency constraints.
Try flutter pub outdated for more information.
exit code 0

相关代码配置

main.dart

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 纽约坐标
  LatLng _center = const LatLng(40.7128, -74.0060); 
  final Set<Marker> _markers = {};

  void _onMapCreated(GoogleMapController controller) {
    setState(() {
      _markers.add(
        Marker(
          markerId: MarkerId("my_marker"),
          position: _center,
          infoWindow: InfoWindow(
            title: "Flutter Google Map",
            snippet: "Created by you!",
          ),
        ),
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('My Google Map'),
        ),
        body: GoogleMap(
          onMapCreated: _onMapCreated,
          initialCameraPosition: CameraPosition(
            target: _center,
            zoom: 11.0,
          ),
          markers: _markers,
        ),
      ),
    );
  }
}

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application
        android:label="demo"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher">
        
        <meta-data android:name="com.google.android.geo.API_KEY"
               android:value="API_KEY"/>
        <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">
            <!-- 指定Android进程启动后立即应用于此Activity的主题。在Flutter UI初始化期间,用户会看到此主题。之后,此主题将继续决定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>
        <!-- 不要删除以下meta-data,Flutter工具会用它生成GeneratedPluginRegistrant.java -->
             
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
    <!-- 需要查询可处理文本的Activity,详情参考官方文档。此配置主要用于Flutter引擎的ProcessTextPlugin插件。 -->
    <queries>
        <intent>
            <action android:name="android.intent.action.PROCESS_TEXT"/>
            <data android:mimeType="text/plain"/>
        </intent>
    </queries>
</manifest>

pubspec.yaml

name: demo
description: "一个新的Flutter项目。"
# 以下代码防止包通过`flutter pub publish`意外发布到pub.dev,私有包建议保留此配置
publish_to: "none" # 若要发布到pub.dev,删除此行

# 以下代码定义应用的版本和构建号。版本号是由点分隔的三个数字,如1.2.43,后面可以跟一个由+分隔的可选构建号。
# 在flutter build中,可以通过指定--build-name和--build-number分别覆盖版本号和构建号。
# 在Android中,build-name用作versionName,build-number用作versionCode。
# 在iOS中,build-name用作CFBundleShortVersionString,build-number用作CFBundleVersion。
# 在Windows中,build-name用作产品和文件版本的主版本、次版本和补丁部分,build-number用作构建后缀。
version: 1.0.0+1

environment:
  sdk: ">=3.3.0 <4.0.0"

# 依赖项指定项目运行所需的其他包。
# 若要自动升级依赖到最新版本,可执行`flutter pub upgrade --major-versions`。
# 也可以手动修改版本号为pub.dev上的最新版本,执行`flutter pub outdated`可查看有更新的依赖。
dependencies:
  flutter:
    sdk: flutter
  google_maps_flutter: ^2.5.3

  # 以下依赖添加Cupertino Icons字体到应用中,可通过CupertinoIcons类使用iOS风格图标。
  cupertino_icons: ^1.0.6

dev_dependencies:
  flutter_test:
    sdk: flutter

  # 以下flutter_lints包包含一组推荐的代码规范检查规则,规则集合会在项目根目录的analysis_options.yaml文件中启用。
  # 可在该文件中禁用特定规则或启用额外规则。
  flutter_lints: ^3.0.0

# 关于pubspec文件的通用Dart部分,可查看官方文档。

# 以下部分是Flutter包特有的配置。
flutter:
  # 以下代码确保Material Icons字体包含在应用中,这样就能使用material Icons类中的图标。
  uses-material-design: true
解决方案

1. 升级依赖版本

你当前使用的google_maps_flutter版本^2.5.3较旧,和Flutter SDK(3.3.0+)存在兼容性匹配问题。直接升级到最新稳定版:
修改pubspec.yaml中的依赖:

google_maps_flutter: ^2.6.0 # 或直接查看pub.dev获取最新兼容版本号

执行以下命令更新依赖:

flutter pub upgrade --major-versions
flutter pub get

这会自动处理依赖冲突,更新到符合SDK约束的版本。

2. 验证Google Map API配置

  • 确认AndroidManifest.xml中的API_KEY是有效密钥,且已在Google Cloud控制台启用Maps SDK for Android服务。
  • 检查密钥是否绑定了正确的SHA-1指纹和应用包名(demo),如果密钥限制过严,地图会加载失败。

3. 添加必要的Android权限

在AndroidManifest.xml的<manifest>标签下添加地图加载所需的权限:

<!-- 网络权限,地图加载需要联网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 访问网络状态,判断设备是否联网 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 定位权限(可选,若需使用定位功能则添加) -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

4. 清理并重新构建项目

  • 清理Flutter缓存:
flutter clean
  • 重新构建并运行项目:
flutter build apk
flutter run

5. 优化地图初始化逻辑

你的main.dart代码逻辑无问题,但可将标记初始化提前到initState中,避免onMapCreated中的延迟加载,方便验证地图是否正常渲染:

@override
void initState() {
  super.initState();
  _markers.add(
    Marker(
      markerId: MarkerId("my_marker"),
      position: _center,
      infoWindow: InfoWindow(
        title: "Flutter Google Map",
        snippet: "Created by you!",
      ),
    ),
  );
}

内容的提问来源于stack exchange,提问作者deepak s p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:16:00