Flutter 如何从工厂创建颤振提供程序notifyListeners()?

Flutter 如何从工厂创建颤振提供程序notifyListeners()?,flutter,dart,flutter-provider,Flutter,Dart,Flutter Provider,我有一个Auth类的提供者。加载应用程序时,我调用一个API,该API返回json,其中包含我使用工厂方法Auth.fromJson映射到Auth类的数据。映射完成后,我希望通知侦听器,以便更新相关的UI。因此,我无法从工厂构造函数调用notifyListeners,因为我遇到以下错误: 无法从工厂构造函数访问实例成员 为什么会这样?我可以实施哪些变通方法?在工厂映射数据之后,我需要能够以某种方式通知侦听器 class Auth with ChangeNotifier { String to

我有一个Auth类的提供者。加载应用程序时,我调用一个API,该API返回json,其中包含我使用工厂方法Auth.fromJson映射到Auth类的数据。映射完成后,我希望通知侦听器,以便更新相关的UI。因此,我无法从工厂构造函数调用notifyListeners,因为我遇到以下错误:

无法从工厂构造函数访问实例成员

为什么会这样?我可以实施哪些变通方法?在工厂映射数据之后,我需要能够以某种方式通知侦听器

class Auth with ChangeNotifier {
  String token;
  String organisationId;
  String domain;
  String userId;

  Auth(
      {this.token,
      this.organisationId,
      this.domain,
      this.userId});

  factory Auth.fromJson(Map<String, dynamic> json) {
    Auth(
      token: json['token'],
      organisationId: json['organisationId'],
      domain: json['domain'],
      userId: json['userId'],
    );
    notifyListeners(); // Error here. 
    return Auth();
  }
}
工厂方法与静态方法非常相似。无法访问类变量和方法的方式也适用于factory。 通知听众;是ChangeNotifier类的方法,因此不能通过任何静态方法或工厂方法访问它。 您需要一个Auth实例来调用notifyListeners; 更好的做法是不要将Auth设置为ChangeNotifier,如果您确实希望观察Auth中的更改,那么就创建一个保存Auth值的ChangeNotifier。下面是代码。 您还可以将ValueNotifier用于此用例,并使用ValueListenableBuilder观察它 希望对你有所帮助,如果你有任何疑问,请告诉我

工厂方法与静态方法非常相似。无法访问类变量和方法的方式也适用于factory。 通知听众;是ChangeNotifier类的方法,因此不能通过任何静态方法或工厂方法访问它。 您需要一个Auth实例来调用notifyListeners; 更好的做法是不要将Auth设置为ChangeNotifier,如果您确实希望观察Auth中的更改,那么就创建一个保存Auth值的ChangeNotifier。下面是代码。 您还可以将ValueNotifier用于此用例,并使用ValueListenableBuilder观察它
希望有帮助,如果您有任何疑问,请告诉我。

您正在尝试在创建对象后立即通知Auth对象的侦听器。此时将有什么侦听器?您正在尝试在创建对象后立即通知Auth对象的侦听器。届时会有哪些听众?谢谢。那么我从哪里打电话给onNewAuth让他通过newAuth?我在http响应处理程序中调用了Auth.fromJson。我假设当它返回时,我可以调用AuthChangeNotifier.onNewAuth传递先前返回的Auth实例…?您有一个现有的Auth->您从api接收新的Auth->从JSON解析它->将它交给ChangeNotifier->所有侦听器都将接收新的Auth实例。就是这样。@KalpeshKundanani在上面的例子中,你能解释一下你将如何把它交给ChangeNotifier吗?我已经创建了一个名为onNewAuth的方法,这就是我如何把它交给ChangeNotifierTanks的方法。那么我从哪里打电话给onNewAuth让他通过newAuth?我在http响应处理程序中调用了Auth.fromJson。我假设当它返回时,我可以调用AuthChangeNotifier.onNewAuth传递先前返回的Auth实例…?您有一个现有的Auth->您从api接收新的Auth->从JSON解析它->将它交给ChangeNotifier->所有侦听器都将接收新的Auth实例。就是这样。@KalpeshKundanani在上面的例子中,你能解释一下你将如何把它交给ChangeNotifier吗?我已经创建了一个名为onNewAuth的方法,这就是我如何把它交给ChangeNotifier的方法
import 'package:flutter/material.dart';

class Auth{
  String token;
  String organisationId;
  String domain;
  String userId;

  Auth(
      {this.token,
      this.organisationId,
      this.domain,
      this.userId});

  factory Auth.fromJson(Map<String, dynamic> json) {
    return Auth(
      token: json['token'],
      organisationId: json['organisationId'],
      domain: json['domain'],
      userId: json['userId'],
    ); 
  }
}

class AuthChangeNotifier  with ChangeNotifier {
  Auth auth;
  onNewAuth(Auth newAuth){
    this.auth = newAuth;
    notifyListeners();
  }
}