Flutter Google 地图无法确定设备的当前位置

2024-02-17

我使用 Flutter 的 Geolocator 和 Google Maps 包来确定设备的位置。我利用圆形进度条来等待确定当前位置。一旦确定,Google 地图就会加载已识别的设备位置。

当应用程序加载时,会显示圆形进度条,但尽管显示并接受使用位置服务的通知,但地图并未加载;该应用程序挂在圆形进度条上。我不认为这是 API 问题,因为我已成功加载具有 InitialCameraPosition 中指定的坐标的地图。

设备的位置是否未确定,导致地图无法加载所指示的位置?

我尝试在 Android 模拟器和物理设备上运行该应用程序,但没有成功。

Android Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="smartkart.app.com.coffee">

<!-- io.flutter.app.FlutterApplication is an android.app.Application 
 that
     calls FlutterMain.startInitialization(this); in its onCreate 
  method.
     In most cases you can leave this as-is, but you if you want to   
      provide
     additional functionality it is fine to subclass or reimplement
     FlutterApplication and put your custom class here. -->

 <uses-permission  
 android:name="android.permission.ACCESS_FINE_LOCATION" />



<application
    android:name="io.flutter.app.FlutterApplication"
    android:label="coffee"
    android:icon="@mipmap/ic_launcher">
    <meta-data android:name="com.google.android.geo.API_KEY"
               android:value="API KEY HERE"/>
    <activity../>



Maps Screen

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

class FirstScreen extends StatefulWidget {
 const FirstScreen({Key key}) : super(key: key);

  @override
  State<FirstScreen> createState() => _FirstScreen();
}

class _FirstScreen extends State<FirstScreen> {
  GoogleMapController mapController;

 var currentLocation;


@override
void initState(){
  super.initState();
  Geolocator().getCurrentPosition().then((currloc){
    currentLocation = currloc;
  });
}


  @override
  Widget build(BuildContext context) {
    return currentLocation == null ? Container(
      alignment: Alignment.center,
      child: Center(
        child: CircularProgressIndicator(),
      ),
    ):
      Stack(
      children: <Widget>[
        GoogleMap(
          initialCameraPosition:
           CameraPosition(target: LatLng(currentLocation.latitude,      
              currentLocation.longitude), zoom: 10),
          onMapCreated: _onMapCreated,
          myLocationEnabled: true,
          mapType: MapType.normal,
        ),
      ],
    );
  }



  void _onMapCreated(GoogleMapController controller) {
    setState(() {
      mapController = controller;
    });
  }


}

我希望在显示圆形进度条时出现使用位置服务的通知。确定位置后,InitialCameraPosition 会在地图上显示设备的位置。


尝试以下代码作为解决方案。您可以根据您的用例修改地图小部件:

import 'package:flutter/cupertino.dart';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

class Map extends StatefulWidget {
  @override
  _MapState createState() => _MapState();
}

class _MapState extends State<Map> {
  Completer<GoogleMapController> controller1;

  //static LatLng _center = LatLng(-15.4630239974464, 28.363397732282127);
  static LatLng _initialPosition;
  final Set<Marker> _markers = {};
  static  LatLng _lastMapPosition = _initialPosition;

  @override
  void initState() {
    super.initState();
    _getUserLocation();
  }
  void _getUserLocation() async {
    Position position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    List<Placemark> placemark = await Geolocator().placemarkFromCoordinates(position.latitude, position.longitude);
    setState(() {
      _initialPosition = LatLng(position.latitude, position.longitude);
      print('${placemark[0].name}');
    });
  }


  _onMapCreated(GoogleMapController controller) {
    setState(() {
      controller1.complete(controller);
    });
  }

  MapType _currentMapType = MapType.normal;

  void _onMapTypeButtonPressed() {
    setState(() {
      _currentMapType = _currentMapType == MapType.normal
          ? MapType.satellite
          : MapType.normal;
    });
  }

  _onCameraMove(CameraPosition position) {
    _lastMapPosition = position.target;
  }

