我已经在混乱中徘徊了很长时间,这是我在努力解决的问题。假设您的应用程序具有一个称为“用户个人资料”的功能,类似于Facebook或Instagram。用户可以多次打开用户页面,如果他们更新了个人资料中的某些内容(例如帖子),则必须更新该用户的所有个人资料页面。现在在React Native中,我将有一个用户状态,它是{user_id-> user_profile}的映射。所有需要用户数据的用户个人资料页面都将引用具有特定用户ID的用户个人资料。因为一个用户ID只有一个用户配置文件,所以如果我进行更新,则所有页面都会更新。
我在Flutter中也有类似的设置。我有一个UserProfilesChangeNotifier
,其中包含一个Map ChangeNotifierProvider.value
向其提供地图。在initState
中,我将检查Map中是否存在特定的user_id,如果不存在,则UserProfilesChangeNotifier
必须从服务器获取数据。在build
方法中,我将使用userProfile.map[user_id]
读取用户数据,并且类似地,我还将通过UserProfilesChangeNotifier
(附加了notifyListeners())来更新数据。我可以想到此设置存在一些问题:
ChangeNotifier
与很多侦听器一起使用,因为它是O(N²)用于分发通知。在我的情况下,许多用户页面将不得不收听它。 ChangeNotifierProvider
是否可以解决?notifyListeners
),则该用户的所有用户页面尽管不需要,1、2、3也必须重建。我觉得我的设置非常有缺陷,可能需要改进。在这种情况下您会怎么做?
答案 0 :(得分:0)
对于您的问题,是的,例如可以用ChangeNotifierProvider
解决。我正在开发一个音乐/视频应用程序,该应用程序现在也具有很多复杂性,使用状态管理,您可以定义非常好的内容,而无需重新加载。
想象一下一个非常大的小部件树,其中只有一个需要更新的值扔给了userprofile
,例如,您可以使用Consumer
,它在侦听器之后的作用完全相同收到通知,但它只会在其上方重建树,这意味着您可以定义很好,只需要重新加载特定部分。
您还可以调用带有listen, false
语句的函数,而无需通知任何小部件。在很多情况下,您只需要调用函数本身即可。
检查本文对提供者可能提供的服务确实非常有用 https://medium.com/flutter-community/making-sense-all-of-those-flutter-providers-e842e18f45dd