2023-01-29 16:57:47 +00:00
|
|
|
import 'dart:async';
|
2023-05-11 13:30:18 +00:00
|
|
|
|
2023-01-29 16:57:47 +00:00
|
|
|
import 'package:lightmeter/interactors/metering_interactor.dart';
|
|
|
|
import 'package:lightmeter/screens/metering/communication/bloc_communication_metering.dart';
|
|
|
|
import 'package:lightmeter/screens/metering/communication/event_communication_metering.dart'
|
|
|
|
as communication_event;
|
|
|
|
import 'package:lightmeter/screens/metering/communication/state_communication_metering.dart'
|
|
|
|
as communication_states;
|
2023-05-11 13:30:18 +00:00
|
|
|
import 'package:lightmeter/screens/metering/components/light_sensor_container/event_container_light_sensor.dart';
|
|
|
|
import 'package:lightmeter/screens/metering/components/light_sensor_container/state_container_light_sensor.dart';
|
|
|
|
import 'package:lightmeter/screens/metering/components/shared/ev_source_base/bloc_base_ev_source.dart';
|
2023-01-29 16:57:47 +00:00
|
|
|
import 'package:lightmeter/utils/log_2.dart';
|
|
|
|
|
|
|
|
class LightSensorContainerBloc
|
|
|
|
extends EvSourceBlocBase<LightSensorContainerEvent, LightSensorContainerState> {
|
|
|
|
final MeteringInteractor _meteringInteractor;
|
|
|
|
|
|
|
|
StreamSubscription<int>? _luxSubscriptions;
|
2023-02-19 10:26:14 +00:00
|
|
|
double _ev100 = 0.0;
|
2023-01-29 16:57:47 +00:00
|
|
|
|
|
|
|
LightSensorContainerBloc(
|
|
|
|
this._meteringInteractor,
|
|
|
|
MeteringCommunicationBloc communicationBloc,
|
|
|
|
) : super(
|
|
|
|
communicationBloc,
|
|
|
|
const LightSensorInitState(),
|
|
|
|
);
|
|
|
|
|
|
|
|
@override
|
|
|
|
void onCommunicationState(communication_states.SourceState communicationState) {
|
|
|
|
if (communicationState is communication_states.MeasureState) {
|
|
|
|
if (_luxSubscriptions == null) {
|
|
|
|
_luxSubscriptions = _meteringInteractor.luxStream().listen((event) {
|
2023-02-19 10:26:14 +00:00
|
|
|
_ev100 = log2(event.toDouble() / 2.5) + _meteringInteractor.lightSensorEvCalibration;
|
|
|
|
communicationBloc.add(communication_event.MeteringInProgressEvent(_ev100));
|
2023-01-29 16:57:47 +00:00
|
|
|
});
|
|
|
|
} else {
|
2023-02-19 10:26:14 +00:00
|
|
|
communicationBloc.add(communication_event.MeteringEndedEvent(_ev100));
|
2023-01-29 16:57:47 +00:00
|
|
|
_luxSubscriptions?.cancel().then((_) => _luxSubscriptions = null);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Future<void> close() async {
|
2023-02-19 10:26:14 +00:00
|
|
|
communicationBloc.add(communication_event.MeteringEndedEvent(_ev100));
|
2023-01-29 16:57:47 +00:00
|
|
|
_luxSubscriptions?.cancel().then((_) => _luxSubscriptions = null);
|
|
|
|
return super.close();
|
|
|
|
}
|
|
|
|
}
|