“Future<Null>”类型的值不能分配给“Data”类型的变量

时间:2021-03-24 23:59:11

标签: flutter dart asynchronous future

我正在尝试弄清楚如何使用 future 来通过互联网获取数据。我试图编写一个简单的代码,将 Future 转换为“平均”数据,但它不起作用,我不明白为什么会这样。

这是我的代码

class Fetch {  
  Data getData () {
    Data data;
    data = fetch().then((value) {data = value;}); //here's I'm getting error
  }
  
  Future<Data> fetch() async {
    int number = await Future.delayed(Duration(seconds: 1), () => 3);
    return(Data.fromIt(number));
  }
}


class Data{
  int date;
  
  Data({this.date});
  
  factory Data.fromIt(int num) {
    return Data(
      date: num,
    );
  }
}

在我更正这部分代码后,错误消失了,但现在 getData() 返回 null 而不是值:

Data getData () {
  Data data;
  fetch().then((value) {data = value;});
  return data; //null
}

谢谢

2 个答案:

答案 0 :(得分:0)

您可以将 getData 设为异步函数,并使用 await 关键字。如果您不熟悉异步编程并且 Futures

Future<Data> getData () async {
    final data = await fetch();
    // Whatever you want to do with data
    return data; // Dont forget to return it back to the caller
  }

答案 1 :(得分:0)

data 被定义为 Data 对象,而 fetch() 返回 Future<Data>,导致错误。

Data data;
  data = fetch().then((value) {
    data = value;
  }); 

您不能在不等待的情况下将 Future 对象转换为同步对象。您可以在 UI 中执行此操作以获取 Future 值:

FutureBuilder<Data>(
  future: Fetch().fetch(),
  builder: (context, snapshot) {
    if (!snapshot.hasData) return Container();
    Data data = snapshot.data;
    return Text(data);
  },
)