flutter_network_layer_dio 0.1.2 copy "flutter_network_layer_dio: ^0.1.2" to clipboard
flutter_network_layer_dio: ^0.1.2 copied to clipboard

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

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_network_layer_dio/flutter_network_layer_dio.dart';

void main() async {
  await AppNetworkManager.networkInvoker.init(
    'https://jsonplaceholder.typicode.com',
  );
  runApp(const App());
}

/// The app widget.
class App extends StatelessWidget {
  /// Create an instance of [App].
  const App({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'App',
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  void initState() {
    super.initState();
    _request();
  }

  Future<void> _request() async {
    final request = RequestUser(id: 1);
    final response = await AppNetworkManager.networkInvoker.request(request);
    response.when(
      success: (response) {
        setState(() => _data = response.data.toString());
      },
      error: (response) {
        print('Error: ${response.message}');
        setState(() => _data = 'Failed to get user');
      },
    );
  }

  String _data = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(_data),
      ),
    );
  }
}

abstract final class AppNetworkManager {
  static final INetworkInvoker networkInvoker =
      DioNetworkInvoker(onLog: _onLog);

  static void _onLog(LogLevel level, String message) {
    print('[${level.name}] $message');
  }
}

final class ResponseUser implements IResponseModel {
  const ResponseUser({
    required this.id,
    required this.name,
  });

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

  final int id;
  final String name;

  @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,
    );
  }

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

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

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

  final int id;

  @override
  Map<String, dynamic> get data => const {};

  @override
  Map<String, dynamic> get headers => const {};

  @override
  HttpRequestMethod get method => HttpRequestMethod.get;

  @override
  OnProgressCallback? onReceiveProgressUpdate;

  @override
  OnProgressCallback? onSendProgressUpdate;

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

  @override
  RequestPayloadType get payloadType => RequestPayloadType.json;

  @override
  ResponseUser get sampleModel => const ResponseUser.empty();
}
1
likes
0
points
16
downloads

Publisher

verified publisherfemrek.me

Weekly Downloads

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

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

dio, flutter_network_layer_core

More

Packages that depend on flutter_network_layer_dio