Flutter网络速度测试插件internet_speed_chu_bi的使用

Flutter网络速度测试插件internet_speed_chu_bi的使用

internet_speed_chu_bi

网络速度测试插件,仅用于我的项目。
Bich非常漂亮!

开始使用

添加依赖

pubspec.yaml文件中添加以下依赖:

dependencies:
  internet_speed_chu_bi: ^0.16.2

示例

以下是一个完整的示例,展示了如何使用internet_speed_chu_bi插件进行网络速度测试。

主文件(main.dart)

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter 网络速度测试',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  bool _isDownloading = false;
  bool _isUploading = false;

  void _startDownloadTest() async {
    if (_isDownloading) return;
    setState(() {
      _isDownloading = true;
    });

    final internetSpeedTest = InternetSpeedTest();

    internetSpeedTest.startDownloadTesting(
      onDone: (double transferRate, SpeedUnit unit) {
        // 测试完成后的处理逻辑
        setState(() {
          _isDownloading = false;
        });
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('下载速度: ${transferRate.toStringAsFixed(2)} ${unit.name}')),
        );
      },
      onProgress: (double percent, double transferRate, SpeedUnit unit) {
        // 测试过程中的进度更新
        print('下载进度: $percent%, 传输速率: ${transferRate.toStringAsFixed(2)} ${unit.name}');
      },
      onError: (String errorMessage, String speedTestError) {
        // 错误处理
        setState(() {
          _isDownloading = false;
        });
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('错误: $errorMessage')),
        );
      },
    );
  }

  void _startUploadTest() async {
    if (_isUploading) return;
    setState(() {
      _isUploading = true;
    });

    final internetSpeedTest = InternetSpeedTest();

    internetSpeedTest.startUploadTesting(
      onDone: (double transferRate, SpeedUnit unit) {
        // 测试完成后的处理逻辑
        setState(() {
          _isUploading = false;
        });
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('上传速度: ${transferRate.toStringAsFixed(2)} ${unit.name}')),
        );
      },
      onProgress: (double percent, double transferRate, SpeedUnit unit) {
        // 测试过程中的进度更新
        print('上传进度: $percent%, 传输速率: ${transferRate.toStringAsFixed(2)} ${unit.name}');
      },
      onError: (String errorMessage, String speedTestError) {
        // 错误处理
        setState(() {
          _isUploading = false;
        });
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('错误: $errorMessage')),
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter 网络速度测试'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _startDownloadTest,
              child: Text(_isDownloading ? '下载测试中...' : '开始下载测试'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _startUploadTest,
              child: Text(_isUploading ? '上传测试中...' : '开始上传测试'),
            ),
          ],
        ),
      ),
    );
  }
}

额外功能

你还可以配置测试服务器的URL:

import 'package:internet_speed_chu_bi/internet_speed_chu_bi.dart';

final internetSpeedTest = InternetSpeedTest();

internetSpeedTest.startDownloadTesting(
  onDone: (double transferRate, SpeedUnit unit) {
    // TODO: 更新UI
  },
  onProgress: (double percent, double transferRate, SpeedUnit unit) {
    // TODO: 更新UI
  },
  onError: (String errorMessage, String speedTestError) {
    // TODO: 显示错误提示
  },
  testServer: 'your_test_server_url', // 自定义测试服务器URL
);

internetSpeedTest.startUploadTesting(
  onDone: (double transferRate, SpeedUnit unit) {
    print('传输速率: $transferRate');
    setState(() {
      // TODO: 更新UI
    });
  },
  onProgress: (double percent, double transferRate, SpeedUnit unit) {
    print('传输速率: $transferRate, 进度: $percent');
    setState(() {
      // TODO: 更新UI
    });
  },
  onError: (String errorMessage, String speedTestError) {
    // TODO: 显示错误提示
  },
  testServer: 'your_test_server_url', // 自定义测试服务器URL
);

如果没有提供自定义的服务器URL,我们将使用以下URL进行下载:

http://ipv4.ikoula.testdebit.info/1M.iso

