【问题标题】: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 插件,结果相同 :-(

【问题讨论】:

    标签: flutter visual-studio-code leaflet


    【解决方案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';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-01
      • 2021-01-17
      • 1970-01-01
      • 2021-01-20
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      相关资源
      最近更新 更多