onStart method

  1. @override
Future<bool> onStart()
override

Callback when this executor is started. Returns true if successfully started, false otherwise.

Implementation

@override
Future<bool> onStart() async {
  // Early out if no probes.
  if (probes.isEmpty) return true;

  // Early out if already running (this is a background task)
  if (state == ExecutorState.started) {
    warning(
        'Trying to start a $runtimeType but it is already started. Ignoring this.');
    return false;
  }

  // Listen to stop this background executor when all of its underlying
  // probes have stopped - Issue #384
  _subscription =
      states.where((event) => event == ExecutorState.stopped).listen((_) {
    if (haveAllProbesStopped) {
      debug(
          '$runtimeType - all probes have stopped - stopping this $runtimeType too.');
      stop();
    }
  });

  // Check if the device for this task is connected.
  if (probes.first.deviceManager.isConnected) {
    if (configuration?.duration != null) {
      // If the task has a duration (optional), stop it again after this duration has passed.
      Timer(Duration(seconds: configuration!.duration!.inSeconds.truncate()),
          () => stop());
    }

    // Now - finally - we can start the probes.
    return await super.onStart();
  } else {
    warning(
        'A $runtimeType could not be started since the device for this task is not connected. '
        'Device type: ${probes.first.deviceManager.typeName}');
    return false;
  }
}