Получатель ‘placeName’ был вызван при null

#android #ios #flutter #dart #hybrid-mobile-app

#Android #iOS #флаттер #dart #гибрид-мобильное приложение

Вопрос:

Я создал адрес класса со следующими строками

 class Address{
  String placeName='';
  double latitude;
  double longitude;
  String placeId= '';
  String placeFormattedAddress= '';
  Address(
      {
        this.placeId,
        this.latitude,
        this.longitude,
        this.placeName,
        this.placeFormattedAddress,
      });

}
 

и я попытался получить адрес из Google Maps, а затем передать значение с помощью пакета поставщика

 class HelperMethods{
  static Future<String> findCordinateAddress(Position position, context) async {

    String placeAddress = '';

    var connectivityResult = await Connectivity().checkConnectivity();
    if(connectivityResult != ConnectivityResult.mobile amp;amp; connectivityResult != ConnectivityResult.wifi){
      return placeAddress;
    }

    String url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng=${position.latitude},${position.longitude}amp;key=$mapKey';

    var response = await RequestHelper.getRequest(url);

    if(response != 'failed'){
      placeAddress = response['results'][0]['formatted_address'];

      Address pickupAddress = new Address();
      pickupAddress.longitude = position.longitude;
      pickupAddress.latitude = position.latitude;
      pickupAddress.placeName = placeAddress;

      Provider.of<AppData>(context, listen: false).updatePickupAddress(pickupAddress);

    }

    return placeAddress;

  }

}
 

но дело в том, что это занимает некоторое время
, поэтому, когда я пытаюсь открыть страницу, на которой будет отображаться адрес, отображается ошибка
, и она исчезает после того, как адрес готов, так что есть ли способ предотвратить это?
передавать другое значение до тех пор, пока адрес не будет готов???

Средство получения ‘placeName’ было вызвано при null. Получатель: null Попытался вызвать: placeName

     String address = Provider.of<AppData>(context).pickupAddress.placeName ?? '';

and then I print or display the content of the address 
 

Ответ №1:

ОБНОВЛЕНИЕ: это было так просто, но я не мог видеть это раньше, просто добавьте знак вопроса (?) после .pickupaddress

 String address = Provider.of<AppData>(context).pickupAddress?.placeName ?? ''; 

Ответ №2:

Возможно, вы захотите использовать условия в своем коде пользовательского интерфейса. Что-то вроде :

 if(placeName != null)
  Text(placeName)

// null-aware operator
Text(placeName ?? "name is null")

// ternary operator
placeName != null ? Text(placeName) : CircularProgressIndicator()