【问题标题】:extending extended class or how to get code out of BLoC扩展扩展类或如何从 BLoC 中获取代码
【发布时间】:2021-10-27 09:31:19
【问题描述】:

由于无法扩展诸如class MyBloc extends Bloc<MyEvent, MyState> 之类的类的扩展名,那么从我的 bloc 文件中获取某些功能的最干净的方法是什么?由于逻辑有点复杂,我想得到一些子函数,比如 in

@override
Stream<MyState> mapEventToState(MyEvent event) async* {
  yield* event.map(
    loadRequested: (e) => _mapLoadRequestedToState(),
    dataEntered: (e) => _mapDataEnteredToState(),
  );
}

Stream<LogicChainState> _mapLoadRequestedToState() async* {
  final dataRaw = loadData();
  final dataProc = initData(dataRaw);
  yield doSomeMore(dataProc);
}

我不喜欢使用全局函数的想法。我可以创建一个类

class MyBlocUtils {
  MyData initData(MyData dataRaw) {
  ...
  }
  MyData doSomeMore(MyData dataProc) {
  ...
  }    
}

这仍然不如使用在类 MyBloc 中定义的函数。

有什么建议吗?

【问题讨论】:

  • 为什么要将它们从 bloc 类移到另一个类?
  • 只是为了让代码更干净一点。将主要结构保留在 bloc 类文件中,并将一些实用程序功能移动到一些实用程序文件中。目前我在 bloc 文件中滚动了很多
  • 您是否尝试过将代码导出到 mixin?教程在这里:medium.com/flutter-community/dart-what-are-mixins-3a72344011f3

标签: flutter dart bloc


【解决方案1】:

如果您只想将您的方法分成多个文件,但将它们放在同一个类中,您可以使用extension 方法。

my_bloc.dart

part 'my_bloc_utils.dart';

class MyBloc extends Bloc<MyEvent, MyState> {
  Stream<LogicChainState> _mapLoadRequestedToState() async* {
    final dataRaw = loadData();
    final dataProc = initData(dataRaw);
    yield doSomeMore(dataProc);
  }
}

my_bloc_utils.dart

part of 'my_bloc.dart';

extension MyBlocUtils on MyBloc {
  @override
  Stream<MyState> mapEventToState(MyEvent event) async* {
    yield* event.map(
      loadRequested: (e) => _mapLoadRequestedToState(),
      dataEntered: (e) => _mapDataEnteredToState(),
    );
  }
}

您可以像将所有内容保存在一个文件中一样访问这些方法:

import 'my_bloc.dart';

final myBloc = MyBloc();
final stream = myBloc.mapEventToState(MyEvent());

【讨论】:

  • 非常有趣的想法,但我认为这不允许我想要拆分班级的方式。我的目标是使逻辑更加清晰并加快查找代码的速度。因此,我想将 mapEventToState 与 bloc 主类中的所有 _mapLoadRequestedToState 等一起保留,并将帮助程序 loadData、initData 等移动到一个或一些实用程序文件中
  • 也许你应该考虑重组你的 bloc 类。将您的集团拆分为多个集团将是您问题的答案。
猜你喜欢
  • 2022-08-02
  • 2022-11-10
  • 2012-03-30
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多