  _onAddMarkerButtonPressed() {
    setState(() {
      _markers.add(
          Marker(
              markerId: MarkerId(_lastMapPosition.toString()),
              position: _lastMapPosition,
              infoWindow: InfoWindow(
                  title: "Pizza Parlour",
                  snippet: "This is a snippet",
                  onTap: (){
                  }
              ),
              onTap: (){
              },

              icon: BitmapDescriptor.defaultMarker));
    });
  }
  Widget mapButton(Function function, Icon icon, Color color) {
    return RawMaterialButton(
      onPressed: function,
      child: icon,
      shape: new CircleBorder(),
      elevation: 2.0,
      fillColor: color,
      padding: const EdgeInsets.all(7.0),
    );
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _initialPosition == null ? Container(child: Center(child:Text('loading map..', style: TextStyle(fontFamily: 'Avenir-Medium', color: Colors.grey[400]),),),) : Container(
        child: Stack(children: <Widget>[
          GoogleMap(
            markers: _markers,

            mapType: _currentMapType,
            initialCameraPosition: CameraPosition(
              target: _initialPosition,
              zoom: 14.4746,
            ),
            onMapCreated: _onMapCreated,
            zoomGesturesEnabled: true,
            onCameraMove: _onCameraMove,
            myLocationEnabled: true,
            compassEnabled: true,
            myLocationButtonEnabled: false,

          ),
          Align(
            alignment: Alignment.topRight,
            child: Container(
                margin: EdgeInsets.fromLTRB(0.0, 50.0, 0.0, 0.0),
                child: Column(
                  children: <Widget>[
                    mapButton(_onAddMarkerButtonPressed,
                        Icon(
                            Icons.add_location
                        ), Colors.blue),
                    mapButton(
                        _onMapTypeButtonPressed,
                        Icon(
                          IconData(0xf473,
                              fontFamily: CupertinoIcons.iconFont,
                              fontPackage: CupertinoIcons.iconFontPackage),
                        ),
                        Colors.green),
                  ],
                )),
          )
        ]),
      ),
    );
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter Google 地图无法确定设备的当前位置 的相关文章

  • 从 Chrome 应用程序使用 Google 地图 API

    我正在尝试在 Chrome 应用程序中使用 Google 地图 每当我尝试加载 JavaScript 时 都会收到错误 Refused to load the script https maps googleapis com maps ap
  • 在应用程序开发中缩放字体大小的理想方法是什么?

    我知道这个问题可能听起来有点奇怪 我是 Flutter 开发的新手 在使我的应用程序响应时 我在缩放文本时总是遇到问题 如果我保持字体大小不变 例如 10 或 20 有时在高分辨率设备上看起来太小 在小手机上看起来太大 然后我尝试根据屏幕尺
  • Flutter Firebase 身份验证:启动延迟

    我在应用程序中使用 Provider 和流 FirebaseAuth instance onAuthStateChanged 来决定启动时重定向到哪里 但是尽管用户已经登录 从之前的启动 但应用程序在登录屏幕上启动 几乎 1 秒后重定向到主
  • iOS 有 INTERNET 权限吗?

    我在 iOS 设备上的 flutter dio 包上遇到了一个奇怪的问题 我编写了一个向 url 发送 GET 请求的应用程序 Android 上一切正常 但 iOS 上的请求似乎无法通过 没有发生任何错误 什么也没有 我在 Android
  • 如何在flutter web中实现视频播放?

    我正在尝试在我的 flutter web 应用程序上播放 firebase 上托管的视频 我不明白这怎么可能 使用 flutter 原生 video player使用插件 但仅适用于 ios 和 android 有人可以告诉我是否可以将视频
  • 如何针对 IE 进行优化?

    我有一个 JS 密集型应用程序 它在 IE 中运行缓慢 我将花费大约一周的时间来优化 IE 并且我想要一些关于尝试的方向 我发现这个线程引用Drip https ieleak svn sourceforge net svnroot iele
  • 加载谷歌地图控件时是否有事件?

    我知道tilesloaded 但控件似乎在该事件之后加载 我基本上希望能够通过 jQuery 获取控件 但甚至找不到正确的监听 我也刚刚处理了 没有类似的事件 在控件可见之前空闲和tilesloaded触发 因此 基本上将 特殊控制 类添加
  • 所有侧面的 ElevatedButton 填充不会修改

    我有一个具有以下属性的 ElevatedButton 我在这里附上一张照片 https i stack imgur com oH3pO png https i stack imgur com oH3pO png ElevatedButton
  • flutter:如何使用共享首选项保存 List

    如何持久保存一个列表List
  • Flutter - 将未来列表传递给 SearchDelegate

