【发布时间】:2020-10-12 19:06:31
【问题描述】:
我知道一些帖子附带了这个错误的解决方案,但我仍然不明白如何在没有 bloc 的情况下使用 StreamController。我的代码中没有使用 bloc 模式,所有解决方案都与 bloc 模式相关。
我有两个选项卡,当我单击选项卡时,会正确显示数据,但是当我第二次单击选项卡时,它会显示此错误。解决方案正在使用流控制器或行为主题,但我不明白如何使用。
错误:错误状态:流已被监听。
提前致谢。
home_page.dart
StreamBuilder<List<Dashboard>>(
stream: _dashboardService.getData(),
builder: (context, snapshot) {
if (!snapshot.hasData) return buildWaitingScreen();
return ListView.builder(
padding: const EdgeInsets.all(8),
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () => onPressCard(
snapshot.data[index], user),
child: Card(
elevation: 10,
child: Container(
padding: EdgeInsets.all(30),
child: Text(
'${snapshot.data[index].name}',
style: TextStyle(fontSize: 16),
),
),
),
);
});
},
),
dashboard_service.dart
Stream<List<Dashboard>> getData() async* {
Stream<QuerySnapshot> sharedDashboardsStream = _databaseService.sharedDashboards;
List<Dashboard> dashboards = List();
await for (var sharedDashboard in sharedDashboardsStream) {
for (var sharedDahsboardDoc in sharedDashboard.documents) {
Dashboard dashboard;
if (sharedDahsboardDoc["dashboardId"] != null) {
DocumentSnapshot dashSnapshot =await _databaseService.getDashboard(sharedDahsboardDoc["dashboardId"]);
dashboard = Dashboard(id: dashSnapshot.documentID, ownerId:dashSnapshot["ownerId"] ,name: dashSnapshot["name"] );
}
dashboards.add(dashboard);
}
yield dashboards;
}
}
【问题讨论】:
标签: firebase flutter flutter-layout stream-builder