对于上传,将使用以下URL:

http://ipv4.ikoula.testdebit.info/

更多关于Flutter网络速度测试插件internet_speed_chu_bi的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络速度测试插件internet_speed_chu_bi的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


internet_speed_chu_bi 是一个用于 Flutter 的网络速度测试插件。它可以帮助你测量当前设备的网络上传和下载速度。以下是如何使用这个插件的详细步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 internet_speed_chu_bi 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  internet_speed_chu_bi: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:internet_speed_chu_bi/internet_speed_chu_bi.dart';

3. 初始化插件

在使用之前,你需要初始化插件:

final internetSpeed = InternetSpeedChuBi();

4. 测试下载速度

你可以使用 testDownloadSpeed 方法来测试下载速度。该方法返回一个 Stream,你可以监听这个流来获取实时速度。

void testDownloadSpeed() {
  internetSpeed.testDownloadSpeed(
    onDone: (double transferRate, SpeedUnit unit) {
      print('Download speed: $transferRate ${unit.toString()}');
    },
    onProgress: (double percent, double transferRate, SpeedUnit unit) {
      print('Download progress: $percent%, Speed: $transferRate ${unit.toString()}');
    },
    onError: (String errorMessage, String speedTestError) {
      print('Error: $errorMessage, $speedTestError');
    },
  );
}

5. 测试上传速度

你可以使用 testUploadSpeed 方法来测试上传速度。该方法同样返回一个 Stream,你可以监听这个流来获取实时速度。

void testUploadSpeed() {
  internetSpeed.testUploadSpeed(
    onDone: (double transferRate, SpeedUnit unit) {
      print('Upload speed: $transferRate ${unit.toString()}');
    },
    onProgress: (double percent, double transferRate, SpeedUnit unit) {
      print('Upload progress: $percent%, Speed: $transferRate ${unit.toString()}');
    },
    onError: (String errorMessage, String speedTestError) {
      print('Error: $errorMessage, $speedTestError');
    },
  );
}

6. 处理错误

在测试过程中,如果出现错误,onError 回调会被触发,并返回错误信息。

7. 完整示例

以下是一个完整的示例,展示了如何使用 internet_speed_chu_bi 插件来测试下载和上传速度:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SpeedTestPage(),
    );
  }
}

class SpeedTestPage extends StatefulWidget {
  [@override](/user/override)
  _SpeedTestPageState createState() => _SpeedTestPageState();
}

class _SpeedTestPageState extends State<SpeedTestPage> {
  final internetSpeed = InternetSpeedChuBi();
  double downloadSpeed = 0.0;
  double uploadSpeed = 0.0;

  void testDownloadSpeed() {
    internetSpeed.testDownloadSpeed(
      onDone: (double transferRate, SpeedUnit unit) {
        setState(() {
          downloadSpeed = transferRate;
        });
        print('Download speed: $transferRate ${unit.toString()}');
      },
      onProgress: (double percent, double transferRate, SpeedUnit unit) {
        print('Download progress: $percent%, Speed: $transferRate ${unit.toString()}');
      },
      onError: (String errorMessage, String speedTestError) {
        print('Error: $errorMessage, $speedTestError');
      },
    );
  }

  void testUploadSpeed() {
    internetSpeed.testUploadSpeed(
      onDone: (double transferRate, SpeedUnit unit) {
        setState(() {
          uploadSpeed = transferRate;
        });
        print('Upload speed: $transferRate ${unit.toString()}');
      },
      onProgress: (double percent, double transferRate, SpeedUnit unit) {
        print('Upload progress: $percent%, Speed: $transferRate ${unit.toString()}');
      },
      onError: (String errorMessage, String speedTestError) {
        print('Error: $errorMessage, $speedTestError');
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Internet Speed Test'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Download Speed: $downloadSpeed Mbps'),
            SizedBox(height: 20),
            Text('Upload Speed: $uploadSpeed Mbps'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: testDownloadSpeed,
              child: Text('Test Download Speed'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: testUploadSpeed,
              child: Text('Test Upload Speed'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部