颤振'LatLng'未定义

Posted

技术标签:

【中文标题】颤振\'LatLng\'未定义【英文标题】:Flutter 'LatLng' isn't defined颤振'LatLng'未定义 【发布时间】:2020-09-26 08:23:19 【问题描述】:

我正在 Flutter 中使用 Leaflet 迈出我的第一步,因此欢迎耐心等待并提供教程 URL 等。

我能找到的每一段示例代码都会给我这个错误:

没有为类型“_MyHomePageState”定义方法“LatLng”。 尝试将名称更正为现有方法的名称,或定义名为“LatLng”的方法。

例如查看How to setCenter() leaflet map in flutter 的答案,其中有一些非常简单的代码。

这部分代码

  new FlutterMap(
      mapController: _mapController,
      options: MapOptions(
        minZoom: _minzoom,
        maxZoom: _maxzoom,
        center: LatLng(mylatitude,mylongitude),    <=== error here
      ),   

给我错误。

我从互联网复制的几个代码示例遇到了同样的错误。难道是因为我使用的是最新版本的the package,而且那些都是旧帖子?

我正在使用

dependencies:
  flutter_map: ^0.9.0

根据install docs,但也许我发现的所有演示都使用了更早的东西?

https://github.com/johnpryan/flutter_map 的代码也有同样的问题。

这一定是非常基本的东西,但是,正如我所说,我才刚刚开始。尽管熟悉 AngularJs 中的 Leaflet,但我还是很难过。

我的问题是什么,我在哪里可以找到一个好的、深入的、功能齐全的教程?

[更新] 我已经完全卸载了 Visual Studio Code(使用 Revo Uninstaller Pro,它会彻底清除注册表和文件系统的剩余部分。重新安装 VSC 并仅添加 Flutter 插件后,我仍然遇到问题。

我还安装了 android Studio,只安装了 Flutter 插件,结果相同 :-(

【问题讨论】:

【参考方案1】:

像下面这样导入Latlong:

import "package:latlong/latlong.dart" as latLng;

现在您可以使用 latLng 别名调用 Latlong


new FlutterMap(
      mapController: _mapController,
      options: MapOptions(
        minZoom: _minzoom,
        maxZoom: _maxzoom,
        center: latLng.LatLng(mylatitude,mylongitude),   
      ),   


我有一个类似的项目,它实现了类似于 Leaflet 地图的 MapBox 地图,请查看,这里是链接:

https://github.com/TheKetan2/covid19_flutter_app

【讨论】:

哇!!非常感谢!我不明白为什么这段代码对其他人有用。顺便说一句,我刚刚使用了import "package:latlong/latlong.dart";,因为as 子句出错了。我建议它需要我使用new latLng.LatLng(90,0, 90.0)。我将研究您的 Covid 19 应用程序。为什么 MapBox,当 Leaflet/OSM 是免费的? 欢迎。 MapBox 也是免费的,而且看起来比 Leaflet 好。最初我使用的是 Leaflet。 好像是free - up to a point;我错过了什么吗? MapBox 也有高级计划,但 25k 请求对于我的用例来说已经绰绰有余,所以我选择了它。如果适合您的需要,您可以使用 Leaflet :) 我会检查 MapBox,因为你推荐它;也许寻找一些比较再次感谢。【参考方案2】:

对于flutter_map 0.13.1 及更高版本,此行应该可以工作

import 'package:latlong2/latlong.dart' as latLng;

然后您可以使用别名调用 LatLng,

FlutterMap(
options: MapOptions(
  center: latLng.LatLng(51.5, -0.09),
  zoom: 13.0,
),
layers: [
  TileLayerOptions(
    urlTemplate: "https://s.tile.openstreetmap.org/z/x/y.png",
    subdomains: ['a', 'b', 'c']
  ),
  MarkerLayerOptions(
    markers: [
      Marker(
        width: 80.0,
        height: 80.0,
        point: latLng.LatLng(51.5, -0.09),
        builder: (ctx) =>
        Container(
          child: FlutterLogo(),
        ),
      ),
    ],
  ),
],

);

【讨论】:

也可以跳过as latLng,那么就只有:center: LatLng(51.5,-0.09)【参考方案3】:

latlong2 包使它更直接。

LatLng 而不是latLng.LatLng 降低了人为错误的风险。只需添加:

dependencies:
  latlong2: ^0.8.0

import 'package:latlong2/latlong.dart';

让您入门,此外,您还可以获得以下选项:

import 'package:latlong2/latlong/Circle.dart';
import 'package:latlong2/latlong/Distance.dart';
import 'package:latlong2/latlong/LatLng.dart';
import 'package:latlong2/latlong/LengthUnit.dart';
import 'package:latlong2/latlong/Path.dart';
import 'package:latlong2/latlong/calculator/Haversine.dart';
import 'package:latlong2/latlong/calculator/Vincenty.dart';
import 'package:latlong2/latlong/interfaces.dart';
import 'package:latlong2/spline.dart';
import 'package:latlong2/spline/CatmullRomSpline.dart';

【讨论】:

以上是关于颤振'LatLng'未定义的主要内容,如果未能解决你的问题,请参考以下文章

快速协议转换失败,错误“google.type.LatLng”未定义

未定义名称“firebase”颤振

颤振网页错误。未捕获的 ReferenceError:未定义 firebase

颤振未定义的名称“上下文”。尝试将名称更正为已定义的名称,或定义名称

颤振导航未定义的“上下文”

架构 x86_64 的未定义符号,颤振 ios