【问题标题】:Flutter geolocation not showing anything颤振地理位置没有显示任何内容
【发布时间】:2021-02-06 18:39:11
【问题描述】:

我是新来的颤振并试图创建一个地理位置。 但是,对于我的以下代码,屏幕仅显示“正在加载..请稍候..”并且地图未显示。

我只是想使用依赖项显示当前位置

地理定位器:^6.1.1

使用来自

的代码

https://codelabs.developers.google.com/codelabs/google-maps-in-flutter#3

可以成功显示谷歌地图。所以这不是与 Google Maps Platform 相关的问题。

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

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  bool mapToggle = false;
  var currentLocation;
  GoogleMapController mapController;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    Geolocator.getCurrentPosition().then((currloc) {
      setState(() {
        currentLocation = currloc;
        mapToggle = true;
      });
    });
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: Column(children: <Widget>[
        Stack(
          children: <Widget>[
            Container(
                height: MediaQuery.of(context).size.height - 80.0,
                width: double.infinity,
                child: mapToggle
                    ? GoogleMap(
                        onMapCreated: _onMapCreated,
                        initialCameraPosition: CameraPosition(
                            target: LatLng(currentLocation.latitude,
                                currentLocation.longitude),
                            zoom: 10.0))
                    : Center(
                        child: Text(
                        'Loading.. Please wait..',
                        style: TextStyle(fontSize: 20.0),
                      )))
          ],
        )
      ]),
    );
  }
}

【问题讨论】:

  • 您是否通过在 setState 中打印当前位置的值来验证您实际获得了位置值?原因是您没有请求用户访问其位置的权限。我可能错了,但这将是一个很好的起点。另外,出于定位的目的,我通常使用名为 location 的包,它可以让您请求用户许可,也许 geolocate 也有它...

标签: flutter dart dart-pub google-geolocation


【解决方案1】:

在您的 AndroidManifest 添加权限

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

初始化变量

Position _currentPosition;

复制此函数并在 initState 中调用此函数

_getCurrentLocation() async{
   Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
        .then((Position position) {
      setState(() {
        _currentPosition = position;
     
      });

    
    }).catchError((e) {
      print(e);
    });
  }

如需了解更多信息,请查看他们的 pub.dev 网站 geolocatorunder 使用情况,确保为 android 和 ios 正确设置

【讨论】:

  • 谢谢。 Android Studio 显示 getCurrentPosition 已弃用。应该是 Geolocator.getCurrentPosition
  • 这个代码在我的项目中使用了 1 个月前,我想我也需要更新它,如果这对你有帮助,请投票给答案,我也更新了答案@eagle
【解决方案2】:

正如@theredcap 在他的评论中已经指出的那样,您很可能没有必要的权限。请务必阅读您正在使用的插件的documentation

我没看到:

LocationPermission permission = await Geolocator.checkPermission();

我也看不到:

LocationPermission permission = await Geolocator.requestPermission();

完全在您的代码中,但插件文档清楚地解释了该部分。另外,如果您是 Android 新手,请查看:https://developer.android.com/training/location/permissions

【讨论】:

  • 在地理定位器中你不需要指定这个,我有一个使用地理定位器的项目,但我没有指定任何这个代码,但它是请求权限并且还显示打开位置服务对话框,在 6 + 更新之后,它工作得很好@Uroš
猜你喜欢
  • 2020-11-02
  • 2020-07-29
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 2020-03-24
  • 2014-07-21
  • 2016-02-19
  • 2020-06-16
相关资源
最近更新 更多