Flutter系统监控插件system_monitor的使用

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

Flutter系统监控插件system_monitor的使用

system_monitor

pub package

一个用于通过WebSocket连接到Python后端来监控系统CPU和RAM使用情况的Flutter插件。此插件与system_monitor_cli包配合使用,后者提供了用于管理Python服务器的命令行界面。

使用system_monitor_cli

此插件可以与system_monitor_cli包配合使用,后者提供了用于管理Python服务器的命令行界面。有关如何使用CLI工具的更多详细信息,请参阅system_monitor_cli的README文件。

开始使用

前提条件

在使用此插件之前,请确保您的计算机上已安装Python。您可以从官方网站下载Python:https://www.python.org/

您还需要安装以下Python库:

  • psutil:用于访问系统详情和进程实用程序的跨平台库。
  • websockets:用于在Python中构建WebSocket服务器和客户端的库。

安装Python库

使用pip

pip install psutil
pip install websockets

使用pip3(适用于Python 3)

pip3 install psutil
pip3 install websockets

安装

要使用此插件,请在pubspec.yaml文件中添加system_monitor作为依赖项:

dependencies:
  flutter:
    sdk: flutter
  system_monitor: ^1.0.6

使用

导入插件

import 'package:system_monitor/system_monitor.dart';

初始化监控器

在使用插件之前,需要通过创建SystemMonitor实例并调用其init()方法来初始化监控器:

SystemMonitor monitor = SystemMonitor.instance;
await monitor.init();

获取RAM使用情况

要获取当前RAM使用情况(以GB为单位),可以调用getRamUsage()方法:

SystemMonitor monitor = SystemMonitor.instance;
double ramUsage = await monitor.getRamUsage();
print('RAM Usage: $ramUsage GB');

获取CPU使用情况

要获取当前CPU使用情况(以百分比为单位),可以调用getCpuUsage()方法:

SystemMonitor monitor = SystemMonitor.instance;
double cpuUsage = await monitor.getCpuUsage();
print('CPU Usage: $cpuUsage%');

实时监控

您还可以使用startRealtimeMonitoring()方法开始实时监控CPU和RAM使用情况:

SystemMonitor monitor = SystemMonitor.instance;
StreamSubscription<Map<String, double>> subscription = monitor.startRealtimeMonitoring().listen((data) {
  double ramUsage = data['ram'];
  double cpuUsage = data['cpu'];
  print('Realtime RAM Usage: $ramUsage GB, CPU Usage: $cpuUsage%');
});

当不再需要实时监控时,别忘了取消订阅:

subscription.cancel();

关闭连接

在完成监控器的使用后,请确保关闭与Python后端的连接:

SystemMonitor monitor = SystemMonitor.instance;
monitor.close();

示例

完整的示例,请查看此仓库中的example文件夹。

许可证

此插件遵循MIT许可证 - 详情请见LICENSE文件。


示例代码

example/lib/main.dart

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

void main() async {
  await SystemMonitor.instance.init();
  runApp(const MyApp());
}

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

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

class _MyAppState extends State<MyApp> {
  final _systemMonitor = SystemMonitor.instance;

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  void dispose() {
    _systemMonitor.close();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('System Monitor Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () async {
                  final ramUsedGB = await _systemMonitor.getRamUsage();
                  print("RAM Usage: $ramUsedGB GB");
                },
                child: const Text('Get RAM Usage'),
              ),
              const SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  final cpuPercentage = await _systemMonitor.getCpuUsage();
                  print("CPU Usage: $cpuPercentage %");
                },
                child: const Text('Get CPU Usage'),
              ),
              StreamBuilder<Map<String, double>>(
                stream: _systemMonitor.startRealtimeMonitoring(),
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    final ramUsedGB = snapshot.data?['ram'];
                    final cpuPercentage = snapshot.data?['cpu'];
                    return Column(
                      children: [
                        Text("Realtime RAM Usage: $ramUsedGB GB"),
                        Text("Realtime CPU Usage: $cpuPercentage %"),
                      ],
                    );
                  } else {
                    return const CircularProgressIndicator();
                  }
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter系统监控插件system_monitor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter系统监控插件system_monitor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,system_monitor 是一个用于 Flutter 的插件,它允许你监控设备的系统状态,如 CPU、内存使用情况以及磁盘信息。以下是如何在 Flutter 项目中使用 system_monitor 插件的一个简单示例。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  system_monitor: ^0.5.0  # 请检查最新版本号

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

步骤 2: 导入插件

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

import 'package:system_monitor/system_monitor.dart';

步骤 3: 使用插件获取系统信息

以下是一个示例,展示如何使用 system_monitor 插件来获取设备的 CPU、内存和磁盘信息:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String cpuInfo = "";
  String memoryInfo = "";
  String storageInfo = "";

  @override
  void initState() {
    super.initState();
    _getSystemInfo();
  }

  Future<void> _getSystemInfo() async {
    SystemMonitor systemMonitor = SystemMonitor();

    // 获取 CPU 信息
    CpuInfo cpuInfoResult = await systemMonitor.getCpuInfo();
    setState(() {
      cpuInfo = "CPU Cores: ${cpuInfoResult.cores}\n"
          "CPU Usage: ${cpuInfoResult.usage.toStringAsFixed(2)}%";
    });

    // 获取内存信息
    MemoryInfo memoryInfoResult = await systemMonitor.getMemoryInfo();
    setState(() {
      memoryInfo = "Total Memory: ${memoryInfoResult.total.toString()} bytes\n"
          "Used Memory: ${memoryInfoResult.used.toString()} bytes\n"
          "Free Memory: ${memoryInfoResult.free.toString()} bytes";
    });

    // 获取存储信息
    StorageInfo storageInfoResult = await systemMonitor.getStorageInfo();
    setState(() {
      storageInfo = "Total Storage: ${storageInfoResult.total.toString()} bytes\n"
          "Used Storage: ${storageInfoResult.used.toString()} bytes\n"
          "Free Storage: ${storageInfoResult.free.toString()} bytes";
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('System Monitor Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Text('CPU Info:', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
              Text(cpuInfo),
              SizedBox(height: 20),
              Text('Memory Info:', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
              Text(memoryInfo),
              SizedBox(height: 20),
              Text('Storage Info:', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
              Text(storageInfo),
            ],
          ),
        ),
      ),
    );
  }
}

说明

  1. CPU 信息:通过 systemMonitor.getCpuInfo() 获取 CPU 核心数和使用率。
  2. 内存信息:通过 systemMonitor.getMemoryInfo() 获取总内存、已用内存和空闲内存。
  3. 存储信息:通过 systemMonitor.getStorageInfo() 获取总存储、已用存储和空闲存储。

注意事项

  • system_monitor 插件可能在不同平台(如 Android 和 iOS)上表现不同,因此请确保在目标平台上进行测试。
  • 插件可能需要在 AndroidManifest.xml 或 Info.plist 中添加额外的权限,具体取决于你需要获取的信息类型。

希望这个示例能帮助你在 Flutter 项目中成功使用 system_monitor 插件!

回到顶部