Flutter 如何从工厂创建颤振提供程序notifyListeners()?
我有一个Auth类的提供者。加载应用程序时,我调用一个API,该API返回json,其中包含我使用工厂方法Auth.fromJson映射到Auth类的数据。映射完成后,我希望通知侦听器,以便更新相关的UI。因此,我无法从工厂构造函数调用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
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();
}
}