ispectify_dio 4.2.0 copy "ispectify_dio: ^4.2.0" to clipboard
ispectify_dio: ^4.2.0 copied to clipboard

An additional package for Dio (logging and handling).

Dio HTTP client integration for ISpectify logging system

pub version License: MIT GitHub stars

Pub likes Pub points

🔍 Overview #

ISpectify Dio provides seamless integration between Dio HTTP client and the ISpectify logging system.

🌐 HTTP Logging • 📊 Response Tracking • ❌ Error Handling • ⚡ Performance

Streamline your HTTP debugging workflow by automatically capturing and logging all Dio HTTP client interactions. Perfect for monitoring API calls, debugging network issues, and tracking performance metrics.

🎯 Key Features #

  • 🌐 HTTP Request Logging: Automatic logging of all Dio requests
  • 📊 Response Tracking: Detailed response logging with timing information
  • Error Handling: Comprehensive error logging with stack traces
  • 🔍 Request Inspection: Headers, body, and parameter logging
  • Performance Metrics: Request/response timing and size tracking
  • 🎛️ Configurable: Flexible configuration options for different environments

🔧 Configuration Options #

Basic Setup #

final Dio dio = Dio(
  BaseOptions(
    baseUrl: 'https://api.example.com',
  ),
);

// Initialize in ISpect.run onInit callback
ISpect.run(
  () => runApp(MyApp()),
  logger: iSpectify,
  onInit: () {
    dio.interceptors.add(
      ISpectifyDioLogger(
        iSpectify: iSpectify,
        settings: const ISpectifyDioLoggerSettings(
          printRequestHeaders: true,
        ),
      ),
    );
  },
);

Advanced Configuration with Filters #

dio.interceptors.add(
  ISpectifyDioLogger(
    iSpectify: iSpectify,
    settings: const ISpectifyDioLoggerSettings(
      printRequestHeaders: true,
      // Filter specific requests
      // requestFilter: (requestOptions) =>
      //     requestOptions.path != '/sensitive-endpoint',
      // Filter specific responses
      // responseFilter: (response) => response.statusCode != 404,
      // Filter specific errors
      // errorFilter: (error) => error.response?.statusCode != 404,
    ),
  ),
);

Multiple Dio Instances #

// Main API client
final Dio mainDio = Dio(
  BaseOptions(baseUrl: 'https://api.example.com'),
);

// File upload client
final Dio uploadDio = Dio(
  BaseOptions(baseUrl: 'https://upload.example.com'),
);

// Add interceptors to both
mainDio.interceptors.add(
  ISpectifyDioLogger(iSpectify: iSpectify),
);

uploadDio.interceptors.add(
  ISpectifyDioLogger(iSpectify: iSpectify),
);

📦 Installation #

Add ispectify_dio to your pubspec.yaml:

dependencies:
  ispectify_dio: ^4.1.4

🚀 Quick Start #

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:ispect/ispect.dart';
import 'package:ispectify_dio/ispectify_dio.dart';

final Dio dio = Dio(
  BaseOptions(
    baseUrl: 'https://jsonplaceholder.typicode.com',
  ),
);

void main() {
  final ISpectify iSpectify = ISpectifyFlutter.init();

  ISpect.run(
    () => runApp(MyApp()),
    logger: iSpectify,
    onInit: () {
      // Add ISpectify Dio interceptor
      dio.interceptors.add(
        ISpectifyDioLogger(
          iSpectify: iSpectify,
          settings: const ISpectifyDioLoggerSettings(
            printRequestHeaders: true,
          ),
        ),
      );
    },
  );
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('ISpectify Dio Example')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () {
                  // All Dio requests will be automatically logged
                  dio.get<dynamic>('/posts/1');
                },
                child: const Text('Send GET Request'),
              ),
              const SizedBox(height: 16),
              ElevatedButton(
                onPressed: () {
                  // Error requests are also logged
                  dio.get<dynamic>('/invalid-endpoint');
                },
                child: const Text('Send Error Request'),
              ),
              const SizedBox(height: 16),
              ElevatedButton(
                onPressed: () {
                  // Upload file with FormData
                  final FormData formData = FormData();
                  formData.files.add(MapEntry(
                    'file',
                    MultipartFile.fromBytes(
                      [1, 2, 3],
                      filename: 'file.txt',
                    ),
                  ));
                  dio.post<dynamic>('/upload', data: formData);
                },
                child: const Text('Upload File'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

📚 Examples #

See the example/ directory for complete integration examples with different Dio configurations.

🏗️ Architecture #

ISpectifyDio integrates with the Dio HTTP client through interceptors:

Component Description
Dio Interceptor Captures HTTP requests and responses
Request Logger Logs request details (headers, body, params)
Response Logger Logs response data and timing
Error Handler Captures and logs HTTP errors
Performance Tracker Measures request/response times

🤝 Contributing #

Contributions are welcome! Please read our contributing guidelines and submit pull requests to the main branch.

📄 License #

This project is licensed under the MIT License - see the LICENSE file for details.


Built with ❤️ for the Flutter community

0
likes
160
points
908
downloads

Publisher

unverified uploader

Weekly Downloads

An additional package for Dio (logging and handling).

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

ansicolor, dio, ispectify

More

Packages that depend on ispectify_dio