通过字段,方法或getter公开BLOC流

时间:2018-12-27 21:05:33

标签: oop dart flutter bloc

我正在为最新的Flutter应用程序使用BLOC模式,并且开始在输出流中使用如下所示的内容:

class MyBloc {
  // Outputs
  final Stream<List<Todo>> todos;

  factory MyBloc(TodosInteractor interactor) {
    final todosController = BehaviorSubject<List<Todo>>()
      ..addStream(interactor.todos);

    return MyBloc._(todosController);
  }

  MyBloc._(this.todos);
}

但是慢慢地,我发现自己在一段时间后使用一种方法(或吸气剂)来做类似的事情:

class MyBloc {
  final TodosInteractor _interactor;
  // Outputs
  Stream<List<Todo>> todos(){
    return _interactor.todos;
  }

   MyBloc(this._interactor) {  }

}

对于想在todosTodosInteractor吸气的人:

  Stream<List<Todo>> get todos {
    return repository
        .todos()
        .map((entities) => entities.map(Todo.fromEntity).toList());
  }

当我查看不同的代码时,我看到第一个示例使用字段而不是方法来公开流,但是我不知道为什么我会选择一个而不是另一个。在我看来,创建另一个仅用于推送流的控制器有点...除了在我的todos流定义中保持不变之外,这还有其他好处吗?还是我只是在梳头?

1 个答案:

答案 0 :(得分:1)

也许这不是一个最佳答案,但这是一个很好的做法,可以使用get方法公开您的输出流。下面是我使用RxDart编写到项目中的bloc类的示例。

SELECT 
    object_schema,
    object_name,
    index_name
FROM 
    performance_schema.table_io_waits_summary_by_index_usage 
WHERE
    index_name IS NOT NULL
   AND count_star = 0
ORDER BY object_schema, object_name;