Вам нужно создать экземпляр блока blo c внутри своего класса обслуживания, если вы хотите приемник блока blo c и там добавить значения в приемник. Так, например, у вас есть класс обслуживания, который создает экземпляр блока в состоянии инициализации, и не забудьте закрыть его в dispose () следующим образом:
class Service extends StatefullWidget{
@override
_ServiceState createState() => _ServiceState();
}
class _ServiceState extends State<Service> {
MyBloc _myBloc;
@override
void initState() {
_myBloc = MyBloc();
super.initState();
}
@override
void dispose() {
_myBloc?.close();
super.dispose();
}
Future<List<MyEntity>> getByString(String s) async {
final CollectionReference _dbs = Firestore.instance.collection(_baseUrl);
QuerySnapshot query =
await _dbs.where("string", isEqualTo: s).getDocuments();
List<MyEntity> products = query.documents
.map((doc) => MyEntity.fromSnapshotJson(doc))
.toList();
return products;
}
Теперь в классе Service везде, где вы хотите передать строку, просто вызовите
List<MyEntity> products = await getByString("search string");
_myBloc.listEvent.add(products);
и просто измените код MyBlo c, так как он не требует обслуживания в своем конструкторе, например:
class MyBloc extends BlocBase {
final BehaviorSubject<List<MyEntity>> _controller =
new BehaviorSubject<List<MovieEntity>>.seeded(List<MyEntity>());
Observable<List<MovieEntity>> get listFlux => _controller.stream;
Sink<List<MovieEntity>> get listEvent => _controller.sink;
@override
void dispose() {
_controller?.close();
super.dispose();
}
}