问题标签 [riverpod]

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 投票
3 回答
983 浏览

flutter - Riverpod - 如何在消费者中包装 PreferredSizeWidget

我有一个DefaultTabController并且我有一个返回页面List<PreferredSizeWidget>的方法AppBar。我希望他们在 a 中观看状态,ChangeNotifier因此我想将它们包装在 a 中Consumer。当我尝试这样做时,我收到如下错误:

“参数类型‘Widget’不能分配给参数类型‘PreferredSizeWidget’。”

我怎样才能解决这个问题?

谢谢并恭祝安康。

0 投票
3 回答
1260 浏览

flutter - 用 mockito 测试 Riverpod 的正确方法是什么

用mockito测试riverpod的正确方法是什么?

运行上面的代码,

运行测试返回

我是riverpod的新手,显然我错过了一些我试图遵循的东西

0 投票
1 回答
254 浏览

flutter - 删除特定小部件 | 颤振和Riverpod

如图所示,我试图有一个骰子列表,我可以在其中添加或删除骰子。我尝试过 StateProvider、ChangeNotifier 和 StateNotifier。每一个似乎都没有像我期望的那样工作。我正在尝试创建一个包含 dieWidgets 列表的提供程序,但是当我长按它时,我无法弄清楚如何删除特定的 die。图像显示了一个删除它的弹出菜单,这是长期目标,但现在只需长按删除就可以了。关于如何解决这个问题的想法?

模具小部件

代码

主要.dart

die_widget.dart

0 投票
1 回答
563 浏览

flutter - StateNotifierProvider 不在 Flutter 中保持状态(Riverpod)

基本上我要做的是:当移动应用程序启动时,它会检查我的本地数据库中是否存在用户条目。检查时,现在有一个空的黄色屏幕,表示它正在加载/检查尚未完成。完成后,它应该根据用户数据显示一个屏幕。为此,我使用 Riverpod 包创建了一个 StateNotifierProvider。

初始状态为 null,但也可以更改为我的屏幕枚举值(SignInScreen、EmailVerificationScreen 等)。

现在,当启动应用程序时,状态显然是空的,所以我显示的是黄屏。完成搜索后,状态从 null 更改为基于用户数据的值。因此,我之前创建了一个 if 语句,它检查状态是否为空,以便我知道是否已经有一个初始屏幕显示在黄色加载屏幕之后并设置它。

但是当我插入一个用户并且用户流再次运行时,它再次在 if 语句内运行,这告诉我状态再次为空。在我在不同的位置多次检查状态后,它总是显示为空。

所以我现在的问题是:为什么它总是 null 并且不保留我通过的屏幕?

注意:在黄色屏幕之后,它向我显示了应有的 OnboardingScreen,所以我知道将屏幕传递给 StateNotifier 是有效的。但是,当谈到为什么它立即变回 null 的问题时,这对我没有帮助。

0 投票
1 回答
64 浏览

flutter - 如何同步初始化我的提供程序?(河足)

我有一个像这样的提供者:

但是,当我尝试使用提供程序时:

该列表作为空值检索。

我这样做对吗?(在河流 pod 和状态管理方面,我完全是个菜鸟)。

0 投票
2 回答
1446 浏览

flutter - Flutter Riverpod StateNotifier 在页面构建时加载数据

我正在开发一个新的应用程序并使用状态通知器测试 Riverpod,并且有一个关于在构建页面时可以在哪里加载初始数据的问题。

我有以下状态类:

这个 state_notifier 类:

现在我的 widged 类(页面)使用这样的状态通知器:

但在页面加载之前,我必须打电话

最好的方法是什么?

我已经尝试过使用 statefull 小部件并像这样覆盖 initstate

这可行,但我不确定这是否是最好的方法。

我有很多页面必须在绘制数据之前加载数据,并且我不确定将所有这些页面转换为有状态的小部件以覆盖 initstate 是否是最佳解决方案。

0 投票
1 回答
94 浏览

flutter - 状态更改时 AppWidget 主页不会更改

使用 Riverpod + StateNotifier 但我认为其他提供商也存在同样的问题。

我有一个身份验证 StateNotifier 类和 StateNotifierProvider 并将 MaterialApp 小部件包装到 Riverpod Consumer 中,以在用户不再经过身份验证时重建完整的应用程序/小部件树。

一旦我使用 pushReplacementNamed 导航到第三页并更新 authenticationStateNotifierProvider 的状态,我可以看到包装应用程序的消费者的构建方法被触发并且状态被更新(打印(状态))但主页和小部件树没有重建。

带有问题的 3 个屏幕的示例应用程序:

如果您测试应用程序,您将看到登录和主页之间的状态管理与代码的预期一样,但是一旦您从主页导航到第二个屏幕并按下注销按钮,应用程序上的状态就会改变,但是小部件树未更新。

0 投票
1 回答
885 浏览

flutter - 颤动的riverpod ConsumerWidget没有被重建

我刚刚将riverpod 实现到我编写的一个小应用程序中。

flutter_riverpod: ^0.12.1

我的问题是,当我更新提供者时,尽管调用了“watch”,但小部件并没有被重建。

提供者本质上跟踪应该显示的当前页面。

PageButtons 小部件绘制一组 RaisedButtons。当用户单击其中一个凸起的按钮时,当前页面编号。应该更改并且应该重建 PageButton 小部件,以便我们可以更改与当前页面对应的 RaisedButton 的颜色。

你可以在上面的构建方法中看到我称之为watch:

然后在 onPressed for a Raised 按钮中更新 currentPage:

在我的日志中,我看到:

日志告诉我正在调用 onPressed 方法,并且我正在更新 currentPageProvider。

但是没有调用 PageButtons 的构建器。

我究竟做错了什么?

0 投票
1 回答
1274 浏览

firebase - 在 Flutter StateNotifier + Riverpod 架构中初始化未来数据

所以我在这篇文章中实现了 ResoCoder 在 YouTube 上展示的架构:https ://resocoder.com/2020/12/11/flutter-statenotifier-riverpod-tutorial-immutable-state-management/#t-1607415476843 。

我在理解什么是按照他的方案初始化未来数据的最佳方法时遇到了一些问题。

假设我有一个虚拟的 Repository 类:

天气状态类:

天气通知器:

两家供应商:

和 WeatherSearchPage (UI):

在哪里

如果我需要在创建页面时获取默认城市天气,我应该按照这个逻辑在哪里调用它?

我尝试将 WeatherSearchPage (UI) 转换为有状态小部件并像这样调用 initState

它有效,但看起来不是很干净,并且没有利用小部件的 InitialState。有什么建议么?

谢谢!

0 投票
1 回答
621 浏览

flutter - List.add 和手动将项目添加到 Riverpod StateNotifier 之间的区别>

我想学习如何使用Riverpod,因此为此我正在实现一个小应用程序,该应用程序显示项目列表和一个在点击时将虚拟项目添加到列表的按钮。

问题上下文

在以下应用程序中按下按钮会按预期工作(添加了一个虚拟项目,并且更改会立即反映在 UI 中):

问题

在类的add方法中ItemsList,我认为将语句更改state = [...state, item]state.add(item)不会有任何区别。但是,这样做会使应用程序不再响应状态更改:点击按钮不会触发 UI 更改,并且在我热重新加载我的应用程序之前,我在 UI 中看不到任何新项目。

所以要明确一点:更改void add(String item) => state = [...state, item];void add(String item) => state.add(item);打破应用程序状态和 UI 之间的链接。

为什么手动添加具有列表解构的项目与使用不同List.add?非常感谢您提前。