    我一直在关注 Flutter Search 教程 我一直在尝试使用从未来列表派生的列表来实现相同的功能 其中数据来自 api 在本例中是 Aqueduct 服务器 目前我的屏幕列出了 api 中的所有联系人 我现在想搜索该联系人列表 我假设
  • Android Maps Utils 聚类显示 InfoWindow

    我计划使用 utils 库中提供的谷歌地图标记聚类 但谷歌示例应用程序仅显示标记集群 没有任何信息窗口 我现在想知道 我是否无法显示信息窗口 我希望 InfoWindow 显示在标记上 就像普通的谷歌地图标记一样 而不是显示在集群上 我的代
  • 异常:由于上述问题,无法构建插件 firebase_admob

    我有一个问题 当我在 pubspec yaml 中添加插件 firebase admob 0 11 0 1 时 会出现此错误 失败 构建失败并出现异常 出了什么问题 任务 app processDebugResources 执行失败 执行
  • 无法解析符号 FlutterActivity

    我使用 VCS gt Checkout from Version Control 将 flutter 项目从 github 导入到 Android Studio 中 现在我面临的问题是 Cannot resolve symbol Flutt
  • 带有方向的谷歌静态地图

    我的项目列表中有带有迷你地图的生成地点 地图上应该有 2 个点以及这两点之间的彩色道路方向 它应该看起来像这样 这应该是静态图片 因为页面上会有很多这样的不同方向的图片 但正如我所见 谷歌静态地图不允许绘制这样的图像 两点之间只能有直线 如
  • 如何解决 google 地图中的 addDomListener() 弃用问题

    当我打电话时addDomListener or addDomListenerOnce const domNode document getElementById google maps event addDomListener domNod
  • 使用 Flutter Flavor 运行调试?

    我正在尝试在 Visual Studio 代码上为我的 flutter 应用程序运行调试模式 单击 运行和调试 但是当我这样做时 我面临以下问题 The Xcode project defines schemes release priva
  • 是否可以从图像中获取图像 GPS 位置坐标?

    我正在构建一个 Flutter 应用程序 用户可以在其中发布照片及其位置 用户可以从相机或图库中获取图片 如果用户从相机拍照 我可以使用设备的 GPS 位置来设置图片的位置 我正在尝试根据图片的元数据获取图片的 GSP 位置 但是 我还没有
  • 当前位置 GoogleMap 失败

    我想检查 GPS 是否打开 是否应该显示当前位置 如果没有 它应该要求将其打开 如果用户点击取消或不转动坐标将被设置为基本坐标 不幸的是总是选择基本款 即使 GPS 已关闭 我没有收到打开 GPS 的消息 Override public v
  • 向标记添加自定义属性(Google Map Android API V2)

    使用 Google Map API V3 时 我可以通过以下方式添加自定义属性 var marker new google maps Marker position userLocation map myGoogleMap animatio
  • 显示路由路径名称

    此类中的主要活动注释中显示如下两个错误 import android graphics Color import android os Bundle import com google android maps GeoPoint impor

随机推荐

  • xCode 4.5 和 iOS 6 上的 NSLocalization

    有没有办法像旧版 iOS5 一样在 xCode 4 5 for iOS6 中使用带有 NSLocalizedString KEY 的 Localized strings 这是我的示例代码 在 Localized strings 中 KEY
  • 如何在MVC 3中使用多个Layout?

    我有四种用户 客户 管理员 经理 教师 可以使用我未来的 ASP 网站 因此 我必须为每种用户创建不同的界面 所以我的问题是 在 MVC 3 中使用不同的布局是否正确 如果不是 我可以用什么来解决我的问题 如果正确的话如何在 MVC 3 中
  • 反序列化具有多个元素属性的 XML 文件 - 属性不会反序列化

    使用 C Net 4 XML 示例 真实示例有 6 个属性
  • 遍历元素嵌套结构中的所有 XML 节点

    我有这种 XML 结构 从 JSON 转换的 Esprima ASL 的输出 它可以比这更加嵌套 ASL xml
  • 嵌入式 ruby​​“erb”标签[重复]

    这个问题在这里已经有答案了 我一直在学习 Ruby 和 Ruby on Rails 的速成课程 但我无法弄清楚 在嵌入的 ruby html 文件中 有几个标签 用于执行 用于输出 但是这些标签有什么作用 末尾的 符号是什么呢 Thanks
  • 无效 URI - 如何防止 URI::InvalidURIError 错误?

