flutter - 扩展扩展类或如何从 BLoC 中获取代码
问题描述
由于无法扩展类的扩展,例如class MyBloc extends Bloc<MyEvent, MyState>
,从我的 bloc 文件中获取某些功能的最干净的方法是什么?由于逻辑有点复杂,我想得到一些子函数,比如
@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) {
...
}
}
这仍然不如使用在 class 中定义的函数好MyBloc
。
有什么建议吗?
解决方案
如果您只想将方法分成多个文件,但将它们保存在同一个类中,则可以使用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());
推荐阅读
- vue.js - nuxt ssr false 设置代理 javascript
- mongodb - 将对象数组转换为该对象的值数组
- scipy - 最小化标量的应用
- javascript - 如何将来自异步函数的数据存储在新数组中?
- html - 是否可以在 HTML 中将逗号分隔的 .txt 文件分成单独的列?
- python - WebException timeout Selenium Python,第一次通过循环工作,然后超时
- javascript - 如何从立即调用的匿名异步函数 (IIFE) 中更改全局变量?
- cryptocurrency - PancakeSwapTokenList 电报机器人如何工作?
- python - 如何解决未正确寻找和抓住枕头中的框架
- python - Force discord to display failed interaction message