【问题标题】:location.getlocation() gives casting error on android flutterlocation.getlocation() 在 android flutter 上给出了转换错误
【发布时间】:2019-07-16 05:48:45
【问题描述】:

首先导入并初始化位置包:

import 'package:location/location.dart' as locationPackage;

locationPackage.Location location = new locationPackage.Location(); 

在android上运行代码:

try {
  await location.getLocation().then((pos) {
    setState(() {
      print(pos.runtimeType);
      _center = LatLng(pos.latitude, pos.longitude);;
      _lastMapPosition = _center;
    });
  });
} catch (e) {
  print(e);
  if (e.code == 'PERMISSION_DENIED') {
   print("Permission Denied");
  }
}
}

给出错误:

I/flutter ( 4326): NoSuchMethodError: Class 'int' has no instance method 'cast'.
I/flutter ( 4326): Receiver: 1
I/flutter ( 4326): Tried calling: cast<String, double>()
E/flutter ( 4326): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: NoSuchMethodError: Class 'NoSuchMethodError' has no instance getter 'code'.

E/flutter ( 4326): Receiver: Instance of 'NoSuchMethodError'
E/flutter ( 4326): Tried calling: code
E/flutter ( 4326): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:50:5)
E/flutter ( 4326): #1      _MapsSearchPageState._getLocation (package:Bartr/maps.dart:486:13)
E/flutter ( 4326): <asynchronous suspension>
E/flutter ( 4326): #2      _MapsSearchPageState.initState (package:Bartr/maps.dart:500:5)
E/flutter ( 4326): #3      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3846:58)
E/flutter ( 4326): #4      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter ( 4326): #5      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter ( 4326): #6      Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter ( 4326): #7      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter ( 4326): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter ( 4326): #9      Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter ( 4326): #10     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter ( 4326): #11     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter ( 4326): #12     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter ( 4326): #13     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter ( 4326): #14     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter ( 4326): #15     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter ( 4326): #16     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter ( 4326): #17     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter ( 4326): #18     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter ( 4326): #19     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter ( 4326): #20     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter ( 4326): #21     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter ( 4326): #22     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter ( 4326): #23     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter ( 4326): #24     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter ( 4326): #25     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
E/flutter ( 4326): #26     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter ( 4326): #27     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter ( 4326): #28     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter ( 4326): #29     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter ( 4326): #30     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter ( 4326): #31     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
E/flutter ( 4326): #32     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter ( 4326): #33     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter ( 4326): #34     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter ( 4326): #35     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter ( 4326): #36     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter ( 4326): #37     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter ( 4326): #38     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3717:5)
E/flutter ( 4326): #39     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2961:14)
E/flutter ( 4326): #40     Element.updateChild (package:flutter/src/widgets/framework.dart:2764:12)
E/flutter ( 4326): #41     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3750:16)
E/flutter ( 4326): #42     Element.rebuild (package:flutter/src/widgets/framework.dart:3565:5)
E/flutter ( 4326): #43     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3722:5)
E/flutter ( 4326): #44     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
E/flutter ( 4326): #45     Componen

这只发生在安卓上。 Firebase 和所有其他软件包似乎都在工作。我遵循package:location/location.dart 的最现代安装规则。我使用的是 2.3.5 版本,flutter doctor 显示了所有用于 android 开发的复选标记。任何想法为什么会发生这种情况?

【问题讨论】:

  • 请分享您使用的代码cast方法
  • @PhanVanLinh 我不使用“cast”方法。我知道是这段代码导致了错误,就好像我替换了这个块一样,而是用硬编码的位置初始化 _center 没有给出错误。
  • 你能分享代码吗? _getLocation
  • 忽略上面的评论。我认为这将是您的某些代码造成的。一旦我查看了插件代码,似乎是插件导致了转换错误。

标签: android flutter location


【解决方案1】:

问题可能是在没有检查权限的情况下调用location.getLocation。查看插件location,如果您调用getLocation 方法而不检查权限,则调用的本机call here 会自动检查权限,如果不可用则请求。权限请求返回的结果是一个整数,因此会出现转换错误。

应该在插件location 上提出一个关于此的问题,以返回正确的结果或引发相应的错误。

您可以尝试检查权限,然后致电location.getLocation()

例子:

void _getLocation() async {
    Location location = Location();
    if (await location.hasPermission()) {
        final LocationData pos = await location.getLocation();
        setState(() {
            print(pos.runtimeType);
            _lastMapPosition = pos;
        });
    } else {
        await location.requestPermission();
    }
}

希望有帮助!

【讨论】:

  • 是的,它有效!我做了一些额外的测试,了解到错误的原因是该函数是从 initstate 方法调用的。因此,由于await location.hasPermission() 的额外异步性,我们使用此代码时它可以工作。
  • 太棒了!祝你好运!
  • location.hasPermission 似乎不再是布尔值了。
【解决方案2】:

通过 baseflow.com 使用 geolocator 5.3.1 解决 https://pub.dev/packages/geolocator#-readme-tab-

并在此处阅读教程: https://alligator.io/flutter/geolocator-plugin/

在我的 Android Studio 模拟器上测试过

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-01
    • 2011-12-08
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2019-12-02
    • 1970-01-01
    相关资源
    最近更新 更多