无法将类型Future <Class>的值分配给Class类型的实体

时间:2019-10-31 10:31:34

标签: dart future

在我的情况下,我希望能够返回一个类,该类名称为Car。我想将其从提供商那里返回到我的屏幕。在我的提供程序中,我有此方法,该方法应返回Car provider.dart

类的对象
Future<Car> fetchCarById(int carId) async {
  final url =
      'demourl';
  try {
    final response = await http.get(url);
    final extractedCar = json.decode(response.body);
    if (extractedCar == null) {
      return null;
    }
    final Car selectedCar = Car(
        id: extractedCar['ID'],
        brand: extractedCar['Brand'],
        model: extractedCar['Model'],
    final List<Car> loadedProducts = [];
    loadedProducts.add(selectedCar);
    _items = loadedProducts;
    notifyListeners();
    return selectedCar;
  } catch (error) {
    throw error;
  }
}

但是我却收到此错误

  

不能将Future类型的值分配给Car类型的实体

当我尝试从屏幕screen.dart中获取Car对象时

final Car car = Cars(auth.token).fetchCarById(carId);

我看到可以使用FutureBuilder完成此操作,但是有没有一种简化的方法?我不想触碰screen.dart文件中的代码。有可能吗?

1 个答案:

答案 0 :(得分:2)

您的方法被标记为async,因此不会返回Car,而是返回Future<Car>。在您的分配中,您将类型设置为Car,并且由于变量的类型与被调用方法的返回值之间的类型不匹配,因此会出现错误。

返回的Future表示该值尚未正确准备好,您需要等待该值。可以使用await关键字以异步方法完成此操作:

Future<void> method() async {
  final Car car = await Cars(auth.token).fetchCarById(carId);
}

或者您可以添加一个回调方法,当值准备就绪时将调用该方法:

void method() {
  final Car car =
      Cars(auth.token).fetchCarById(carId).then((car) => print(car));
}

我建议您阅读有关Dart中异步编程的文档:https://dart.dev/codelabs/async-await