Ошибка приложения флаттера "NoSuchMethodError: получатель 'длина' вызван на нуль" - PullRequest
0 голосов
/ 27 марта 2020

Я получаю эту ошибку и не могу найти причину, приложение показывает карту Google, вызывающую больницу, из карты Google размещает api, вызов api возвращается нормально при использовании в chrome, но приложение не может быть построено, показывая "NoSuchMethodError : Получатель "длина" был вызван при нулевой "ошибке. Спасибо за вашу помощь.


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(),
              ),
      ),
    );
  }
}

Запрос API работает нормально при вызове в chrome, проблема заключается в создании приложения. Это мой файл place_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 голосов
/ 27 марта 2020

Спасибо! Я уже попробовал ваше предложение и получил сообщение «Нет данных». Но в этом все дело, почему не получается никаких данных, если ключ API и вызов работают нормально при тестировании на chrome, вставьте его в браузер и посмотрите данные 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, как только я преодолею эту проблему. Еще раз спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...