在Bloc的状态改变后,需要通知Bloc的监听器。这可以通过在Bloc中使用StreamController来完成。
示例代码如下:
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
part 'counter_event.dart';
part 'counter_state.dart';
class CounterBloc extends Bloc {
CounterBloc() : super(CounterInitial());
int _counter = 0;
StreamController _counterController = StreamController.broadcast();
Stream get counterStream => _counterController.stream;
@override
Stream mapEventToState(
CounterEvent event,
) async* {
if (event is Increment) {
_counter++;
_counterController.add(_counter); // 发送计数器值
yield CounterChanged(_counter); // 返回新的Bloc状态
} else if (event is Decrement) {
_counter--;
_counterController.add(_counter); // 发送计数器值
yield CounterChanged(_counter); // 返回新的Bloc状态
}
}
@override
Future close() {
_counterController.close();
return super.close();
}
}
在上面的代码中,首先定义了一个StreamController
类型的_counterController
,并在构造函数中进行了初始化。
然后在mapEventToState
方法中,每当计数器改变时,调用了_counterController.add
方法来通知监听器,同时返回新的Bloc状态CounterChanged(_counter)
。
使用这种方式,Bloc的监听器就能够监听到状态改变了。
上一篇:Bloc架构:从实用和即兴的身份验证/数据库连接迁移
下一篇:Bloc监听器未触发