1

我有几个从颤振到 API 的 GET 请求,我希望尽可能高效地运行。我仍在学习 Flutter,并且来自 JS 背景,我使用了类似于Promise.all([ ... ])Javascript 的模式,但我觉得这是一种 hack 而不是解决方案。

如果有更好的方法,我期待阅读它:

final apiProvider = new ApiProvider();

final apiData = await Future.wait([
  apiProvider.getProducts(),   // Returns Future<List<Product>>
  apiProvider.getCategories(), // Returns Future<List<Category>>
  apiProvider.getBrands(),     // Returns Future<List<Brand>>
  apiProvider.getCustomers(),  // Returns Future<List<Customer>>
]);

List<Product> products    = apiData[0];
List<Category> categories = apiData[1];
List<Brand> brands        = apiData[2];
List<Customer> customers  = apiData[3];
4

1 回答 1

2

使用Future.wait是适当的。我个人会await列出一个Future<void>直接设置变量的 s 列表,这样可以避免以后使用索引(从而避免潜在的错误)并提高类型安全性:

final apiProvider = ApiProvider();

List<Product> products;
List<Category> categories;
List<Brand> brands;
List<Customer> customers;

await Future.wait([
  Future<void>(() async => products = await apiProvider.getProducts()),
  Future<void>(() async => categories = await apiProvider.getCategories()),
  Future<void>(() async => brands = await apiProvider.getBrands()),
  Future<void>(() async => customers = await apiProvider.getCustomers()),
]);
于 2021-03-16T23:50:55.113 回答