title: Dart streams error with .listen().onError().onDone()
body: <p>I have an issue with some code that looks like this. In this form I have an error </p>
  
  <p><code>The expression here has a type of 'void', and therefore can't be used.
  Try checking to see if you're using the correct API; there might be a function or call that returns void you didn't expect. Also check type parameters and variables which might also be void.dart(use_of_void_result)</code>. </p>
  
  <p>If I remove the .onDone() the error goes away. Why? ELI5 please :-)
  I was looking at <a href="https://api.dart.dev/stable/2.7.0/dart-async/Stream/listen.html" rel="nofollow noreferrer">https://api.dart.dev/stable/2.7.0/dart-async/Stream/listen.html</a> but seem to still be misundertanding something.
  I also read <a href="https://api.dart.dev/stable/2.7.0/dart-async/StreamSubscription/onDone.html" rel="nofollow noreferrer">https://api.dart.dev/stable/2.7.0/dart-async/StreamSubscription/onDone.html</a></p>
  
  <pre><code>serviceName.UploadThing(uploadRequest).listen((response) {
    uploadMessageOutput = response.message;
    if (response.uploadResult) {
      showSuccess();
    } else {
      showError();
    }
    getUploadFileList(event);
  
    isSaveInProgress = false;
  }).onError((error) {
    isSaveInProgress = false;
    _handleFileUploadError(uploadRequest, error);
  }).onDone(() {
    isSaveInProgress = false;
  });
  </code></pre>