错误“类型'Future <dynamic>'不是类型'StreamTransformer <list <string>,List <string >>'的子类型”

时间:2019-02-02 16:59:15

标签: dart stream flutter rxdart bloc

我收到错误消息:“ BLOC中的'Future类型不是'StreamTransformer,List>类型的子类型'。

这是我的应用程序的结构: BLOC(即,reports_bloc)。 存储库(即存储库)。 API提供程序(即api_provider)。

详细地说,API Provider文件在线获取数据。 Repository文件准备好来自API Provider的数据(实际上,我也在使用DB,这是我选择拥有Repository文件的原因)。 BLOC旨在从存储库中获取数据,并将其相应地添加到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;
   }

预期的结果是能够从所述信息库中添加的数据和信宿它。

1 个答案:

答案 0 :(得分:0)

我已经能够解决此错误。简而言之,我所做的就是重新定义ReportsBloc类的构造函数,如下所示:

publishing {
    publications {
        bootJava(MavenPublication) {
            artifact bootJar
            artifact testJar
        }
    }
}

但是,我不确定这是否是一个好习惯,但是还是解决了我的问题。