【问题标题】:How do I call sink.fromFuture in a BLoC pattern?如何在 BLoC 模式中调用 sink.fromFuture?
【发布时间】: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>>

你能帮帮我吗? 先感谢您 弗朗切斯科

【问题讨论】:

    标签: sql dart flutter bloc


    【解决方案1】:

    也许您可以尝试创建另一种方法?

    像这样:

    someMethod() async{
        List<Client> yourList = await _db.getClientsList();
        sinkList.add(yourList);
    }
    

    然后将该方法插入到您的构造函数中:

    ClientBloc() {
        someMethod();
        ...
    }
    

    【讨论】:

    • 谢谢杰罗姆,它按预期工作(新年快乐)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2019-09-11
    • 2021-12-01
    • 2019-11-20
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多