    我从delayed job 得到以下信息 Worker XXXXXX pid 3720 Class XXXXXXX failed with URI InvalidURIError bad URI is not URI https s3 am
  • 如何在 Angular 2 中重新加载分页页面? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何重新加载 Angular 2 上的当前页面 如果 iam 在第 2 页 分页 并刷新页面 它将显示第 1 页 URL 页面加载 但我想刷
  • 如何使用 Spring JDBC 模板批处理在数据库中进行多次插入?

    我需要一次性在数据库中插入数千条记录 我在我的应用程序中使用 spring JDBC 模板 下面是我到目前为止编写的代码 它一次执行所有插入 因此 如果我有 10 000 个用户 他们就会一次性插入 但我想要的是批量执行它们 例如一批执行
  • Webclient:java.lang.OutOfMemoryError:直接缓冲内存

    我在 Web 客户端收到 java lang OutOfMemoryError Direct buffer memory 错误 批处理作业每天运行 两次失败 第三次就通过了 at org springframework retry supp
  • 按日期范围查询 dynamoDB

    我正在开发一个允许用户读书的应用程序 我正在使用 DynamoDB 来存储用户阅读的书籍的详细信息 并且我计划使用 DynamoDB 中存储的数据来计算统计数据 例如趋势书籍 作者等 我当前的架构如下所示 user id timestamp
  • Rails:如何让 Jquery 在单击后更新数据库列

    首先 我知道我正在尝试做的事情对于 Rails 来说并不典型 我愿意接受更好的替代方案的建议 我是 Rails 新手 所以欢迎提出建议 基本上 我有一个包含 5 个通知的通知栏 用户单击并看到通知后 我想将数据库中名为 saw 的列设置为
  • 片段和片段活动本质上比活动更快吗?

    片段和片段活动本质上比活动更快吗 如果我不需要在片段中加载我的活动 我应该使用 FragmentActivities 和 Fragments over Activity 吗 我问这个问题的原因是因为我多年来一直专门使用 Activity 而
  • Java 8 可选和 flatMap - 有什么问题?

    一些代码 public class Player Team team String name public class Team List
  • TDD 如何处理模拟对象中的更改

    在编写单元测试时 对于单元与之交互的每个对象 我正在采取这些步骤 从我对 JBrains 的理解中窃取 集成测试是一个骗局 http www infoq com presentations integration tests scam 在单
  • Grunt cssmin / CleanCSS 源映射变基

    我使用 cssmin 和以下 内容 文件夹结构 src dir1 style1 css images image1 png dir2 style2 css images image2 png dist styles min css styl
  • Chrome 不显示网站图标

    我无法显示该网站的图标http www lowcoupling com http www lowcoupling com在铬上 我已经用 Safari 检查过 图标显示正确 我应该如何修复它 UPDATE 这是我的 css 的第一部分
  • 用于执行外部 MSBuild 文件的 MSBuild 任务

    我正在尝试设置一个 MSBuild 文件 该文件将调用另一个 MSBuild 文件 我想知道实现此目的的最佳方法是什么 我们在构建服务器下载 MSBuild 文件的情况下使用它 然后根据参数执行相应的第二个文件 我知道我可以使用
  • 针对 Windows Phone ARM 目标的 Clang 交叉编译

    我想使用 Clang 为 Windows Phone ARM 目标编译一个用 C 编写的程序 有人有这方面的经验吗 什么是更好的方法 1 使用 Clang for Windows 和 MinGW 在运行 Windows 8 的主机上构建 C
  • 确定分发这些优惠券的最佳方式的算法是什么?

    这是我的问题 假设我要购买 3 种不同的商品 并且我最多有 5 张优惠券 优惠券可以互换 但用于不同商品时价值不同 以下矩阵给出了在不同商品上花费不同数量的优惠券的结果 coupons 1 2 3 4 5 item 1 10 off 15
  • Flutter Google 地图无法确定设备的当前位置

    我使用 Flutter 的 Geolocator 和 Google Maps 包来确定设备的位置 我利用圆形进度条来等待确定当前位置 一旦确定 Google 地图就会加载已识别的设备位置 当应用程序加载时 会显示圆形进度条 但尽管显示并接受