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

发布于 1周前 作者 bupafengyu 来自 Flutter

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

speed_test_dart 是一个用于在Flutter应用程序中测试网络速度(包括ping、上传和下载速度)的插件,它基于 speedtest.net 的服务器进行测试。该插件经过优化,提供了更多的自定义选项和更好的错误处理机制。如果某个服务器失败,它会尝试下一个服务器。

安装

  1. pubspec.yaml 文件中添加依赖:

    dependencies:
      speed_test_dart: ^1.0.0
    
  2. 运行 dart pub get 以下载并安装该插件。

  3. 使用此库的项目应使用Flutter的稳定通道。

初始化

在应用程序启动时,需要获取最佳的服务器列表来执行测试(参见 setBestServers 函数)。建议在获取服务器列表的过程中禁用按钮,以防止用户误操作。

Startup

下载速度测试

执行下载速度测试的过程如下所示:

Download test

上传速度测试

执行上传速度测试的过程如下所示:

Upload test

示例代码

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

import 'package:flutter/material.dart';
import 'package:speed_test_dart/classes/classes.dart';
import 'package:speed_test_dart/speed_test_dart.dart';

void main() => runApp(const MyApp());

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 创建一个 SpeedTestDart 实例
  SpeedTestDart tester = SpeedTestDart();

  // 存储最佳服务器列表
  List<Server> bestServersList = [];

  // 存储下载和上传速度
  double downloadRate = 0;
  double uploadRate = 0;

  // 标记是否准备好进行测试
  bool readyToTest = false;

  // 标记下载和上传测试是否正在进行
  bool loadingDownload = false;
  bool loadingUpload = false;

  // 获取最佳服务器列表
  Future<void> setBestServers() async {
    final settings = await tester.getSettings();  // 获取设置
    final servers = settings.servers;  // 获取服务器列表

    // 获取最佳服务器
    final _bestServersList = await tester.getBestServers(
      servers: servers,
    );

    setState(() {
      bestServersList = _bestServersList;  // 更新最佳服务器列表
      readyToTest = true;  // 标记为准备好进行测试
    });
  }

  // 测试下载速度
  Future<void> _testDownloadSpeed() async {
    setState(() {
      loadingDownload = true;  // 标记下载测试正在运行
    });

    // 执行下载速度测试
    final _downloadRate = await tester.testDownloadSpeed(servers: bestServersList);

    setState(() {
      downloadRate = _downloadRate;  // 更新下载速度
      loadingDownload = false;  // 标记下载测试完成
    });
  }

  // 测试上传速度
  Future<void> _testUploadSpeed() async {
    setState(() {
      loadingUpload = true;  // 标记上传测试正在运行
    });

    // 执行上传速度测试
    final _uploadRate = await tester.testUploadSpeed(servers: bestServersList);

    setState(() {
      uploadRate = _uploadRate;  // 更新上传速度
      loadingUpload = false;  // 标记上传测试完成
    });
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    // 在页面加载完成后调用 setBestServers
    WidgetsBinding.instance.addPostFrameCallback((_) {
      setBestServers();
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Speed Test Example App'),
        ),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              // 下载测试部分
              const Text(
                'Download Test:',
                style: TextStyle(
                  fontSize: 20,
                  fontWeight: FontWeight.bold,
                ),
              ),
              const SizedBox(height: 10),
              if (loadingDownload)
                Column(
                  children: const [
                    CircularProgressIndicator(),  // 显示加载动画
                    SizedBox(height: 10),
                    Text('Testing download speed...'),  // 提示正在测试下载速度
                  ],
                )
              else
                Text('Download rate: ${downloadRate.toStringAsFixed(2)} Mb/s'),  // 显示下载速度结果
              const SizedBox(height: 10),
              ElevatedButton(
                style: ElevatedButton.styleFrom(
                  primary: readyToTest && !loadingDownload ? Colors.blue : Colors.grey,  // 按钮颜色
                ),
                onPressed: loadingDownload
                    ? null  // 如果正在测试,则禁用按钮
                    : () async {
                        if (!readyToTest || bestServersList.isEmpty) return;  // 如果未准备好或服务器列表为空,则不执行测试
                        await _testDownloadSpeed();  // 开始下载速度测试
                      },
                child: const Text('Start'),  // 按钮文本
              ),
              const SizedBox(height: 50),

              // 上传测试部分
              const Text(
                'Upload Test:',
                style: TextStyle(
                  fontSize: 20,
                  fontWeight: FontWeight.bold,
                ),
              ),
              const SizedBox(height: 10),
              if (loadingUpload)
                Column(
                  children: const [
                    CircularProgressIndicator(),  // 显示加载动画
                    SizedBox(height: 10),
                    Text('Testing upload speed...'),  // 提示正在测试上传速度
                  ],
                )
              else
                Text('Upload rate: ${uploadRate.toStringAsFixed(2)} Mb/s'),  // 显示上传速度结果
              const SizedBox(height: 10),
              ElevatedButton(
                style: ElevatedButton.styleFrom(
                  primary: readyToTest ? Colors.blue : Colors.grey,  // 按钮颜色
                ),
                onPressed: loadingUpload
                    ? null  // 如果正在测试,则禁用按钮
                    : () async {
                        if (!readyToTest || bestServersList.isEmpty) return;  // 如果未准备好或服务器列表为空,则不执行测试
                        await _testUploadSpeed();  // 开始上传速度测试
                      },
                child: const Text('Start'),  // 按钮文本
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用speed_test_dart插件来进行网络速度测试的示例代码。speed_test_dart是一个用于测试下载和上传速度的Flutter插件。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  speed_test_dart: ^latest_version  # 请替换为最新的版本号

然后运行flutter pub get来安装依赖。

2. 导入包

在你的Dart文件中导入speed_test_dart包:

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

3. 使用SpeedTest类进行测试

以下是一个简单的Flutter应用示例,展示了如何使用speed_test_dart包进行网络速度测试:

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Speed Test',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SpeedTestPage(),
    );
  }
}

