颤振'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”未定义
颤振网页错误。未捕获的 ReferenceError:未定义 firebase