如何在 BLoC 模式中调用 sink.fromFuture?
Posted
技术标签:
【中文标题】如何在 BLoC 模式中调用 sink.fromFuture?【英文标题】:How do I call sink.fromFuture in a BLoC pattern? 【发布时间】:2019-05-28 10:55:48 【问题描述】:我陷入了这种情况: 我正在尝试利用 BLoC 模式来处理数据库, 但是当我不知道如何调用 .fromFuture 在溪流的水槽里
代码如下:
class ClientBloc implements BlocBase
static final DatabaseHelper _db = DatabaseHelper();
final _listController = StreamController<List<Client>>();
Sink<List<Client>> get sinkList => _listController.sink;
Stream<List<Client>> get streamList => _listController.stream;
final StreamController<Client> _saveClientCtrl = StreamController<Client>();
Sink<Client> get sinkSave => _saveClientCtrl.sink;
ClientBloc()
sinkList.add(_getList()); <----ERROR HERE
_saveClientCtrl.stream.listen(_saveClient);
static Future<List<Client>> _getList() async => await _db.getClientsList();
@override
void dispose()
_listController.close();
_saveClientCtrl.close();
void _saveClient(data)
_db.saveClient(data);
sinkList.add(_getList()); <----ERROR HERE
错误很明显
> The argument type 'Future<List<Client>>' can't be assigned to the parameter type 'List<Client>'.dart(argument_type_not_assignable)
_getList() → Future<List<Client>>
你能帮帮我吗? 先感谢您 弗朗切斯科
【问题讨论】:
【参考方案1】:也许您可以尝试创建另一种方法?
像这样:
someMethod() async
List<Client> yourList = await _db.getClientsList();
sinkList.add(yourList);
然后将该方法插入到您的构造函数中:
ClientBloc()
someMethod();
...
【讨论】:
谢谢杰罗姆,它按预期工作(新年快乐)以上是关于如何在 BLoC 模式中调用 sink.fromFuture?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter BLoC 模式 - 如何在流事件后导航到另一个屏幕?
如何使用 bloc 并在 dart 中手动侦听 bloc.state 而不是通过 Flutter 或 AngularDart 的 bloc 管道?