class SpeedTestPage extends StatefulWidget {
  @override
  _SpeedTestPageState createState() => _SpeedTestPageState();
}

class _SpeedTestPageState extends State<SpeedTestPage> {
  String downloadSpeed = '';
  String uploadSpeed = '';
  bool isTesting = false;

  void _startSpeedTest() async {
    setState(() {
      isTesting = true;
      downloadSpeed = 'Testing...';
      uploadSpeed = 'Testing...';
    });

    try {
      final SpeedTest speedTest = SpeedTest();

      // 测试下载速度
      final DownloadResult downloadResult = await speedTest.download();
      setState(() {
        downloadSpeed = '${downloadResult.mbps.toStringAsFixed(2)} Mbps';
      });

      // 测试上传速度
      final UploadResult uploadResult = await speedTest.upload();
      setState(() {
        uploadSpeed = '${uploadResult.mbps.toStringAsFixed(2)} Mbps';
        isTesting = false;
      });
    } catch (e) {
      setState(() {
        downloadSpeed = 'Error';
        uploadSpeed = 'Error';
        isTesting = false;
      });
      print('Error during speed test: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Speed Test'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            if (isTesting)
              CircularProgressIndicator()
            else
              ElevatedButton(
                onPressed: _startSpeedTest,
                child: Text('Start Speed Test'),
              ),
            SizedBox(height: 20),
            Text('Download Speed: $downloadSpeed'),
            SizedBox(height: 10),
            Text('Upload Speed: $uploadSpeed'),
          ],
        ),
      ),
    );
  }
}

解释

  1. 添加依赖:在pubspec.yaml文件中添加speed_test_dart依赖。
  2. 导入包:在需要使用网络速度测试的Dart文件中导入speed_test_dart包。
  3. 创建SpeedTest实例:使用SpeedTest类来创建实例。
  4. 调用download和upload方法:分别调用download()upload()方法来测试下载和上传速度。
  5. 更新UI:根据测试结果更新UI,显示下载和上传速度。

这个示例代码展示了如何在Flutter应用中集成和使用speed_test_dart插件进行网络速度测试。确保在实际应用中处理错误和异常情况,并提供用户友好的反馈。

回到顶部