问题标签 [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 投票
2 回答
839 浏览

flutter - Riverpod FutureProvider 无法提供 AsyncValue 依赖注入

我有一个LectureRepositoryLectureRepositoryImpl. LectureRepositoryImpl初始化SharedPreferences sharedPreferences

现在我想使用 Riverpod 访问存储库,所以我这样做:

但现在lectureRepositoryProvider,我读到了lectureLocalDataRepositoryProvider我在 value 中得到了一个 AsyncValue localDataSource,我不能在这里分配它:

我应该如何处理 AsyncValue?

0 投票
0 回答
878 浏览

flutter - 如何使用 Providers 或 Riverpod 在 Flutter 中构建状态管理?

我正在编写一个相对简单的应用程序,我需要在其中进行一些状态管理。在查看了所有文档和许多重写之后,我需要帮助来理解如何实际构建和使用为状态管理提供的工具,例如经典提供程序和 Riverpods 提供程序。我的问题涉及保持状态的模型的排列,嵌套这些对象并仅重绘小部件树的一部分。

我的项目是一个移动应用程序,它可以让你保存你的加油站和你支付的钱的共享日志。如果您与一个或多个人共用一辆车,您将进入一个显示燃料条目的池。有用户、日志条目和池的模型。当用户登录时,需要获取并存储多个可用池,并在选择后获取所选池的成员和日志。如果对用户名或特定日志条目等进行了更新,则可能需要更新当前视图。

现在,当前代码是一团糟,其中大部分状态都存储在池模型中,该模型由ChangeNotifierProvider小部件树根处的 a 提供。由于我的印象是应该尝试尽可能少地更新 UI,因此我尝试将我的状态拆分为不同的模型,这些模型相互嵌套,例如LogEnries它们是池模型的一部分,但它们本身就是ChangeNotifier. 这个想法是能够有选择地刷新和收听部分状态。这导致了可怕的代码,我有时需要notifyListeners()从我的池模型/状态对象之外调用。我想通过重写我的状态管理来纠正这种情况。

现在我的问题是:一个结构状态一般(或我的状态)如何才能高效并取悦创建图书馆的魔法之神?这个来自两年/一年前的stackoverflow 问题提出了一个类似的问题,并且提供的答案建议执行以下操作之一:

  1. 将状态保持为嵌套状态并将模型彼此注入ChangeNotifierProvider,但如果提供的对象是模型,这显然不是很好
  2. 将所有内容放在一个状态对象中,其提供者位于树的顶部,并且可能使用选择器仅刷新受影响的 UI 部分
  3. 嵌套模型,但仅提供根作为不可变对象并通过调用函数和复制内容来更新状态

我认为另一种方法是

  1. 使用最近发布的 Riverpod 包,并为各种需求创建许多提供程序。

现在我不知道这些方法中的哪一个更好或更有效,或者它们是否都工作得很好。我对相应方法的问题是:

  1. 我将按什么顺序嵌套它们?我直观地将池嵌套在根状态对象中,池模型中的日志条目,但依赖明智我可能不得不去 User->AppState->selectedPool->Logs,导致可能的logEntry.selectedPool.appState.user. 感觉很奇怪。

  2. 这可能有效,但我总是在一个模型中获得整个状态(在我的用例中可以说不是那么大)。可以使用Selector来仅刷新 UI 的一部分,但我认为使用可变对象存在问题,因为Selector需要能够判断某些内容是否发生了变化。此外,据我了解,我只能使用我专门选择的东西,而不能听与我之后用于 UI 刷新的属性不同的属性。

  3. 和上面一样,还有很多样板代码。

  4. 这似乎是最令人兴奋的,因为riverpod 和它的供应商看起来真的很酷。但是我会嵌套我的状态还是只在全局范围内提供所有内容,并ref.watch()在创建方法中注入一些东西?我会为我想单独收听的每个更改创建一个新的提供程序,还是在我得到对象后弄清楚它是否更便宜?由于 Riverpod 等效于 ChangeNotifier,StateNotifier 仅具有一个值(我认为?),我会为我需要的每条重要信息创建一个新的提供程序吗?

您可能已经注意到,我尝试查找很多东西,但还没有完全弄清楚如何将所有技术转化为超出代码演示大小的实际项目。如果有人能向我解释总体上构建状态管理的正确方法,我将非常感激,哪种方法可能是我的具体情况的最佳方法,最重要的是决定反对其他方法的原因可能是什么。请毫不犹豫地指出我犯的任何错误,尽管 stackoverflow 的声誉表明这可能不是问题。如果有人想看看我的代码,有一个分支我开始致力于更好的模块化,从 AppState 模型开始并重新设计一些功能。

0 投票
2 回答
613 浏览

flutter - 如何在 Flutter 中显示对话框而不在 HookWidget 中使用 Buildcontext

如何在下面给出的示例代码中显示showDialog没有 aBuildcontext的示例代码,该示例代码在扩展 a 的类中HookWidget

目前,我得到一个Undefined name 'context'.

我正在使用以下包来管理我的应用程序的状态:

示例代码:

0 投票
2 回答
1164 浏览

flutter - Flutter/Riverpod:从另一个StateNotifier调用StateNotifier中的方法

StateNotifier我怎样才能从另一个调用一个方法StateNotifier?我想从(下层)打电话addNewHabit(上层)。submitData

以下是类的主体:

这样做的正确方法是什么?

0 投票
3 回答
3104 浏览

flutter - Flutter/Riverpod:UI 不更新 StateNotifierProvider 中的状态更改

当我知道状态正在改变的事实时,我的应用程序的 UI 没有更新。我正在使用watchRiverpod 的方法来处理这个问题,但除非我进行热重载,否则更改不会生效。

我有一个类HabitListStateNotifier,其中包含从列表中添加/删除习惯的方法:

这是提供者:

以下是HabitList(未更新的 UI 部分)的实现方式:

最后,HabitCard(由什么HabitList组成):

当我按下 a 中的删除图标时HabitCard,我知道Habit它已从列表中删除,但更改并未反映在 UI 中。但是,当我进行热重载时,它会按预期消失。我在这里做错了什么?

0 投票
0 回答
280 浏览

flutter - Flutter - multiple errors when running tests

I'm writing my first flutter unit test of my code. The test passes initially but I'm getting two errors:

and:

It doesn't help that flutter seems to have updated the tests dramatically recently by not even using flutter_test anymore, and using test instead. The firebase mock that I found online is using flutter_test.

This is the full error:

[UPDATED] The test:

This is the code under test:

I have created this firebase mock which the test is using:

Any idea why the errors? I get the same ones when running my second unit test also. It almost doesn't seem like an issue with the tests since it is the same errors and both of the tests pass.

0 投票
1 回答
279 浏览

flutter - Riverpod 中的多个 ProviderListener

我有两个 StateNotifierProviders 并想在一个小部件中收听这两个状态变化。我能想到的一种方法是嵌套两个ProviderListeners。但是有一个类似于MultiBlocListenerin Blocpackage 的解决方案会很好。

0 投票
1 回答
735 浏览

flutter - flutter riverpod:如何测试 asyncvalue.error?

当我的 Riverpod FutureProvider 返回 AsyncValue.error 时,我无法测试它。

我尝试了如下所示的测试:

我希望测试返回带有消息“randomError”的文本小部件,但它会引发如下异常:

══╡ EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK The following message was thrown running a test: randomErrorMessage When the exception was thrown, this was the stack:

关于如何在 Riverpod 中测试 AsyncValue.error 案例的任何想法?

谢谢

0 投票
0 回答
259 浏览

flutter - 在未来完成/到期后,正在观察未来的 Riverpod 状态提供者会发生什么

我猜下面的代码会首先返回一个空列表,然后(当future完成时),它将返回future提供的实际数据。

这一切都很好......但我想知道我的列表数据是否会被保留和缓存(这就是我想要的),或者它是否会在未来完成时被清除。

换句话说,“historyItemsProvider”是从下面的手表重建 TWICE 还是 3 次?

0 投票
0 回答
329 浏览

firebase - 如何在 Riverpod 中使用谷歌导航栏?

flutter-riverpod在我的应用程序中使用状态管理。由于使用 Riverpod,我必须将我的更改Stateful widgetconsumer widget,我无法访问setState(). 现在,使用 为底栏编写状态管理代码后Riverpod,它不起作用。

这是我的代码-