Skip to content

HttpClientRequest.abort() fails silently on web #40

@d-level

Description

@d-level

Hi,
I'm trying to abort ongoing HTTP requests when a new route is pushed on top of the navigator route stack. However, on the web platform the abort() method on HttpClientRequest doesn't seem to cancel the request and doesn't throw.

I could reproduce the issue with the following sample:

import "dart:async";

import "package:flutter/material.dart";
import "package:universal_io/io.dart";

// Set the API URL here
const String baseUrl = "...";
const String endpoint = "...";

void main() {
  testNative();

  runApp(Container(color: Colors.black));
}

void testNative() async {
  final HttpClient client = newUniversalHttpClient();
  final Uri url = Uri.https(baseUrl, endpoint);
  final HttpClientRequest request = await client.postUrl(url);

  Timer(const Duration(milliseconds: 50), () {
    request.abort();

    debugPrint("abort");
  });

  request
      .close()
      .then(
        (_) => debugPrint("then()"),
        onError: (_) => debugPrint("onError()"),
      )
      .catchError(
        (_) => debugPrint("catchError()"),
      );
}

abort() is called before the request done future was completed, but it doesn't complete with an error.

Output of flutter doctor -v:

[✓] Flutter (Channel stable, 3.10.4, on Ubuntu 22.04.2 LTS 5.19.0-43-generic, locale en_US.UTF-8)
    • Flutter version 3.10.4 on channel stable at /home/keole/snap/flutter/common/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 682aa387cf (10 days ago), 2023-06-05 18:04:56 -0500
    • Engine revision 2a3401c9bb
    • Dart version 3.0.3
    • DevTools version 2.23.1

[✗] Android toolchain - develop for Android devices
    ✗ Unable to locate Android SDK.
      Install Android Studio from: https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK components.
      (or visit https://flutter.dev/docs/get-started/install/linux#android-setup for detailed instructions).
      If the Android SDK has been installed to a custom location, please use
      `flutter config --android-sdk` to update to that location.


[✓] Chrome - develop for the web
    • Chrome at google-chrome

[✓] Linux toolchain - develop for Linux desktop
    • clang version 10.0.0-4ubuntu1
    • cmake version 3.16.3
    • ninja version 1.10.0
    • pkg-config version 0.29.1

[!] Android Studio (not installed)
    • Android Studio not found; download from https://developer.android.com/studio/index.html
      (or visit https://flutter.dev/docs/get-started/install/linux#android-setup for detailed instructions).

[✓] VS Code (version 1.79.1)
    • VS Code at /usr/share/code
    • Flutter extension version 3.66.0

[✓] VS Code
    • VS Code at /snap/code/current
    • Flutter extension version 3.66.0

[✓] Connected device (2 available)
    • Linux (desktop) • linux  • linux-x64      • Ubuntu 22.04.2 LTS 5.19.0-43-generic
    • Chrome (web)    • chrome • web-javascript • Google Chrome 114.0.5735.133

[✓] Network resources
    • All expected network resources are available.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions