Flutter:提供者:如何处理模型依赖项?

时间:2020-05-17 20:31:36

标签: flutter architecture flutter-provider

我正在寻找有关如何在登录后处理负载以及如何在不混合太多东西的情况下合并来自多个端点的数据的建议,尤其是以下两件事:

1)登录流程

在成功获得userId的登录响应后,我需要推送HomeScreen()并从各个提供商处加载一些初始数据。

示例:

// home_screen.dart

initState() {
  super.initState();
  initializeData();
}

Future <void> initializeData() {

  var authenticationProvider = Provider.of<AuthenticationProvider>(context);
  var accountProvider = Provider.of<AccountProvider>(context);
  
  var albumProvider = Provider.of<AlbumProvider>(context);
  var songProvider = Provider.of<SongProvider>(context);
  
  await accountProvider.loadAccount(authenticationProvider.getLoggedInUser().id);
  await albumProvider.loadAlbums();
  await songProvider.loadSongsForAlbums(albumProvider.getAlbums())
  
}

这有效,但感觉很丑吗?

2)更清晰的数据共享

想象一下这样的API:

api /相册(模型包含有关相册的信息)

api / albumpurchases(模型包含其中的albumIduserId

获取已登录用户的购买专辑的最佳方法是什么?

我可以想到3种不同的方法,但似乎没有一种很好。

  1. AlbumProvider,它具有两个数组albums[]purchases[],以及方法getAlbumByPurchase (String purchaseId)getPurchaseForAlbum(String albumId),然后由ID执行.where()并返回该项目。

  2. 具有AlbumProviderAlbumPurchaseProvider,然后使用ProxyProvider合并两者。 我不确定该如何实施,将不胜感激!

  3. purchase属性添加到Album,然后类似于方法#1手动映射它 。 到目前为止,我已经使用过此功能,但一开始它似乎很棒,但很快就会变得非常难看,因为您到处的后续Album HTTP响应都缺少该purchase属性,因此我要么需要获取再次purchase,或者我需要根据获得的ID从Album的购买中获得一个AlbumProvider对象。

0 个答案:

没有答案