GemCameraPlayerController constructor

GemCameraPlayerController({
  1. required DataSource dataSource,
  2. CameraConfiguration? configurationOverride,
})

Creates a controller based on a DataSource which contains Camera data.

Implementation

GemCameraPlayerController({
  required DataSource dataSource,
  this.configurationOverride,
}) : super(
        GemCameraPlayerValue(
          dataSource: dataSource,
          status: GemCameraPlayerStatus.loading,
        ),
      ) {
  if (!dataSource.isDataTypeAvailable(DataType.camera)) {
    value = value.copyWith(status: GemCameraPlayerStatus.error);
  }

  final DataSourceListener listener = DataSourceListener(
    onNewData: (SenseData data) {
      if (_isDisposed) {
        return;
      }

      if (data is! CameraImpl) {
        return;
      }

      final GemCameraPlayerStatus status = value.status;
      if (status == GemCameraPlayerStatus.loading ||
          status == GemCameraPlayerStatus.playing ||
          status == GemCameraPlayerStatus.ended) {
        value = value.copyWith(
          camera: data,
          status: GemCameraPlayerStatus.playing,
        );
      }
    },
    onPlayingStatusChanged: (DataType dataType, PlayingStatus status) {
      if (_isDisposed) {
        return;
      }

      if (dataType == DataType.camera && status == PlayingStatus.stopped) {
        value = value.copyWith(status: GemCameraPlayerStatus.ended);
      }
    },
  );
  final Playback? playback = dataSource.playback;
  if (playback != null && playback.state == PlayingStatus.stopped) {
    value = value.copyWith(status: GemCameraPlayerStatus.ended);
  }

  dataSource.addListener(
    listener: listener,
    dataType: DataType.camera,
  );

  value = value.copyWith(listener: listener);
}