【问题标题】:flutter await result always null颤动等待结果始终为空
【发布时间】:2019-05-31 18:07:54
【问题描述】:

这是我的功能

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");
      });

但这里总是返回 null。
这里有什么问题?

来自 readAddress() 函数的消息

[dart] 这个函数的返回类型是'Future',但是 不以 return 语句结束。 [missing_return]


我不知道如何解释更多 StackOverflow 在尝试发布此问题时显示此错误消息“t 看起来您的帖子主要是代码;请添加更多详细信息。 "

【问题讨论】:

  • print("address_start_value_null") 被调用了吗?
  • 不,不叫
  • 它包含我检查的值
  • address_start_value_not_null 被调用

标签: firebase firebase-realtime-database dart async-await flutter


【解决方案1】:

您的函数的问题在于它没有返回 Future,而是返回 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();

很简单,不是吗?我已经处理了函数内部的所有错误处理。

【讨论】:

  • 我不明白这将如何工作,因为标有async 的函数应该返回Future
  • @Vas 你需要异步函数,因为它包含等待语句。
  • 对,但是函数返回类型必须是Future&lt;Address&gt;
猜你喜欢
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
相关资源
最近更新 更多