【问题标题】:loop snapshotdata and for each for markers Flutter循环快照数据并为每个标记 Flutter
【发布时间】:2021-04-19 05:23:11
【问题描述】:

我有一个问题:我正在尝试从现有 API 中获取标记,但我不想手动编写所有 300 万点的经度和纬度,所以我创建了一个forEach 方法必须遍历所有点。但我收到以下错误:

The method 'forEach' was called on null.
Receiver: null
Tried calling: forEach(Closure: (Stops) => Null)

我还尝试使用 loop for...if 并在 snapshot 内启动一个循环,但它不起作用,因为它只能返回小部件,所以当我返回颤振地图然后尝试诱导纬度和经度时,没有任何效果。

更新

感谢 Sam Chan 的回答,但在我尝试了两个答案后,它给了我一个错误:

The method 'map' was called on null. Receiver: null Tried calling: map<Marker>(Closure: (Stops) => Marker)

我不明白我做错了什么?

我还有每个标记的 id,如果我写了这个:

final List<Stops> listStops = stopsFromJson(response.body);
    for (var i = 1; i < listStops.length; i++) {
      if (listStops[i].stId != null) {
        return Stops.fromJson(jsonDecode(response.body)[1]);
      } else {
        return Stops();
      }

And after that I wrote here this: 

MarkerLayerOptions(
                      markers:[
                        Marker(
                          point: latLng.LatLng(snapshot.data.stLong, snapshot.data.stLat),
                          width: 20,
                          height: 20,
                          builder: (ctx) => Icon(Icons.add)

因此,地图上只出现了一个 ID = 1 所属的标记。我知道我必须使用列表,但是当我使用列表时,没有任何作用。

我的代码

List<Stops> listStops;
  Future<List<Stops>> futureStops;
  List<Marker> allMarkers = [];
  @override
  void initState() {
    super.initState();
    futureStops = fetchStops();
  }

 body: FutureBuilder<List<Stops>>(
            future: futureStops,
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                listStops.forEach((Stops) {
                  allMarkers = listStops.map(
                    (Stops) => Marker(
                        point: latLng.LatLng(Stops.stLong, Stops.stLat),
                        width: 20,
                        height: 20,
                        builder: (_) => Icon(
                              Icons.person_pin,
                              color: Colors.green,
                            )),
                  );
                });
                return FlutterMap(
                  options: MapOptions(
                    center: latLng.LatLng(48.707103, 44.516939),
                    zoom: 13.0,
                  ),
                  layers: [
                    new TileLayerOptions(
                        urlTemplate:
                            "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
                        subdomains: ['a', 'b', 'c']),
                    MarkerLayerOptions(
                      markers: allMarkers,
                    )
                  ],

在这里我想用纬度和经度调用标记,但没有任何效果。我还尝试在我的模型中编写一个循环,但那里也没有任何效果。我不明白我做错了什么。

MarkerLayerOptions( markers: allMarkers,

能给我一个提示吗?

谢谢大家!

也是我的模特

Future <List<Stops>> fetchStops () async {
//here is  my link
    if (response.statusCode == 200) {
      final List<Stops> listStops = stopsFromJson(jsonDecode(response.body)[1]);
      return listStops;
      } else {
    return List<Stops>();
    }
    }

【问题讨论】:

    标签: loops flutter widget openstreetmap markers


    【解决方案1】:

    你应该循环输入snapshot.data

    喜欢

                  if (snapshot.hasData) {
                          snapshot.data.forEach((Stops) {
                          allMarkers = listStops.map(
                            (Stops) => Marker(
                                point: latLng.LatLng(Stops.stLong, Stops.stLat),
                  ...
    

    或者

                  if (snapshot.hasData) {
                          listStops=snapshot.data;
                          listStops.forEach((Stops) {
                          allMarkers = listStops.map(
                            (Stops) => Marker(
                                point: latLng.LatLng(Stops.stLong, Stops.stLat),
                  ...
    

    希望它能解决你的问题。

    【讨论】:

    • 我尝试了你的两个答案@SamChan,第二个给了我一个错误:```方法'map'在null上被调用。接收者:null 尝试调用:map(Closure: (Stops) => Marker) ```
    猜你喜欢
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2021-04-02
    • 2021-07-01
    • 2023-02-11
    • 2021-12-26
    相关资源
    最近更新 更多