我正在使用BLoC模式(带有rxdart包)来读取"EmpresaDatosModel"当试图包含接收器时,它会向我抛出以下错误:
在BLoC模式中,我使用以下代码:参数类型为'Stream
>'不能赋值给参数类型'List <EmpresaDatosModel祝辞。">
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>
分配给接收器以修复错误?
可以在_empresaDatosController
BehaviorSubject
上调用。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();
}
}