问题标签 [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.

0 投票
2 回答
1354 浏览

flutter - Flutter 中使用 ChangeNotifierProvider 在页面之间传输数据

我正在用 Flutter 开发一个应用程序。我把屏幕分成两半。屏幕上方有按钮。当您按下这些按钮时,屏幕底部的页面将发生变化。我为此工作使用了 ChangeNotifierProvider。但它给出了以下错误。在不打开管理面板的情况下,它会通过将屏幕涂成红色来给出此错误。

我还查看了会导致此错误的情况,它们都没有问题。我不明白错误在哪里。

谁能帮我修复代码?

错误信息:

错误:在此 AdminHomePage 小部件上方找不到正确的提供程序发生这种情况是因为您使用了BuildContext不包括您选择的提供程序的 Provider。有几种常见的场景:

  • 您在您的中添加了一个新的提供程序main.dart并执行了热重载。要修复,请执行热重启。
  • 您尝试读取的提供程序位于不同的路径中。提供者是“范围的”。因此,如果您在路由中插入提供程序,那么其他路由将无法访问该提供程序。
  • 您使用的BuildContext是您尝试读取的提供程序的祖先。确保 AdminHomePage 在您的 MultiProvider/Provider 下。这通常发生在您创建提供程序并尝试立即读取它时。

构成屏幕图像的代码(相关代码行:3.4.15.71.86.)=

保存状态信息的代码 =

按钮代码(相关代码行:4.11.23.39.51.)=

0 投票
1 回答
444 浏览

flutter - 为什么我的变量没有在使用 Flutter Provider 和 ChangeNotifierProxyProvider 的类中更新?

为什么当我在代码中调用 addNumber(){...} 方法时,class1 中的变量“数字”没有改变?打印语句“print(class2.numberFromClass1)”仅返回我直接存储在 class1 中的值,而不返回由 addNumber(){} 方法计算的新值。我正在使用提供程序包。我认为一个原因可能是我如何构建 ChangeNotifierProxyProvider,但我尝试了许多不同的方法,但它仍然无法正常工作。这是带有打印语句和两个类的部分:

这就是整个代码:

0 投票
1 回答
493 浏览

flutter - 如何使用 Flutter Riverpod 充当 ChangeNotifierProxy Provider?

只是想知道是否有任何方法可以以某种方式使用 Riverpod 包,它就像 ChangeNotifierProxy Provider 一样工作。我制作了这个简单的代码,其中“MyFirstClass”更改其属性时应更新“MySecondClass”。在“MySecondClass”中,是一种在“MyFirstClass”发生更改时使用数据/变量的方法。

到目前为止,当我按下按钮并执行 onPressed 函数时,'MySecondClass' 会更新一次,但即使我再次按下按钮也会保持不变。

这是提供者和类的部分:

如果你想复制这个例子的整个代码,这里是:

0 投票
1 回答
698 浏览

flutter - 如何使用 getit 包监听扩展 changeNotifer 的单例类的变化?

我正在使用颤振的 getit 包。如何使用 getit 包监听扩展 changeNotifer 的单例类的变化?

在上面的代码中,如何将名称的变化反映到 UserDetailsPage 中?

0 投票
1 回答
572 浏览

flutter - ChangeNotifier 不监听值变化

我想在值从 null 更改为数字时通知包装器,但包装器似乎没有收到更改。在下面检查我的代码:

在 main.dart 中,

在 wrapper.dart 中,

当 setID 类中的值发生更改时,包装器中不会收到任何值。谁能帮帮我?先感谢您。

0 投票
1 回答
414 浏览

flutter - 如何使用 Riverpod Notifier 创建下拉按钮?

我想在 Riverpod 中使用 changenotifierProvider 创建 DropDownButton,但我的代码写得不好。请帮我。我想,我只是写了 'watch' 方法,但我不知道如何阅读它。因此,它应该显示选择的项目,并且应该使用 provider.Category 进行更新。

我的 DropDownButton 代码在这里:

这是我的 DropDownButton 图片:(当我选择列表中的任何项目时,它无法正常工作。它总是选择第一个(它选择“英雄联盟”)。 在此处输入图像描述

我选择了steam,但卡片类别显示英雄联盟 我选择蒸汽但是,

0 投票
1 回答
193 浏览

flutter - 为什么我的应用程序(使用 ChangeNotifierProvider 开发)更新时会延迟一级?

我正在开发一个颤振应用程序,我使用 ChangeNotifierProvider 来管理状态。我有一个名为“Data”的类,它是应用程序的模型(MVC 设计模式中的模型)和一个名为“DataManager”的类,它是控制器应用程序(MVC 设计模式中的控制器)并在其中创建一个 Data 实例。我在我的 main 中创建了 ChangeNotifierProvider 的实例,而 ChangeNotifier 是 DataManager。所以 DataManager 中的方法调用 notifyListeners() 方法。当我运行应用程序时,我添加了一个磁贴,尽管添加了磁贴,但 UI 不会改变。在我添加另一个磁贴后,第一个磁贴出现,依此类推。应用程序始终落后于用户一级。你能帮我解决这个问题吗?

这是 main.dart:

这是 Data.dart (它的方法在这里可能并不重要):

这是 DataManager.dart:

还有一个 listView.Builder 添加这些图块(城市小部件):

0 投票
1 回答
74 浏览

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.

0 投票
0 回答
108 浏览

flutter - 如何使用 Provider 实现注册/登录逻辑。颤振,飞镖,移动开发

假设我有三个文件:main.dartLoginScreen.dartHomePageScreen.dart。我正在利用Provider架构进行状态管理和包装 MaterialApp。

当应用启动时,main.dart 文件会检查用户是否已经登录(FirebaseAuth.currentUser 来检查这个)。如果已登录,则导航到 HomePageScreen,如果未登录,则导航到 SignUpScreen。代码上是这样的:

这很棒,它按我的预期工作。如果 currentUser 为 null,则导航到 SignupScreen,如果不是,则导航到 HomePageScreen。

问题:

在 HomepageScreen 中,它侦听 User 提供程序并相应地更新 UI 组件。因此,当用户成功注册新帐户或登录时,我想在提供程序中更改/更新用户的内容,以便当应用程序屏幕从 SignupScreen 切换到 HomePageScreen 时,它会在 HomePageScreen 上显示正确的信息. 但是,我找不到更改提供者内部用户引用的方法。

我尝试过的事情:

在 AppUser.dart 中,我创建了更改用户引用的方法:

这实际上只是改变了用户的内容。这样我可以将用户更新为新创建的用户。然而,我的直觉告诉我,这是解决这个问题的一种非常糟糕的方法。我觉得问题出在逻辑上,我试图实现注册/登录功能的方式。

概括:

有没有办法改变提供者中值的引用?如果这是不可能的,或者使用提供商架构的方式不好,您对如何实现注册功能有任何建议吗

0 投票
1 回答
254 浏览

flutter - 通过提供者创建无限滚动的 ListView:在构建期间调用 setState() 或 markNeedsBuild()

我正在尝试创建 ListView 在滚动屏幕时构建项目的位置。我正在尝试使用提供程序添加内容。

在 itemBuilder 中调用 notifyListener() 时出现错误“在构建期间调用 setState() 或 markNeedsBuild()”。

我知道原因是因为在构建 ListView 期间调用了 notifyListener()。

我的问题是:

  • 是否有在构建之后或之前调用 notifyListener() 的解决方法?
  • 如果这甚至不是合适的方法,那么使用 Provider 将内容添加到 ListView 以进行无限滚动的最佳方法是什么?

这不是这篇文章的重复,因为他的 ListView 小部件不必在滚动发生时一遍又一遍地构建。

my_app.dart

建议.dart