флаттер ждать результата всегда ноль - PullRequest
0 голосов
/ 05 января 2019

Это моя функция

Future<Address> readAddress() async {
    database = FirebaseDatabase(app: app);

   await  database
        .reference()
        .child(table_name)
        .child(uid)
        .once()
        .then((DataSnapshot snapshot) {
      print("address_start");
      if (snapshot.value == null) {
        print("address_start_value_null");
        return null;
      } else {
         print("address_start_value_not_null");
        print(snapshot.value);
        Address a = Address().map(snapshot.value);
      return  a;
     // return a;
      }


    }).catchError((onError) {
      print(onError);
      return onError;
    });
  }

Это мой вызов функции

readAddress().then((address) {

        if (address != null) {
          print("address read seucssfully " + address.firstname);
        } else {
          print(
              "address read faield result is null $address"); // + address.toString());

        }
      }).catchError((onError) {
        print("error on read address");
      });

Но здесь всегда возвращается ноль.
Что здесь не так?

сообщение от функции readAddress ()

[dart] Эта функция имеет тип возвращаемого значения «Future», но не заканчивается оператором возврата. [Missing_return]


Я не знаю, как объяснить больше StackOverflow, показывающее это сообщение об ошибке, когда вы пытаетесь опубликовать этот вопрос: «Похоже, ваше сообщение в основном написано на коде; пожалуйста, добавьте еще несколько деталей. «

1 Ответ

0 голосов
/ 05 января 2019

Проблема с вашей функцией в том, что она не возвращает Future, а вместо этого объект Address. Я бы переписал вашу функцию вот так, чтобы просто вернуть объект Address

 Future<Address> readAddress() async {
    try{
    database = FirebaseDatabase(app: app);

   DataSnapshot snapshot = await  database
        .reference()
        .child(table_name)
        .child(uid)
        .once();
    return Address().map(snapshot.value);
    }catch(e) {
      print(e);
      return(e);
    }
  }

При этом ваш вызов функции может быть таким:

Address address = readAddress();

Просто, не правда ли? Я позаботился обо всей обработке ошибок внутри функции.

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