错误状态:Stream 已经被 flutter provider 监听
Bad state: Stream has already been listened to flutter provider
我正在使用 Provider 加载 json 数据并在执行任何操作时刷新应用程序状态。
这是我的 Provider ChangeNotifier
class ClassesDetails with ChangeNotifier {
Future<void> getLiveClassList(String token) async {
final url = FitApis.demoBaseURL + "live/class";
try {
final response = await http.get(url, headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': token,
});
//print(response.body);
final responseData = json.decode(response.body);
if (responseData['data'] != null) {
notifyListeners();
Map typesMap = jsonDecode(response.body);
var types = new LiveClassListModel.fromJson(typesMap);
_liveClassController.add(types);
}
} catch (error) {
throw (error);
}
}
final _liveClassController = StreamController<LiveClassListModel>();
Stream<LiveClassListModel> get liveClassStream {
return _liveClassController.stream;
}
void refreshLiveClasses(String token) {
getLiveClassList(token);
}
}
这是getIt用于访问提供者对象
final getIt = GetIt.instance;
void setup() {
getIt.registerSingleton<ClassesDetails>(ClassesDetails());
}
获取数据的方法调用
Future<void> getLiveClassList() async {
final classProvider = getIt<ClassesDetails>();
classProvider.getLiveClassList("token)";
classProvider.liveClassStream.listen((snapshot) { });
}
正在刷新数据
classProvider
.refreshLiveClasses("token");
一切正常。但问题是,当我从应用程序注销并再次登录时,出现错误 错误状态:流已被收听 。我搜索了很多但没有得到有用的解决方案。我试过 但没有用。我尝试 classProvider.closeStream() 但没有用。请帮我解决这个问题。
我刚刚创建了一个相同的流并发现了问题,只需像这样更改您的 StreamController
:
final _liveClassController = StreamController<LiveClassListModel>.broadcast();
我正在使用 Provider 加载 json 数据并在执行任何操作时刷新应用程序状态。
这是我的 Provider ChangeNotifier
class ClassesDetails with ChangeNotifier {
Future<void> getLiveClassList(String token) async {
final url = FitApis.demoBaseURL + "live/class";
try {
final response = await http.get(url, headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': token,
});
//print(response.body);
final responseData = json.decode(response.body);
if (responseData['data'] != null) {
notifyListeners();
Map typesMap = jsonDecode(response.body);
var types = new LiveClassListModel.fromJson(typesMap);
_liveClassController.add(types);
}
} catch (error) {
throw (error);
}
}
final _liveClassController = StreamController<LiveClassListModel>();
Stream<LiveClassListModel> get liveClassStream {
return _liveClassController.stream;
}
void refreshLiveClasses(String token) {
getLiveClassList(token);
}
}
这是getIt用于访问提供者对象
final getIt = GetIt.instance;
void setup() {
getIt.registerSingleton<ClassesDetails>(ClassesDetails());
}
获取数据的方法调用
Future<void> getLiveClassList() async {
final classProvider = getIt<ClassesDetails>();
classProvider.getLiveClassList("token)";
classProvider.liveClassStream.listen((snapshot) { });
}
正在刷新数据
classProvider
.refreshLiveClasses("token");
一切正常。但问题是,当我从应用程序注销并再次登录时,出现错误 错误状态:流已被收听 。我搜索了很多但没有得到有用的解决方案。我试过
我刚刚创建了一个相同的流并发现了问题,只需像这样更改您的 StreamController
:
final _liveClassController = StreamController<LiveClassListModel>.broadcast();