问题标签 [flutter-change-notifier]
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 - Flutter 中使用 ChangeNotifierProvider 在页面之间传输数据
我正在用 Flutter 开发一个应用程序。我把屏幕分成两半。屏幕上方有按钮。当您按下这些按钮时,屏幕底部的页面将发生变化。我为此工作使用了 ChangeNotifierProvider。但它给出了以下错误。在不打开管理面板的情况下,它会通过将屏幕涂成红色来给出此错误。
我还查看了会导致此错误的情况,它们都没有问题。我不明白错误在哪里。
谁能帮我修复代码?
错误信息:
错误:在此 AdminHomePage 小部件上方找不到正确的提供程序发生这种情况是因为您使用了BuildContext
不包括您选择的提供程序的 Provider。有几种常见的场景:
- 您在您的中添加了一个新的提供程序
main.dart
并执行了热重载。要修复,请执行热重启。 - 您尝试读取的提供程序位于不同的路径中。提供者是“范围的”。因此,如果您在路由中插入提供程序,那么其他路由将无法访问该提供程序。
- 您使用的
BuildContext
是您尝试读取的提供程序的祖先。确保 AdminHomePage 在您的 MultiProvider/Provider 下。这通常发生在您创建提供程序并尝试立即读取它时。
构成屏幕图像的代码(相关代码行:3.4.15.71.86.)=
保存状态信息的代码 =
按钮代码(相关代码行:4.11.23.39.51.)=
flutter - 为什么我的变量没有在使用 Flutter Provider 和 ChangeNotifierProxyProvider 的类中更新?
为什么当我在代码中调用 addNumber(){...} 方法时,class1 中的变量“数字”没有改变?打印语句“print(class2.numberFromClass1)”仅返回我直接存储在 class1 中的值,而不返回由 addNumber(){} 方法计算的新值。我正在使用提供程序包。我认为一个原因可能是我如何构建 ChangeNotifierProxyProvider,但我尝试了许多不同的方法,但它仍然无法正常工作。这是带有打印语句和两个类的部分:
这就是整个代码:
flutter - 如何使用 Flutter Riverpod 充当 ChangeNotifierProxy Provider?
只是想知道是否有任何方法可以以某种方式使用 Riverpod 包,它就像 ChangeNotifierProxy Provider 一样工作。我制作了这个简单的代码,其中“MyFirstClass”更改其属性时应更新“MySecondClass”。在“MySecondClass”中,是一种在“MyFirstClass”发生更改时使用数据/变量的方法。
到目前为止,当我按下按钮并执行 onPressed 函数时,'MySecondClass' 会更新一次,但即使我再次按下按钮也会保持不变。
这是提供者和类的部分:
如果你想复制这个例子的整个代码,这里是:
flutter - 如何使用 getit 包监听扩展 changeNotifer 的单例类的变化?
我正在使用颤振的 getit 包。如何使用 getit 包监听扩展 changeNotifer 的单例类的变化?
在上面的代码中,如何将名称的变化反映到 UserDetailsPage 中?
flutter - ChangeNotifier 不监听值变化
我想在值从 null 更改为数字时通知包装器,但包装器似乎没有收到更改。在下面检查我的代码:
在 main.dart 中,
在 wrapper.dart 中,
当 setID 类中的值发生更改时,包装器中不会收到任何值。谁能帮帮我?先感谢您。
flutter - 为什么我的应用程序(使用 ChangeNotifierProvider 开发)更新时会延迟一级?
我正在开发一个颤振应用程序,我使用 ChangeNotifierProvider 来管理状态。我有一个名为“Data”的类,它是应用程序的模型(MVC 设计模式中的模型)和一个名为“DataManager”的类,它是控制器应用程序(MVC 设计模式中的控制器)并在其中创建一个 Data 实例。我在我的 main 中创建了 ChangeNotifierProvider 的实例,而 ChangeNotifier 是 DataManager。所以 DataManager 中的方法调用 notifyListeners() 方法。当我运行应用程序时,我添加了一个磁贴,尽管添加了磁贴,但 UI 不会改变。在我添加另一个磁贴后,第一个磁贴出现,依此类推。应用程序始终落后于用户一级。你能帮我解决这个问题吗?
这是 main.dart:
这是 Data.dart (它的方法在这里可能并不重要):
这是 DataManager.dart:
还有一个 listView.Builder 添加这些图块(城市小部件):
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.
flutter - 如何使用 Provider 实现注册/登录逻辑。颤振,飞镖,移动开发
假设我有三个文件:main.dart、LoginScreen.dart、HomePageScreen.dart。我正在利用Provider架构进行状态管理和包装 MaterialApp。
当应用启动时,main.dart 文件会检查用户是否已经登录(FirebaseAuth.currentUser 来检查这个)。如果已登录,则导航到 HomePageScreen,如果未登录,则导航到 SignUpScreen。代码上是这样的:
这很棒,它按我的预期工作。如果 currentUser 为 null,则导航到 SignupScreen,如果不是,则导航到 HomePageScreen。
问题:
在 HomepageScreen 中,它侦听 User 提供程序并相应地更新 UI 组件。因此,当用户成功注册新帐户或登录时,我想在提供程序中更改/更新用户的内容,以便当应用程序屏幕从 SignupScreen 切换到 HomePageScreen 时,它会在 HomePageScreen 上显示正确的信息. 但是,我找不到更改提供者内部用户引用的方法。
我尝试过的事情:
在 AppUser.dart 中,我创建了更改用户引用的方法:
这实际上只是改变了用户的内容。这样我可以将用户更新为新创建的用户。然而,我的直觉告诉我,这是解决这个问题的一种非常糟糕的方法。我觉得问题出在逻辑上,我试图实现注册/登录功能的方式。
概括:
有没有办法改变提供者中值的引用?如果这是不可能的,或者使用提供商架构的方式不好,您对如何实现注册功能有任何建议吗
flutter - 通过提供者创建无限滚动的 ListView:在构建期间调用 setState() 或 markNeedsBuild()
我正在尝试创建 ListView 在滚动屏幕时构建项目的位置。我正在尝试使用提供程序添加内容。
在 itemBuilder 中调用 notifyListener() 时出现错误“在构建期间调用 setState() 或 markNeedsBuild()”。
我知道原因是因为在构建 ListView 期间调用了 notifyListener()。
我的问题是:
- 是否有在构建之后或之前调用 notifyListener() 的解决方法?
- 如果这甚至不是合适的方法,那么使用 Provider 将内容添加到 ListView 以进行无限滚动的最佳方法是什么?
这不是这篇文章的重复,因为他的 ListView 小部件不必在滚动发生时一遍又一遍地构建。
my_app.dart
建议.dart