我在我的 BLOC 中收到错误“类型‘Future’不是‘StreamTransformer,List>’类型的子类型”。
这是我的应用程序的结构:一个 BLOC(即,reports_bloc)。一个Repository(即repository)。一个 API Provider(即 api_provider)。
详细地说,API Provider 文件在线获取数据。Repository 文件准备好来自 API Provider 的数据(实际上,我也在使用 DB,这也是我选择使用 Repository 文件的原因)。BLOC 旨在从 Repository 获取数据并相应地将其添加到 Stream 和 Sink。我相信问题出在 BLOC 中(关于添加到 Stream 和“下沉”数据,我可能在这里弄错了)。
代码在这里:
//reports_bloc.dart
import 'package:rxdart/rxdart.dart';
import '../resources/repository.dart';
class ReportsBloc {
final _repository = Repository();
final _allReports = PublishSubject<List<dynamic>>();
Observable<List<dynamic>> allReports;
ReportsBloc(){
allReports = _allReports.stream.transform(fetchAllReports());
}
fetchAllReports() async{
var reports = await _repository.fetchAllReports();
_allReports.sink.add(reports);
}
dispose() {
_allReports.close();
}
}
//repository.dart
import 'dart:async';
import 'api_provider.dart';
class Repository {
ApiProvider apiProvider = ApiProvider();
Future<List<dynamic>> fetchAllReports(){
var response = apiProvider.getAllReports();
return response;
}
}
//api_provider.dart
Future<List<dynamic>> getAllReports() async {
List<dynamic> reports = [];
final response = await http.get("$_root$_getAllReports");
var result = json.decode(response.body);
for(var i = 0; i < result.length; i++){
reports.add(result[i]);
print(reports[i]['type']);
}
return reports;
}
预期的结果是能够从存储库添加数据并接收它。