A composable API for making HTTP requests in Dart.

Overview

A composable, Future-based library for making HTTP requests.

pub package Build Status

This package contains a set of high-level functions and classes that make it easy to consume HTTP resources. It's multi-platform, and supports mobile, desktop, and the browser.

Using

The easiest way to use this library is via the top-level functions. They allow you to make individual HTTP requests with minimal hassle:

import 'package:http/http.dart' as http;

var url = Uri.parse('https://example.com/whatsit/create');
var response = await http.post(url, body: {'name': 'doodle', 'color': 'blue'});
print('Response status: ${response.statusCode}');
print('Response body: ${response.body}');

print(await http.read(Uri.parse('https://example.com/foobar.txt')));

If you're making multiple requests to the same server, you can keep open a persistent connection by using a Client rather than making one-off requests. If you do this, make sure to close the client when you're done:

var client = http.Client();
try {
  var response = await client.post(
      Uri.https('example.com', 'whatsit/create'),
      body: {'name': 'doodle', 'color': 'blue'});
  var decodedResponse = jsonDecode(utf8.decode(response.bodyBytes)) as Map;
  var uri = Uri.parse(decodedResponse['uri'] as String);
  print(await client.get(uri));
} finally {
  client.close();
}

You can also exert more fine-grained control over your requests and responses by creating Request or StreamedRequest objects yourself and passing them to Client.send.

This package is designed to be composable. This makes it easy for external libraries to work with one another to add behavior to it. Libraries wishing to add behavior should create a subclass of BaseClient that wraps another Client and adds the desired behavior:

class UserAgentClient extends http.BaseClient {
  final String userAgent;
  final http.Client _inner;

  UserAgentClient(this.userAgent, this._inner);

  Future<http.StreamedResponse> send(http.BaseRequest request) {
    request.headers['user-agent'] = userAgent;
    return _inner.send(request);
  }
}

Retrying requests

package:http/retry.dart provides a class RetryClient to wrap an underlying http.Client which transparently retries failing requests.

import 'package:http/http.dart' as http;
import 'package:http/retry.dart';

Future<void> main() async {
  final client = RetryClient(http.Client());
  try {
    print(await client.read(Uri.parse('http://example.org')));
  } finally {
    client.close();
  }
}

By default, this retries any request whose response has status code 503 Temporary Failure up to three retries. It waits 500ms before the first retry, and increases the delay by 1.5x each time. All of this can be customized using the RetryClient() constructor.

