参数类型'Stream<List<ObjectModel>>'不能分配给参数类型"列表<ObjectModel>"



我正在使用BLoC模式(带有rxdart包)来读取"EmpresaDatosModel"当试图包含接收器时,它会向我抛出以下错误:

参数类型为'Stream>'不能赋值给参数类型'List <EmpresaDatosModel祝辞。">

在BLoC模式中,我使用以下代码:
class EmpresaDatosBloc {
final _empresaDatosController = new BehaviorSubject<List<EmpresaDatosModel>>();
Stream <List<EmpresaDatosModel>>  get empresaDatosStream   => _empresaDatosController.stream;
Stream<List<EmpresaDatosModel>> cargarEmpresasStream() {
final empresasList = _empresaDatosProvider.cargarEmpresasStream();
_empresaDatosController.sink.add(empresasList); //THE ERROR THROWS HERE
return empresasList;
}
dispose() {
_empresaDatosController?.close();
}
}

从Firebase RTDB进行查询的提供程序具有以下内容:

Stream<List<EmpresaDatosModel>> cargarEmpresasStream() {

Query resp = db.child('admon');
final empStream = resp.onValue;
final publicarStream = empStream.map((event) {
final empMap = Map<String, dynamic>.from(event.snapshot.value);
final empList = empMap.entries.map((e) {
return EmpresaDatosModel.fromJson(Map<String,dynamic>.from(e.value));
}).toList();
return empList;
});
return publicarStream;
}

显示小部件看起来像这样:

final empresaDatosBloc = Provider.empresaDatosBloc(context);
empresaDatosBloc.cargarEmpresasStream();
//---
return StreamBuilder(
stream: empresaDatosBloc.empresaDatosStream, 
builder: (BuildContext context, snapshot){
final empresasList = [];
if (snapshot.hasData) {
final myList = snapshot.data as List<EmpresaDatosModel>;
myList.forEach((element) {
empresasList.add(element);
});
}

我如何将List<EmpresaDatosModel>分配给接收器以修复错误?

可以在_empresaDatosControllerBehaviorSubject上调用。addstream

这将数据和错误事件转发到控制器的流。

_empresaDatosController.addStream(empresasList);

希望能帮到你。只要保持对StreamSubscription的引用并使用Stream.listen()方法


class EmpresaDatosBloc {
StreamSubscription<void>? _subscription;
final _empresaDatosController = new BehaviorSubject<List<EmpresaDatosModel>>();
Stream <List<EmpresaDatosModel>>  get empresaDatosStream   => _empresaDatosController.stream;
void cargarEmpresasStream() {
_subscription?.cancel();
_subscription = _empresaDatosProvider.cargarEmpresasStream()
.listen(_empresaDatosController.add, onError: _empresaDatosController.addError);
}
dispose() {
_subscription?.cancel();
_empresaDatosController?.close();
}
}

最新更新