dio_speed_tracker 0.0.3 copy "dio_speed_tracker: ^0.0.3" to clipboard
dio_speed_tracker: ^0.0.3 copied to clipboard

A lightweight and extensible Dio interceptor for monitoring real-world network speed in Mbps, based on actual HTTP download performance

example/lib/main.dart

import 'package:dio/dio.dart';
import 'package:dio_speed_tracker/dio_speed_tracker.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late final NetworkSpeedController _speedController;
  late final Dio _dio;
  String _statusMessage = "Waiting for download...";

  @override
  void initState() {
    final speedController = NetworkSpeedController(
      maxSpeedSamples: 10,
      minResultsToCheck: 5,
      poorConnectionThreshold: 2.0, // Mbps
    );

    final dio = Dio();

    dio.interceptors.add(
      SpeedInterceptor(
        speedController,
        minTrackableSize: 10 * 1024, // 10 KB
        minDuration: Duration(milliseconds: 20),
      ),
    );

    super.initState();

    _speedController = NetworkSpeedController(
      maxSpeedSamples: 5,
      minResultsToCheck: 3,
      poorConnectionThreshold: 2.0, // Mbps
    );

    _dio = Dio();
    _dio.interceptors.add(
      SpeedInterceptor(
        _speedController,
        minTrackableSize: 5 * 1024,
        minDuration: Duration(microseconds: 500),
      ),
    );

    _speedController.stream.listen((status) {
      if (status == NetworkStatus.poor) {
        setState(() {
          _statusMessage = "🚨 Poor connection detected!";
        });
      }
    });
  }

  @override
  void dispose() {
    _speedController.dispose();
    super.dispose();
  }

  Future<void> _triggerDownload() async {
    setState(() {
      _statusMessage = "Downloading...";
    });

    try {
      ///replace with your url to test
      String url = "https://picsum.photos/id/4/5000/3333";
      await _dio.get(
        url,
        options: Options(responseType: ResponseType.bytes),
      );
      await _dio.get(
        url,
        options: Options(responseType: ResponseType.bytes),
      );
      await _dio.get(
        url,
        options: Options(responseType: ResponseType.bytes),
      );
      await _dio.get(
        url,
        options: Options(responseType: ResponseType.bytes),
      );
      await _dio.get(
        url,
        options: Options(responseType: ResponseType.bytes),
      );
      if (_speedController.speedResults.length >= 4) {
        setState(() {
          _statusMessage = "✅ Download complete. ${_speedController.speedResults}";
        });
      }
    } catch (e) {
      setState(() {
        _statusMessage = "⚠️ Error during download.";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('dio_speed_tracker Example')),
        body: Center(
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                Text(_statusMessage, textAlign: TextAlign.center),
                const SizedBox(height: 20),
                ElevatedButton(
                  onPressed: _triggerDownload,
                  child: const Text("Start Test Download"),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
4
likes
160
points
29
downloads

Publisher

unverified uploader

Weekly Downloads

A lightweight and extensible Dio interceptor for monitoring real-world network speed in Mbps, based on actual HTTP download performance

Repository (GitHub)
View/report issues

Topics

#network #dio #performance #connection #speed

Documentation

Documentation
API reference

License

MIT (license)

Dependencies

collection, dio, flutter, flutter_web_plugins, plugin_platform_interface, web

More

Packages that depend on dio_speed_tracker