network_request 0.3.0 copy "network_request: ^0.3.0" to clipboard
network_request: ^0.3.0 copied to clipboard

A powerful and comprehensive Dart package for simplifying HTTP requests and interacting with RESTful APIs

example/main.dart

import 'dart:async';

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

import 'json_placeholder/json_placeholder_network_manager.dart';
import 'package:network_request/network_request.dart';
import 'json_placeholder/model/post.dart';
import 'json_placeholder/requests/comment.dart';
import 'json_placeholder/requests/post.dart';
import 'json_placeholder/requests/todo.dart';
import 'mock_api/mock_api_manager.dart';
import 'mock_api/models/mock_user.dart';
import 'mock_api/request/mock_auth.dart';
import 'mock_api/request/mock_user.dart';

void main() {
  exampleJp();
  // exampleAbort();
  // exampleStreamAbort();
}

// MockAPIManger

void exampleMockAPIFormData() async {
  var network = MockAPIManger();
  await network.uploadPicture(1);
  await network.downloadPicture();
}

void exampleMockAPIUrlFormEncoded() {
  var network = MockAPIManger();
  network.addUserFromUrlEncoded(
    MockAPIUser(
      id: 1001,
      name: 'Mock',
      profilePic: null,
    ),
  );
}

void exampleMockAPI() {
  var network = MockAPIManger();
  network.fetchUser(1);
  network.addUser(MockAPIUser(id: 1001, name: 'Mock', profilePic: null));
  network.getError(1);
}

void exampleMockRefrshFlow() async {
  var network = MockAPIManger();
  // This will trigger tryToReauthenticate
  await network.unAuthUser();
}

// JsonPlaceholderManager
void exampleJp() async {
  var network = JsonPlaceholderManager();
  try {
    await network.getAllPostWithDecodeError();
  } catch (_) {}
  network.getTodo(1);
  network.getCommentOfPost(1);
}

void presistExampleJp() async {
  final network = JsonPlaceholderManager();
  final presistClient = RetryClient(http.Client());

  final futures = <Future>[];
  futures.addAll([
    network.addPost(
      Post(
        id: -1,
        userId: 1,
        title: 'Example',
        body: 'Example body',
      ),
      client: presistClient,
    ),
    network.deletePost(1, client: presistClient)
  ]);
  await Future.wait(futures);
  presistClient.close();
}

// Demonstrates aborting an in-flight request using `abortTrigger`.
void exampleAbort() async {
  final network = JsonPlaceholderManager();
  final abort = Completer<void>();

  // Abort shortly after starting.
  Future<void>.delayed(const Duration(milliseconds: 100))
      .then((_) => abort.complete());

  try {
    // Using a simple GET list to demonstrate abort
    await network.call(
      Request<void>(
        method: Method.GET,
        path: '/posts',
        decode: (_) {},
        abortTrigger: abort.future,
      ),
    );
  } on http.RequestAbortedException {
    print('Request was aborted successfully.');
  }
}

// Demonstrates aborting while streaming a large response using downloadProgress
void exampleStreamAbort() async {
  final network = JsonPlaceholderManager();
  final abort = Completer<void>();

  // Fallback: ensure we abort after a second if the progress condition doesn't trigger
  Future<void>.delayed(const Duration(seconds: 1)).then((_) {
    if (!abort.isCompleted) abort.complete();
  });

  try {
    await network.call(
      Request<void>(
        method: Method.GET,
        // A larger endpoint: we'll abort during streaming
        path: '/photos',
        decode: (_) {},
        abortTrigger: abort.future,
        downloadProgress: (bytes, totalBytes, percent) {
          final reachedThreshold = (totalBytes > 0 && percent >= 0.05) ||
              (totalBytes == 0 && bytes > 200 * 1024);
          print(
              'bytes: $bytes, bytes in kb: ${bytes / 1024.0} kb, percent: $percent');
          if (reachedThreshold && !abort.isCompleted) {
            abort.complete();
          }
        },
      ),
    );
  } on http.RequestAbortedException {
    print('Streaming request was aborted while downloading.');
  }
}
0
likes
160
points
68
downloads

Publisher

unverified uploader

Weekly Downloads

A powerful and comprehensive Dart package for simplifying HTTP requests and interacting with RESTful APIs

Repository (GitHub)

Topics

#http #network #rest #logging #curl

Documentation

API reference

License

MIT (license)

Dependencies

collection, http

More

Packages that depend on network_request