Flutter 异常:在 null 上调用了 getter 'latitude'。接收者:空尝试调用:纬度

时间:2021-02-05 06:01:01

标签: flutter google-maps-android-api-3

这是我为获取当前位置并添加一些标记而编写的代码

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';

class Map extends StatefulWidget {
  @override
  _NewMapState createState() => _NewMapState();
}

Future setMapStyle(GoogleMapController controller, BuildContext context) async {
  String value = await DefaultAssetBundle.of(context)
      .loadString('assets/maps/map_style.json');
  await controller.setMapStyle(value);
}

class _NewMapState extends State<Map> {
  GoogleMapController _controller;

  Position position;

  Widget _child;

  Map<MarkerId, Marker> markers = <MarkerId, Marker>{};
  BitmapDescriptor pinLocationIcon;

  @override
  void initState() {
    _child = SpinKitRipple(
      itemBuilder: (BuildContext context, int index) {
        return DecoratedBox(
          decoration: BoxDecoration(
            color: index.isEven ? Colors.grey : Color(0xffffb838),
          ),
        );
      },
    );
    getCurrentLocation();
    populateClients();
    setCustomMapPin();
    super.initState();
  }

  void getCurrentLocation() async {
    Position res = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high); 
    setState(() {
      position = res;
      _child = mapWidget();
    });
  }

  populateClients() async {
    
    FirebaseFirestore.instance.collection('points').get().then((docs) {
      if (docs.docs.isNotEmpty) {
        for (int i = 0; i < docs.docs.length; ++i) {
          initMarker(docs.docs[i].data(), docs.docs[i].id);
        }
      }
    });
  }

  void initMarker(tomb, tombId) {
    var markerIdVal = tombId;
    final MarkerId markerId = MarkerId(markerIdVal);

    final Marker marker = Marker(
      markerId: markerId,
      position: LatLng(tomb['location'].latitude, tomb['location'].longitude),
      icon: pinLocationIcon,
      infoWindow: InfoWindow(title: 'Shop', snippet: tombId),
      onTap: () {
        _settingModalBottomSheet(context,markerIdVal);
      },
    );
    setState(() {
      markers[markerId] = marker;
    });
  }

........ here is adding markers and map
 

代码给出了所需的输出,但控制台打印并调用异常

<块引用>

getter 'latitude' 被调用为 null。 接收器:空 尝试调用:纬度

我尝试了很多但找不到任何有效原因的问题是什么

完全错误

Exception caught by widgets library ═══════════════════════════════════
The following NoSuchMethodError was thrown building Map(dirty, state: _NewMapState#22070):
The getter 'latitude' was called on null.
Receiver: null
Tried calling: latitude

The relevant error-causing widget was
Map
lib\Pages\home.dart:46
When the exception was thrown, this was the stack
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)


#1      _NewMapState.mapWidget
package:map/Pages/test.dart:106
#2      _NewMapState.build
package:map/Pages/test.dart:97
#3      StatefulElement.build
package:flutter/…/widgets/framework.dart:4744
#4      ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4627
...


1 个答案:

答案 0 :(得分:0)

这意味着您的tomb['location'] == null
检查您的代码,找出 tomb['location'] 为空的原因。