Riverpod 中的 autoDispose 修改器

发布于 2025-01-10 03:48:00 字数 580 浏览 0 评论 0原文

我在提供程序中有多个值(在类中),当我在提供程序中使用 autoDispose 修饰符时,我只想处理提供程序中的几个值,是否可以这样做?

我在互联网上搜索过此内容,但没有找到与此要求相关的任何资源。

final provider = StateProvider((ref) => LoginDetails(
      errorMessage: '', status: 0));

class LoginDetails {
  int status;
  String errorMessage;
  LoginDetails({
    required this.status,
    required this.errorMessage,
  });

  LoginDetails copyWith({
    int? status,
    String? errorMessage,
  }) =>
      LoginDetails(
        status: status ?? this.status,
        errorMessage: errorMessage ?? this.errorMessage,
      );
}

I have multiple values (in class) in provider and when I use the autoDispose modifier in provider then I want to dispose of only a few values in the provider is it possible to do like this?

I have searched for this on the internet but I didn't find any resources related to this requirement.

final provider = StateProvider((ref) => LoginDetails(
      errorMessage: '', status: 0));

class LoginDetails {
  int status;
  String errorMessage;
  LoginDetails({
    required this.status,
    required this.errorMessage,
  });

  LoginDetails copyWith({
    int? status,
    String? errorMessage,
  }) =>
      LoginDetails(
        status: status ?? this.status,
        errorMessage: errorMessage ?? this.errorMessage,
      );
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ゝ杯具 2025-01-17 03:48:00

没有办法让 autoDispose 只处理一些属性。
autoDispose 要么全有,要么全无

另一方面,使用 2.0.0-dev 版本,您可以使用 ref.onCancel 在最后一个侦听器被删除时执行一些逻辑 - 这即使在非 autoDispose 的提供程序上也可用,

因此您可以执行以下操作:

final provider = Provider((ref) {
  ref.onCancel(() {
    // TODO reset the few properties of your choice
  });

  return SomeState();
});

There is no way to have autoDispose only dispose a few property.
autoDispose is all or nothing

On the other hand, using version 2.0.0-dev, you can use ref.onCancel to perform some logic when the last listener is removed – which is available even on providers that are not autoDispose

So you can do:

final provider = Provider((ref) {
  ref.onCancel(() {
    // TODO reset the few properties of your choice
  });

  return SomeState();
});
睫毛溺水了 2025-01-17 03:48:00

我知道有两种方法可以做到这一点

第一种方法是将变量设为私有静态

  static int _status = 0;
  
  // You can access it outside the Provider class by using getter
  int get status => _status;

第二种方法是使用另一个提供程序来包含您不想丢失的所需信息,我更喜欢这种方式。

我仍然确信有很多替代解决方案,但这完全取决于您的用例。

I know two ways to do that

The first way is to make the variables private static

  static int _status = 0;
  
  // You can access it outside the Provider class by using getter
  int get status => _status;

The second way is to have another provider that contains the needed information which you don't want to lose, and I prefer this way.

and still I am sure there is many alternative solutions out there but it's all depends on your use case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文