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

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

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

final groupControllerProvider = Provider<GroupController>((ref) {
  return GroupController();
});

字符串
自定义类

class GroupController {
  List<Map<String, dynamic>>? myVariable;

  GroupController();

  Future<void> toDoWithMyVar() async {
    myVariable = ...;
  }
}


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

lskq00tm

lskq00tm1#

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

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

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

final variableProvider = NotifierProvider<TodosNotifier, List<Map<String, dynamic>>?>(VariableNotifier.new);

class VariableNotifier extends Notifier<List<Map<String, dynamic>>?> {

  @override
  List<Map<String, dynamic>>? build() {
    return null;
  }

  Future<void> toDoWithMyVar() async {
    state = ...;
  }

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

相关问题