Flutter应用程序错误“ NoSuchMethodError:在空值上调用了吸气剂“长度””

时间:2020-03-27 03:24:07

标签: api google-maps flutter dart

出现此错误,找不到原因,该应用程序显示了一个从Google Map Places api调用google map调用医院的地图,当在chrome中使用api调用返回正常,但是该应用程序无法构建并显示“ NoSuchMethodError:The getter'length'在null上被调用”错误。感谢您的帮助。


class Search extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final currentPosition = Provider.of<Position>(context);
    final placesProvider = Provider.of<Future<List<Place>>>(context);

    return FutureProvider(
      create: (context) => placesProvider,
      child: Scaffold(
        body: (currentPosition != null)
            ? Consumer<List<Place>>(
                builder: (_, places, __) {
                  return Column(
                    children: <Widget>[
                      Container(
                        height: MediaQuery.of(context).size.height / 3,
                        width: MediaQuery.of(context).size.width,
                        child: GoogleMap(
                          initialCameraPosition: CameraPosition(
                              target: LatLng(currentPosition.latitude,
                                  currentPosition.longitude),
                              zoom: 16.0),
                          zoomGesturesEnabled: true,
                          mapToolbarEnabled: true,
                          myLocationEnabled: true,
                          scrollGesturesEnabled: true,
                        ),
                      ),
                      SizedBox(
                        height: 10.0,
                      ),
                      Expanded(
                        child: ListView.builder(
                            itemCount: places.length,
                            itemBuilder: (context, index) {
                              return Card(
                                child: ListTile(
                                  title: Text(places[index]?.name),
                                ),
                              );
                            }),
                      )
                    ],
                  );
                },
              )
            : Center(
                child: CircularProgressIndicator(),
              ),
      ),
    );
  }
}

在chrome中调用api请求时,效果很好,问题出在构建应用程序时。这是我的places_service.dart文件:


class PlacesService {
  final key = 'xxxxxxxxxxxxxxxxxxxxx-ttttttttttttttttt';

  Future<List<Place>> getPlaces(double lat, double lng) async {
    var response = await http.get('https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=$lat,$lng&type=hospital&rankby=distance&key=$key');
    var json = convert.jsonDecode(response.body);
    var jsonResults = json['results'] as List;
    return jsonResults.map((place) => Place.fromJson(place)).toList();
  }

}

问题是这一行:

itemCount: places.length,

1 个答案:

答案 0 :(得分:0)

谢谢! 我已经尝试过您的建议,并且收到“无数据”消息。但这就是重点,如果在Chrome上测试时API密钥和调用可以正常工作,为什么不获取任何数据,将其粘贴到浏览器中并查看json数据:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=18.477831,-69.930029&type=hospital&rankby=distance&key=AIzaSyD-vLS7lrciD2Qzcy-0Q_hkKJy1GOR_DnE

问题是,为什么不能使用我的代码?

注意:一旦我克服了这个问题,随时可以更改API密钥。再次感谢!