如何解决不良状态:Stream已被Flutter提供程序监听
我正在使用unittest加载json数据并在执行任何操作时刷新应用状态。
这是我的提供商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);
}
}
这是Provider用于访问提供程序对象
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");
这工作正常。但是问题是,当我从应用程序注销并再次登录时,它给我错误 Bad状态:流已经被监听。我搜索了很多,但没有得到有用的解决方案。我尝试了getIt,但是没有用。我尝试使用classprovider.closeStream(),但无法正常工作。请帮我解决这个问题。
解决方法
我刚刚创建了一个相同的流并发现了问题,只需像这样更改您的StreamController
:
final _liveClassController = StreamController<LiveClassListModel>.broadcast();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。