问题标签 [changenotifier]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
flutter - 使用用户配置文件进行颤振状态管理
很长一段时间以来,我一直在纠结于状态管理,但有一个问题我正在努力解决。假设您的应用程序有一个名为“用户资料”的功能,类似于 Facebook 或 Instagram 的。用户可以多次打开用户页面,如果他们更新个人资料中的某些内容(例如帖子),则必须更新该用户的所有个人资料页面。现在在 React Native 中,我会有一个用户状态,它是 {user_id -> user_profile} 的映射。所有需要用户数据的用户配置文件页面都将引用具有特定用户 ID 的用户配置文件。因为用户 ID 只有一个用户配置文件,所以如果我更新某些内容,所有页面都会更新。
我在 Flutter 中有类似的设置。我有一个UserProfilesChangeNotifier
包含 Map<user_id, user_profile>。每次打开用户页面时,我都会ChangeNotifierProvider.value
向它提供地图。在initState
,我会检查特定的 user_id 是否存在于 Map 中,如果不存在,则UserProfilesChangeNotifier
必须从服务器获取数据。在build
方法中,我将使用 读取用户数据userProfile.map[user_id]
,同样我也通过UserProfilesChangeNotifier
(附带 notifyListeners() )更新数据。我可以想到此设置存在一些问题:
- 根据 Flutter 文档,您应该避免使用
ChangeNotifier
大量侦听器,因为它是 O(N²) 来调度通知。在我的情况下,许多用户页面将不得不听它。它可以解决ChangeNotifierProvider
吗? - 如果用户打开 id 为 1、2、3、4 的用户的个人资料页面,然后继续更新 id 为 4 的用户中的数据(将其写入 Map 和
notifyListeners
),则用户 1、2、3 的所有用户页面都必须重建以及,虽然不需要。
我觉得我的设置有很大缺陷,可能需要改进。在这种情况下你会怎么做?
flutter - Flutter/Dart:如何使用 ChangeNotifierProvider 使布尔值可听?
我正在使用 ChangeNotifierProvider 提供一个布尔值,该布尔值根据用户是否登录返回 true 或 false。如何使布尔值可侦听,以便提供者在用户登录/退出时自动更新它?
flutter - Flutter:使用 ChangeNotifier 更新 TextFormField 文本
在一个复杂的场景中,当 a由扩展的模型发送时,我需要更新一些TextFormField
s的文本。问题是要更改 a 的文本,您必须使用暗示重建的 setter,因此您不能将其用于方法中。但是要访问模型,您需要方法内部的。notifyListeners()
ChangeNotifier
TextFormField
TextFormField.text
build
Provider
context
build
MWE(很明显按钮在实际项目中的另一个Widget中,还有更多TextFormField
)
flutter - (Flutter) 如何正确使用 Consumer 和 ChangeNotifierProvider ?找不到丢失的东西
这是从源代码一步一步复制的代码(Fidev 设计挑战),但有一个错误类怀疑是 MainPage 和 LeopardPage 已导入所有必要的包无法弄清楚缺少什么
flutter - 如何在颤振提供者包中正确使用消费者
这是错误信息
这是有消费者的课程
这里的PageOffsetNotifier是用ChangeNotifier扩展并传递给ChangeNotifierProvider的类
通知器将在将一页滑动到另一页时检测偏移值的变化并执行所需的功能.....
请告诉我我在消费者中遗漏了什么或做错了什么,因此,我收到了这个错误
flutter - 不确定如何正确实现 ChangeNotifierProvider 以记住 Flutter 中的登录用户
我有一个具有工作用户注册的应用程序,并且使用用户提供程序可以在注册期间设置用户并在以下屏幕上检索它而不会出现问题。我遇到的问题是尝试正确实现在应用程序启动时设置存储的当前登录用户并进入仪表板的能力,而不是在不抛出以下断言的情况下完成注册过程。
我可以毫无问题地获取用户,SharedPreferences
但是我不确定如何在我的提供程序中正确设置此用户,以便在仪表板屏幕加载时可以访问它。下面是我的main()
函数和 MyApp 类。
在 FutureBuilder 中,我尝试在getUserData()
调用上链接一个 then 来设置用户,但这当然会返回以下断言:
从我读过的内容来看,这是因为notifyListeners()
在用户提供程序中有一个调用,它将调用markNeedsBuild()
. 也就是说,我已经尝试在网上移动一些东西和一些建议,但无法弄清楚实现这一点的最佳实践和最佳方法是什么。
用户提供者:
如果有人已经登录而没有遇到上述断言,我如何在应用程序加载时正确设置用户?谢谢!
flutter - 如何从颤振提供者那里获得类价值?
在我的 main.dart 页面中,我使用 MultiProvider,如下所示。我在 main.dart 中初始化了前两个提供程序,并在用户页面中初始化了 UserInfoProvider。
在 initState 之后的用户页面中,我从远程数据库获取数据并进行初始化,如下所示。但是当我调用每个提供者的值时,前 2 个提供者返回一个值,但 UserInfoProvider 返回一个空值。
如何获取 UserInfoProvider _currentUserPhone 值?
UPDAE:(1)不工作部分: 当我尝试从提供者获取值时,下面的初始化不起作用,因为我正在创建另一个实例对象。正确的方法如下:
UserInfoProvider 初始化:
更新:(2)工作部分:
show_user_data.dart:
结果:
主要.dart
package_info_provider.dart
user_info_provider.dart
更新:
在 UserInfoProvider 中,我将所有变量声明为 String userMobile;按照建议。我从数据库中获取了值,并成功打印了 (1)。我还在 (2) notifyListeners(); 之前打印了值 我还在初始化用户提供程序后打印 (3) 值。但是在我的另一页 (4) 中,我无法打印该值。
flutter - 应该在所有提供者上使用 changeNotiferProxyProvider
我有个问题
我第一次在颤振中构建应用程序,并且对这种语言完全陌生
所以通常我们创建 API 来获取应用程序中所需的所有配置数据,这样我就可以远程更改应用程序中的任何内容,而无需频繁推送构建
所以我需要在所有其他提供程序中进行此配置,因为我在提供程序中进行 api 调用它自己 n 然后在数据更改时通知 UI
但是为了使它工作,我必须将所有提供程序创建为 changeNotiferProxyProvider 并在 create 方法中传递配置提供程序引用,以便我可以通过创建新提供程序时刚刚传递的引用访问配置提供程序
大家觉得这是个好方法吗?
还是我将来会搞砸?
请帮忙..
谢谢
flutter - Flutter ChangeNotifierProvider issue
I have a ProperyListPage and on each list item clicked this is the action it does.
#xA;inside of PropertyPage I have BottomNavigationBar, when you click on Edit BottomNavigationBarItem then it goes to a PropertyEditTab like this
#xA;inside of PropertyEditTab I have a Form widget like this
#xA;My saveProperty callback looks like this
#xA;the updateProperty method does an update to Firestore like this
#xA;then each one of my form fields look like this
#xA;and this is my onPress of button to save property
#xA;the issue is that the original PropertyViewModel property isn't updating when notifyProviders() is called and I can't figure out what I am doing wrong.
Thanks in advance for the help.