flutter_network_layer_dio 1.0.0-dev3 copy "flutter_network_layer_dio: ^1.0.0-dev3" to clipboard
flutter_network_layer_dio: ^1.0.0-dev3 copied to clipboard

Dio implementation for flutter_network_layer_core. Uses the dio package to make network requests.

example/main.dart

// ignore_for_file: avoid_print just an example

import 'package:flutter_network_layer_dio/flutter_network_layer_dio.dart';

void main() async {
  final request = RequestUser(id: 1);
  final response = await AppNetworkManager.networkInvoker.request(request);
  switch (response) {
    case SuccessResponseResult(:final data):
      print('DATA: $data');
    case final SpecifiedResponseResult r:
      print('ERROR: Status ${r.statusCode}');
      print(r.data);
    case NetworkErrorResult(:final error):
      print('ERROR: ${error.message}');
  }
}

abstract final class AppNetworkManager {
  static final INetworkInvoker networkInvoker = DioNetworkInvoker.fromBaseUrl(
    'https://jsonplaceholder.typicode.com',
  );
}

final class ResponseUser extends Schema {
  const ResponseUser({
    required this.id,
    required this.name,
  });

  const ResponseUser.empty()
      : id = 0,
        name = '';

  final int id;
  final String name;

  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'name': name,
    };
  }

  @override
  String toString() => toJson().toString();
}

final class ResponseUserFactory extends JsonSchemaFactory<ResponseUser> {
  factory ResponseUserFactory() => _instance;

  const ResponseUserFactory._internal();

  static const ResponseUserFactory _instance = ResponseUserFactory._internal();

  @override
  ResponseUser fromJson(dynamic json) {
    assert(json is Map<String, dynamic>, 'json is not a Map<String, dynamic>');
    final map = json as Map<String, dynamic>;

    return ResponseUser(
      id: map['id'] as int,
      name: map['name'] as String,
    );
  }
}

final class RequestUser extends RequestCommand<ResponseUser> {
  RequestUser({
    required this.id,
  });

  final int id;

  @override
  String get path => '/users/$id';

  @override
  SchemaFactory<ResponseUser> get defaultResponseFactory =>
      ResponseUserFactory();

  @override
  SchemaFactory get defaultErrorResponseFactory => IgnoredSchema.factory;
}
1
likes
155
points
138
downloads

Publisher

verified publisherfemrek.me

Weekly Downloads

Dio implementation for flutter_network_layer_core. Uses the dio package to make network requests.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

dio, flutter_network_layer_core, http_parser

More

Packages that depend on flutter_network_layer_dio