dart 自定义类提供程序中的可变变量Riverpod Flutter

c9qzyr3d  于 2023-07-31  发布在  Flutter
关注(0)|答案(1)|浏览(170)

我对Flutter有点陌生,我正在使用Riverpod。在我使用Provider传递的类中有一个可变变量可以吗?
我的供应商

  1. final groupControllerProvider = Provider<GroupController>((ref) {
  2. return GroupController();
  3. });

字符串
自定义类

  1. class GroupController {
  2. List<Map<String, dynamic>>? myVariable;
  3. GroupController();
  4. Future<void> toDoWithMyVar() async {
  5. myVariable = ...;
  6. }
  7. }


如果不好,还有什么选择?谢啦,谢啦

lskq00tm

lskq00tm1#

如果您的类只是一个服务/存储库,不涉及更新状态和重建小部件,那么明智的做法是使用Provider进行优雅的依赖注入。
如果变量myVariable将是某个状态,则应基于该状态重新构建小部件,然后

  • 在最简单的情况下使用StateProvider| FutureProvider
  • 如果您的状态需要复杂/多个方法来更改它,则使用(Async)NotifierProvider

在后一种情况下,你的代码看起来像这样:

  1. final variableProvider = NotifierProvider<TodosNotifier, List<Map<String, dynamic>>?>(VariableNotifier.new);
  2. class VariableNotifier extends Notifier<List<Map<String, dynamic>>?> {
  3. @override
  4. List<Map<String, dynamic>>? build() {
  5. return null;
  6. }
  7. Future<void> toDoWithMyVar() async {
  8. state = ...;
  9. }

字符串
您可能还应该研究像freezed这样的包,它允许您方便地管理不可变对象。事实上,要使这些提供程序正常工作,您的状态必须是不可变的,并具有正确重定义的hashcode|==

展开查看全部

相关问题