Comments
  • BrowserClient - withCredentials 'true' by default.

    BrowserClient - withCredentials 'true' by default.

    'withCredentials = true' is needed for browser cookies in Flutter Web XmlHttpRequests. Because current pattern requires a parameterless constructor, only way to change the setting is to set it by default. There is no harm in having it always set to true - credentials are ignored if not present.

    cla: yes 
    opened by nwtnwrkshp 40
  • Invalid header field name, with 128

    Invalid header field name, with 128

    Hi guys, I got a problem with the header.

    Invalid header field name, with 128

    I'm using an iOS simulator. And if I not mistaken iOS simulator works well with localhost, in general, I have an information emulator that cannot access the localhost. That's why I have a decision it is maybe a bug.

    When I use another header such as

    headers: {
       HttpHeaders.contentTypeHeader: 'application/json'
    },
    

    After that, I got different errors like that.

    flutter: Bad state: Cannot set the body fields of a Request with content-type "application/json".

    One important thing FYI, when I use the JSON MOCK SERVER, it works very well, after switching DOCKER environment I got the error. I would like to add other details. I also test my real back-end code which is works on the docker environment, I test on the browser with fetch API, and also angular application works well. I think that there is not related to my back-end or such kind of CORS issues.

      Future<void> login(String email, String password) async {
       final String url = '$baseUrl/login';
    
       try {
         final http.Response response = await http.post(
           url,
           headers: <String, String>{
             HttpHeaders.contentTypeHeader: 'application/json; charset=UTF-8',
           },
           body: jsonEncode(<String, String>{
             'email': email,
             'password': password,
             'device_name': 'apple',
           }),
         );
    
         final Login user = Login.fromJson(json.decode(response.body));
    
         _token = user.data.token;
         _email = email;
    
         final SharedPreferences sharedPreferences =
             await SharedPreferences.getInstance();
         final userData = json.encode({
           'token': _token,
           'email': _email,
         });
         sharedPreferences.setString('userData', userData);
    
         notifyListeners();
       } on HttpException {
         print('login service error.');
       } on SocketException {
         print('No internet connection or server shutdown.');
       } on FormatException {
         print('Bad response format.');
       } catch (exception) {
         throw exception;
       }
     }
    
    opened by valehasadli 34
  • No address associated with hostname

    No address associated with hostname

    Getting this error while calling api.

    Sometimes I receive response occasionally. I tested the api using postman it is working perfectly fine. Version: http: ^0.11.3+16 [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception: E/flutter (24807): SocketException: Failed host lookup: 'api.xyz.com' (OS Error: No address associated with hostname, errno = 7) E/flutter (24807): #0 IOClient.send (package:http/src/io_client.dart:30:23) E/flutter (24807): <asynchronous suspension> E/flutter (24807): #1 BaseClient._sendUnstreamed (package:http/src/base_client.dart:171:38) E/flutter (24807): <asynchronous suspension> E/flutter (24807): #2 BaseClient.post (package:http/src/base_client.dart:56:5) E/flutter (24807): #3 post.<anonymous closure> (package:http/http.dart:70:34) E/flutter (24807): #4 _withClient (package:http/http.dart:167:20) E/flutter (24807): <asynchronous suspension> E/flutter (24807): #5 post (package:http/http.dart:70:3) E/flutter (24807): #6 NetworkUtil.post (package:ddictor/utils/network_util.dart:29:10) E/flutter (24807): #7 loginUser (package:ddictor/utils/api.dart:23:16)

    post method inside network_util file

    ` Future post(String url, {Map headers, body, encoding}) { return http .post(url, body: body, headers, encoding: encoding) .then((http.Response response) { final String res = response.body; final int statusCode = response.statusCode;

      if (statusCode < 200 || statusCode > 400 || json == null) {
        throw new Exception("Error while fetching data");
      }
      return _decoder.convert(res);
    });
    

    }

    opened by techyrajeev 33
  • Remove dart:mirror usage from package:http

    Remove dart:mirror usage from package:http

    A change to the dart2js compiler introduced a warning on mirror usage in dart code -- see Emit warning on import of dart:mirrors.. According to the warning, users will be forced to pass an additional flag to the dart2js compiler when their code is using dart:mirrors. This affects all users of package:http.

    When compiling the following example

    import 'package:http/http.dart';
    main()=> print("hello");
    

    dart2js will print out the following warning:

    Warning: 
    ****************************************************************
    * WARNING: dart:mirrors support in dart2js is experimental,
    *          and not recommended.
    *          This implementation of mirrors is incomplete,
    *          and often greatly increases the size of the generated
    *          JavaScript code.
    *
    * Your app imports dart:mirrors via:
    *   x.dart => package:http => dart:mirrors
    *
    * Starting with Dart 1.9, you must use the
    * --enable-experimental-mirrors command-line flag to opt-in.
    * You can begin using this flag now if mirrors support is critical.
    *
    * To learn what to do next, please visit:
    *    http://dartlang.org/dart2js-reflection
    ****************************************************************
    

    That flag does not seem to be enforced as of SDK version 1.9.0-dev.1.0+google3-trunk, but that seems to be only a matter of time.

    blocked 
    opened by mkustermann 21
  • type '(HttpException) => Null' is not a subtype of type '(dynamic) => dynamic'

    type '(HttpException) => Null' is not a subtype of type '(dynamic) => dynamic'

    We occasionally see an error with the message "type '(HttpException) => Null' is not a subtype of type '(dynamic) => dynamic'" with the top of the stack

    #1      _HandleErrorStream._handleError (dart:async/stream_pipe.dart:288)
    #2      _ForwardingStreamSubscription._handleError (dart:async/stream_pipe.dart:170)
    #3      _rootRunBinary (dart:async/zone.dart:1146)
    #4      _CustomZone.runBinary (dart:async/zone.dart:1039)
    #5      _CustomZone.runBinaryGuarded (dart:async/zone.dart:941)
    #6      _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:357)
    

    I think it's caused by https://github.com/dart-lang/http/blob/master/lib/src/io_client.dart#L49, which passes an error handler of wrong type.

    The fact that the function handler is wrong can be seen by running

        final stream = controller.stream.handleError(
            (HttpException error) =>
                throw ClientException(error.message, error.uri),
            test: (error) => error is HttpException);
        try {
          await stream.single;
          fail('Did not throw.');
        } on ClientException catch (e, stack) {}
    

    Changing it to

                  (error) =>
                      throw ClientException(error.message as String, error.uri as Uri),
                  test: (error) => error is HttpException)
    

    resolves the issue.

    Possibly related: https://github.com/flutter/flutter/issues/50042.

    opened by kristoffer-zliide 18
  • Cannot catch internal exceptions (e.g. SocketExceptions)

    Cannot catch internal exceptions (e.g. SocketExceptions)

    Please consider the following snippet:

    Future<http.Response> foo(url, headers) {
      try {
        return http.get(url, headers: headers);
      } catch (e) {
        print(e);
        return null;
      }
    }
    

    I have assumed that all internal exceptions will be handled internally and then will be rethrown to the calling layer (or at least will be thrown in a wrapping/abstracting exception). Unfortunately, the catch block above isn't being called in case of such error (e.g. SocketException), instead, an Unhandled exception flow occurs:

    E/flutter ( 6324): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
    E/flutter ( 6324): SocketException: OS Error: Connection refused, errno = 111, address = 10.0.2.2, port = 49907
    E/flutter ( 6324): #0      IOClient.send (package:http/src/io_client.dart:30:23)
    E/flutter ( 6324): <asynchronous suspension>
    E/flutter ( 6324): #1      BaseClient._sendUnstreamed (package:http/src/base_client.dart:171:38)
    E/flutter ( 6324): <asynchronous suspension>
    E/flutter ( 6324): #2      BaseClient.get (package:http/src/base_client.dart:34:5)
    E/flutter ( 6324): #3      get.<anonymous closure> (package:http/http.dart:47:34)
    E/flutter ( 6324): #4      _withClient (package:http/http.dart:167:20)
    E/flutter ( 6324): <asynchronous suspension>
    E/flutter ( 6324): #5      get (package:http/http.dart:47:3)
    ...
    ...
    ...
    Application finished.
    
    Dart VM version: 2.0.0-dev.48.0.flutter-fe606f890b (Mon Apr 16 21:21:13 2018 +0000) on "macos_x64"
    http: "^0.11.3+16"
    

    How can I gracefully catch such exceptions?

    question closed-as-intended 
    opened by avimak 18
  • Adding back missing Request and Response fields

    Adding back missing Request and Response fields

    There were a few fields that were not present in previous pull requests.

    Also wondering if persistentConnection, followRedirects, and maxRedirects should be modifiable within the change method of Request.

    cla: yes 
    opened by donny-dont 18
  • Support both the console and browser equally

    Support both the console and browser equally

    opened by DartBot 18
  • Outdated and Incorrect documentation for MultiPartRequest

    Outdated and Incorrect documentation for MultiPartRequest

    I'm referring to the documentation here- https://docs.flutter.io/flutter/package-http_http/MultipartRequest-class.html

    1. Error in code snipped, 'uri' being used instead of 'url'
    2. Biggest issue - http.MultipartFile.fromFile doesn't exist! See for yourself https://github.com/dart-lang/http/blob/master/lib/src/multipart_file.dart .

    I've spent hours trying to upload a file using a multipart request but eventually had to switch the dio package (https://github.com/flutterchina/dio) which got it done in seconds.

    type-bug 
    opened by bholagabbar 16
  • 302 does not redirect

    302 does not redirect

    Sending a request to an https service with an http url - the service responds with a 302 but the client does not follow the redirect. The _followRedirects boolean on the request is definitely set to true.

    closed-as-intended 
    opened by billy1380 15
  • http.get hang no response

    http.get hang no response

    enviroment

    • windows 10
    • dart 2.2.1
    • http 0.12.0+2

    code

    import 'package:http/http.dart' as http;
    
    void test() async {
      final url = 'http://webpac.ksml.edu.tw/maintain/bookDetailAssdataAjax.do?id=1283659&viewDetailType=Details';
      final ret = await http.get(url);// hang here
      print(ret.statusCode);
    }
    main() {
      test();
    }
    

    curl 7.51.0

    curl -v "http://webpac.ksml.edu.tw/maintain/bookDetailAssdataAjax.do?id=1283659&viewDetailType=Details"

    output

    
    D:\test>curl -v "http://webpac.ksml.edu.tw/maintain/bookDetailAssdataAjax.do?id=1283659&viewDetailType=Details"
    * STATE: INIT => CONNECT handle 0x6000638c0; line 1407 (connection #-5000)
    * Added connection 0. The cache now contains 1 members
    *   Trying 163.32.124.11...
    * TCP_NODELAY set
    * STATE: CONNECT => WAITCONNECT handle 0x6000638c0; line 1460 (connection #0)
    * Connected to webpac.ksml.edu.tw (163.32.124.11) port 80 (#0)
    * STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x6000638c0; line 1567 (connection #0)
    * Marked for [keep alive]: HTTP default
    * STATE: SENDPROTOCONNECT => DO handle 0x6000638c0; line 1585 (connection #0)
    > GET /maintain/bookDetailAssdataAjax.do?id=1283659&viewDetailType=Details HTTP/1.1
    > Host: webpac.ksml.edu.tw
    > User-Agent: curl/7.51.0
    > Accept: */*
    >
    * STATE: DO => DO_DONE handle 0x6000638c0; line 1664 (connection #0)
    * STATE: DO_DONE => WAITPERFORM handle 0x6000638c0; line 1791 (connection #0)
    * STATE: WAITPERFORM => PERFORM handle 0x6000638c0; line 1801 (connection #0)
    * HTTP 1.1 or later with persistent connection, pipelining supported
    < HTTP/1.1 200 OK
    < Cache-Control: no-store
    < Pragma: no-cache
    < Expires: Thu, 01 Jan 1970 00:00:00 GMT
    < X-Frame-Options: SAMEORIGIN
    < X-Content-Type-Options: nonsniff
    < X-XSS-Protection: 1;mode=block
    < Set-Cookie: webpacid=F9C8385C8FF05CF9A0B3A974EFF7C599; Domain=webpac.ksml.edu.tw; Path=/; HttpOnly
    < Content-Type: text/html;charset=UTF-8
    < Transfer-Encoding: chunked
    < Date: Sun, 21 Apr 2019 14:26:36 GMT
    < Set-Cookie: webpacslb-163.32.124.11_80=ALAAAAAK; Expires=Mon, 22-Apr-2019 14:37:48 GMT; Path=/
    < Set-Cookie: citrix_ns_id=IKO/jMmv32uc4DegdIH41YcfvEAA000; Domain=.ksml.edu.tw; Path=/; HttpOnly
    <
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <table>
            <tr>
                    <td style="word-break: keep-all; white-space: nowrap;">作者:</td>
    
                    <td>瘋人院院長著</td>
    
            </tr>
    </table>
    
    <table>
            <tr>
                    <td style="word-break: keep-all; white-space: nowrap;">出版社:</td>
    
                    <td>旗標</td>
    
            </tr>
    </table>
    
    <table>
            <tr>
                    <td style="word-break: keep-all; white-space: nowrap;">出版地:</td>
    
                    <td>臺北市</td>
    
            </tr>
    </table>
    
    <table>
            <tr>
                    <td style="word-break: keep-all; white-space: nowrap;">出版年:</td>
    
                    <td>2011[民100]</td>
    
            </tr>
    </table>
    
    <table>
            <tr>
                    <td style="word-break: keep-all; white-space: nowrap;">規格:</td>
    
                    <td>1冊:彩圖;21公分</td>
    
            </tr>
    </table>
    
    <table>
            <tr>
                    <td style="word-break: keep-all; white-space: nowrap;">語文:</td>
    
                    <td>中文</td>
    
            </tr>
    </table>
    
    <table>
            <tr>
                    <td style="word-break: keep-all; white-space: nowrap;">ISBN:</td>
    
                    <td>9789574429226</td>
    
            </tr>
    </table>
    
    <table>
            <tr>
                    <td style="word-break: keep-all; white-space: nowrap;">主題:</td>
    
                    <td>行動電話 ; 電腦軟體</td>
    
            </tr>
    </table>
    
    <table>
            <tr>
                    <td style="word-break: keep-all; white-space: nowrap;">作者:</td>
    
                    <td>瘋人院院長</td>
    
            </tr>
    </table>
    
    
    
    * STATE: PERFORM => DONE handle 0x6000638c0; line 1965 (connection #0)
    * multi_done
    * Curl_http_done: called premature == 0
    * Connection #0 to host webpac.ksml.edu.tw left intact
    

    problem description

    i try to trace code http-0.12.0+2/lib/src/response.dart

      static Future<Response> fromStream(StreamedResponse response) {       
        // cache-control: no-store
        // set-cookie: webpacid=EADC10D4246FDFCED8996D430BC7496B; Domain=webpac.ksml.edu.tw; Path=/; HttpOnly,webpacslb-163.32.124.11_80=ALAAAAAK; Expires=Mon, 22-Apr-2019 14:50:13 GMT; Path=/,citrix_ns_id=ldqMyiKuDY14cyx05VY/8j8YwpMA020; Domain=.ksml.edu.tw; Path=/; HttpOnly
        // transfer-encoding: chunked
        // date: Sun, 21 Apr 2019 14:39:01 GMT
        // content-encoding: gzip
        // content-type: text/html;charset=UTF-8
        // pragma: no-cache
        // x-frame-options: SAMEORIGIN
        // x-xss-protection: 1;mode=block
        // x-content-type-options: nonsniff
        // expires: Thu, 01 Jan 1970 00:00:00 GMT
        response.headers.forEach((k,v){
          print('$k: $v');
        }); 
    
        // here is Ok
        return response.stream.toBytes().then((body) {
          // cannot run here. how to resolve?
          return new Response.bytes(body, response.statusCode,
              request: response.request,
              headers: response.headers,
              isRedirect: response.isRedirect,
              persistentConnection: response.persistentConnection,
              reasonPhrase: response.reasonPhrase);
        });
      }
    

    response.stream.toBytes() cannot pass to next step. How to fix it?

    type-bug 
    opened by cwchiu 14
  • 🚀 Use `org.chromium.net:cronet-embedded` instead of `com.google.android.gms:play-services-cronet`

    🚀 Use `org.chromium.net:cronet-embedded` instead of `com.google.android.gms:play-services-cronet`

    Resolves #807.

    We can discuss the intention to use or not to use GMS-based dependencies further.

    Cronet represent org.chromium.net instead of as part of Google Play Services. So it should be using the org.chromium.net, the implementation code in the package remains valid after the change.

    opened by AlexV525 1
  • Content-Type gets set for a GET request with an empty body

    Content-Type gets set for a GET request with an empty body

    The Request class sets the content type explicitly regardless of the http method and the body length. https://github.com/dart-lang/http/blob/88f6fc6edc8b941b4a0acc1bd6de51625b54bcc3/pkgs/http/lib/src/request.dart#L91

    I believe that setting an empty body for a GET request should leave the content type empty, but it does not.

    import 'package:http/http.dart';
    
    void main() {
      final url = Uri.parse('http://localhost:8080/colors');
      final request = Request('GET', url);
      request.body = '';
      print(request.headers); // {content-type: text/plain; charset=utf-8} <-- should be empty
    }
    
    opened by f3ath 0
  • HTTPS connections NOT using URLSession in the iOS (Apple - Complying with Encryption Export Regulations)

    HTTPS connections NOT using URLSession in the iOS (Apple - Complying with Encryption Export Regulations)

    Hi, I've been wondering around the use of this plugin and Apple's Encryption Export Regulations.

    According to Apple's site:

    Typically, the use of encryption that’s built into the operating system—for example, when your app makes HTTPS connections using URLSession—is exempt from export documentation upload requirements, whereas the use of proprietary encryption is not.

    I know that this plugin does not use URLSession, but do that means that, if we use it, we are using a propietary encryption and need to set the "App Uses Non-Exempt Encryption" to YES ?

    I think the answer is not, because HTTP is not using a propietary encryption, but not sure if should be considered exempt.

    Can anyone colaborare that for sure ?

    Thanks.

    opened by MopheusDG 0
  • In Android 12+, the REST API calls are very slow in WiFi network

    In Android 12+, the REST API calls are very slow in WiFi network

    I have an issue with the Flutter HTTP plugin in the Android 12+ version. App-consuming REST API calls using the Flutter HTTP plugin (Version: 0.13.5). All API calls are HTTPS service calls with the domain name. API calls take 10+ seconds to provide the response whereas the same API calls took only less than a second in mobile data networks. The same API calls I tried using Java Client and Postman, all responses took only less than a second to get a response.

    During the troubleshooting, I tested the following scenarios using Wifi Network

    1. Instead of the domain, I executed the API service call using the IP address, which took only less than a second (SSL verification disabled in the HTTP plugin)
    2. Tested API call using connection keep-alive: true, then the first call took 10+s after that subsequent calls took only less than a second
    3. One interesting fact is that I experienced a problem only in Android 12+, the Android 11 device worked on a WiFi network, and it took less than a second for a service call. Now I understood Wifi based API calls always take 10 Seconds + actual service call time (eg 400 ms hence it would be like 10.400 seconds).

    Is there any specific reason for this issue?

    Note: I came to understand that issue is related to DNS resolving, ie During the initial call it tries to connect using IPv6 then it tries to connect using IPv4. If so, is there any option in the HTTP plugin to force the IPv4 version instead of the IPv6

    type-bug package:http 
    opened by SijuKJ 0
Releases(0.11.3+17)
  • 0.11.3+17(Jul 6, 2018)

Owner
Dart
Dart is an open-source, scalable programming language, with robust libraries and runtimes, for building web, server, and mobile apps.
Dart
An easy-to-use flutter http network requests handler with more functionality than http but more simpler than dio.

network_requests An easy-to-use flutter http network requests handler with more functionality than http but more simpler than dio. Platform Supported

Coder_Manuel 3 Dec 15, 2022
This example handles HTTP GET requests by responding with 'Hello, World!'

Hello world example This example handles HTTP GET requests by responding with 'Hello, World!'. // lib/functions.dart import 'package:functions_framewo

TryIt (김동현) 0 May 25, 2022
A ready-made structure that holds HTTP requests.

A ready-made structure that holds HTTP requests. Usage import 'package:flutter/material.dart'; import 'package:uigitdev_request_holder/src/http_reques

Uigitdev 2 Oct 21, 2022
A composable, light-weight package that can be used as a placeholder whenever you need some fake data

API Placeholder A composable, light-weight package that can be used as a placeholder whenever you need some fake data. With this package, you can get

ASMIT VIMAL 2 Feb 27, 2022
Charlatan - A library for configuring and providing fake http responses to your dio HTTP client.

charlatan This package provides the ability to configure and return fake HTTP responses from your Dio HTTP Client. This makes it easy to test the beha

Betterment 14 Nov 28, 2022
A google browser clone which is made by using flutter and fetching the google search api for the search requests.

google_clone A new Flutter project. Project Preview Getting Started This project is a starting point for a Flutter application. A few resources to get

Priyam Soni 2 May 31, 2022
🌈 Repository for a compass project, basically an App for displaying bank transfers, with API requests, Flag persistence, Infinite Scroll, Error Handling, Unit Tests, Extract Sharing working with SOLID, BLoC and Designer Patterns.

?? Green Bank Aplicação desenvolvida em Flutter com intuito de trabalhar conexão com API, Gerenciamento de estado usando BLoC, Refatoração, Arquitetur

André Guerra Santos 28 Oct 7, 2022
Listen to remote Flutter GTK application instances' command-line arguments and file open requests.

gtk_application This package allows the primary Flutter GTK application instance to listen to remote application instances' command-line arguments and

null 12 Dec 15, 2022
Powerful, helpfull, extensible and highly customizable API's that wrap http client to make communication easier with Axelor server with boilerplate code free.

flutter_axelor_sdk Powerful, helpful, extensible and highly customizable API's that wrap http client to make communication easier with Axelor server w

Abd al-Rahman al-Ktefane 5 Dec 25, 2022
Flutter Github Following Application, Using Flutter Provider and Flutter HTTP to get data from Github API.

Flutter Github Following Application Watch it on Youtube Previous Designs Checkout my Youtube channel Installation Please remember, after cloning this

Mohammad Rahmani 110 Dec 23, 2022
Flutter Rest API using Http and Provider State.

Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this is your first Flutter project:

Joshua Jeremia 2 Aug 31, 2022
AdventOfCode 2022 in Dart focusing on code golf, making the solutions as small as possible

Advent of Code 2022 in Dart (Code Golf) This is my attempt at solving the Advent of Code 2022 puzzles in the shortest possible code using Dart 2.18. Y

Pascal Welsch 5 Dec 15, 2022
A powerful Http client for Dart, which supports Interceptors, FormData, Request Cancellation, File Downloading, Timeout etc.

dio_http A powerful Http client for Dart, which supports Interceptors, Global configuration, FormData, Request Cancellation, File downloading, Timeout

null 46 Dec 19, 2021
A powerful Http client for Dart, which supports Interceptors, FormData, Request Cancellation, File Downloading, Timeout etc.

Language: English | 中文简体 dio A powerful Http client for Dart, which supports Interceptors, Global configuration, FormData, Request Cancellation, File

Flutter中国开源项目 11.2k Jan 3, 2023
A Dart package to handle HTTP services

http_services A package to support the creation of Http services in a Dart application. Features convenient methods to perform HTTP requests disposing

Antonello Galipò 5 Jul 27, 2021
A simple HTTP server that can serve up any directory, built with Dart

A simple HTTP server that can serve up any directory, built with Dart. Inspired by python -m SimpleHTTPServer. Install Use the dart pub global command

Behruz Hurramov 0 Dec 27, 2021
A middleware library for Dart's http library.

http_middleware A middleware library for Dart http library. Getting Started http_middleware is a module that lets you build middleware for Dart's http

TED Consulting 38 Oct 23, 2021
A lightweight and customizable http client that allows you to create offline-first dart app easily.

Enjoyable & customizable offline-first REST API client Unruffled is lightweight and customizable http client that allows you to create offline-first e

T. Milian 3 May 20, 2022
Making Appwrite Authentication Easy

FlAppwrite Account Kit A Flutter wrapper for Appwrite's Accounts service, makes it easy to use manage authentication and account features. Under devel

Damodar Lohani 26 Jan 8, 2023