无法将未来数据转换为精确数据

时间:2019-11-13 23:57:38

标签: flutter dart

我正在使用Future从Firebase数据库返回一些返回Future的信息。现在我想转换bool.Here我面临着null。但是到了then函数中,我发现了我的值,但是当我返回它时,它仍然为null。 / p>

 Future<bool> _isfav(String post_key)  async {
 bool _is_fav;

await   FirebaseDatabase.instance
    .reference()
    .child(Common.user)
    .child(Common.number)
    .child("favourite")
    .child(post_key)
    .once()
    .then((v) {
  print(v.value);
  if (v.value != null) {
    _is_fav = true;
  } else {
     _is_fav= false;
  }
}).catchError((err) => print(err));
 return _is_fav;  }

这段代码非常好。但是现在

  bool read_fav(String index)  {

bool data;

_isfav(index).then((v){


    data= v;

    print(data); /// printing data


});

print(data); //printing null
return  data; //returning null   }

当我将数据打印到then函数中时,它显示我的数据,但是当我返回数据时,它返回null。

我想从这里调用函数

 child: Icon(
                                Icons.favorite,
                                color:read_fav(_key[index])!=null && read_fav(_key[index]) == true
                                    ? Colors.blue
                                    : Colors.black,
                              )),

1 个答案:

答案 0 :(得分:0)

只需遵循如下代码,

    Future<bool> _isfav(String post_key) async {
    bool _is_fav;
    var snapData = await FirebaseDatabase.instance
        .reference()
        .child(Common.user)
        .child(Common.number)
        .child("favourite")
        .child(post_key)
        .once();

    if (v.value != null) {
      _is_fav = true;
    } else {
      _is_fav = false;
    }

    return _is_fav;
  }

  Future<bool> read_fav(String index) async{
    bool data=false;
    data=await _isfav(index);
    return data;
  }

此外,read_fav将是将来的方法。因为它取决于_isFav()返回值,该值会在将来预测。

bool isReadFav=await read_fav(index);

只需参考dart等待,然后在Here上引用概念

您都准备好了。