flutter - Flutter 提供者如何关闭每个实例
问题描述
我将 Provider 包与 Flutter ( https://pub.dev/packages/provider ) + Firebase Auth + Firestore 一起使用,但我遇到了无法解决的 Streams 问题。这是一些代码:
在我的 main.dart
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
InheritedProvider<FeedController>(create: (_) => FeedController()),
... others
],
child: MaterialApp(...)
...
}
我的 FeedController 托管多个流,例如这两个示例:
final _feedData = StreamController<QuerySnapshot>();
Stream<QuerySnapshot> get feedData => _feedData.stream;
or
Stream<QuerySnapshot> loadTags() async* {
yield* _database.retrieveUserTags(await _auth.retrieveUserUid());
}
我的问题是当我退出 Firebase 时,因为我没有通过身份验证,所以我有“PERMISSION_DENIED:缺少或不足的权限”。我知道为什么:我的流没有关闭,并且当我注销时,我无权从 Firebase 读取数据(我已阻止未经授权的读取)。我只想在注销之前关闭 Provider 传递的每个实例,然后调用我的注销函数。关于我该怎么做的任何想法?它只是在日志中,但我想解决这个问题。
我试图做这样的事情:
在我的 FeedController
// Closing all Streams
void dispose() {
_isLoadingController.close();
_feedData.close();
_newData.close();
}
并在注销前调用:
Provider.of<FeedController>(context, listen: false).dispose();
但是我有错误说即使我没有尝试将数据添加到关闭的流中,我也无法在流关闭后添加数据..
谢谢
解决方案
推荐阅读
- corda - JMX Metrics 和 New Relic
- python-3.x - 使用 Pydrive 按 modifiedTime 查询文件
- r - 使用 R 中的绘图函数,我希望将带有标签的数据点展开而不是索引,因为我只有 y 值
- c# - 如何在没有无头浏览器的情况下在服务器端创建 Google 图表?
- javascript - 将表单名称发送到 JS/jQuery 和序列化
- python - Python:从一个 txt 文件中解析多个 JSON 对象
- c++ - 指针作为类变量 Qt
- c# - 将值从“select asp-for”传递到“textarea”asp.net core razor
- dc.js - 今天如何在折线图上添加垂直线?
- meteor - MeteorJS - 不能使用 npm 包作为 Picker 路由器的中间件