start<R> method

Future<R> start<R>()

Start the isolate and return the value returned by callback.

Implementation

Future<R> start<R>() async {
  // Run and get result
  resume();
  final _result = await _completer.future;

  if (_result == null) {
    throw RemoteError('IsolateFlutter exited with null.', '');
  }

  if (_result is List<dynamic>) {
    final _type = _result.length;
    switch (_type) {
      case 1:
        return _result[0] as R;
      case 2:
        await Future<Never>.error(
            RemoteError(_result[0] as String, _result[1] as String));
      case 3:
        await Future<Never>.error(
            _result[0] as Object, _result[1] as StackTrace);
      default:
        throw RemoteError(
            'IsolateFlutter exited without result or error.', '');
    }
  } else {
    throw RemoteError('IsolateFlutter exited without result or error.', '');
  }
}