Flutter系统状态获取插件system_status的使用

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

Flutter系统状态获取插件system_status的使用

system_status 是一个用于MacOS系统的Flutter插件,它提供了实时监控RAM、电池、存储和CPU使用情况的功能。该插件具有以下特点:

  • 实时监控系统资源:RAM、电池、存储和CPU。
  • 用户友好的界面,易于集成和使用。
  • 支持MacOS 10.14及以上版本。
  • 低系统资源占用,优化了性能监控而不会产生额外开销。

安装

要使用此插件,请在你的pubspec.yaml文件中添加system_status作为依赖项。

dependencies:
  flutter:
    sdk: flutter
  system_status: ^1.0.7

然后,在需要使用的地方导入该包:

import 'package:system_status/system_status.dart';

使用

以下是如何初始化插件并获取系统状态信息的示例代码:

// 初始化插件
SystemStatusMacOS systemStatus = SystemStatusMacOS();

// 获取系统状态信息
void getSystemStatus() async {
  try {
    SystemStatusModel? status = await systemStatus.getSystemStatus();
   
    print('System Status: ${status}');
  } catch (e) {
    print('Error retrieving system status: $e');
  }
}

示例代码

以下是完整的示例代码,展示了如何在Flutter应用中使用system_status插件来实时监控系统状态。

import 'dart:async';

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'SystemStatus Demo',
      home: SystemStatusPage(),
    );
  }
}

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

  [@override](/user/override)
  _SystemStatusPageState createState() => _SystemStatusPageState();
}

class _SystemStatusPageState extends State<SystemStatusPage> {
  late Timer timer;
  final SystemStatusMacOS systemStatus = SystemStatusMacOS();
  SystemStatusModel? systemStatusModel;

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

    // 每秒更新一次系统状态
    timer = Timer.periodic(const Duration(seconds: 1), (Timer t) {
      fetchSystemStatus();
    });
  }

  [@override](/user/override)
  void dispose() {
    timer.cancel();
    super.dispose();
  }

  // 获取系统状态
  Future<void> fetchSystemStatus() async {
    try {
      final SystemStatusModel? newSystemStatusModel = await systemStatus.getSystemStatus();

      if (newSystemStatusModel != null) {
        setState(() {
          systemStatusModel = newSystemStatusModel;
        });
      }
    } catch (e) {
      debugPrint('Error fetching system status: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('System Status'),
      ),
      body: systemStatusModel != null
          ? ListView(
              padding: const EdgeInsets.all(16.0),
              children: [
                // CPU 使用情况
                ListTile(
                  title: Text('CPU Usage - %${((systemStatusModel?.cpuUsage?.userPercentage ?? 0) + (systemStatusModel?.cpuUsage?.sysPercentage ?? 0)).toStringAsFixed(2)}'),
                  subtitle: Text(
                      'User: ${systemStatusModel?.cpuUsage?.userPercentage?.toStringAsFixed(2)}% | Sys: ${systemStatusModel?.cpuUsage?.sysPercentage?.toStringAsFixed(2)}% | Idle: ${systemStatusModel?.cpuUsage?.idlePercentage?.toStringAsFixed(2)}%'),
                ),
                // 电池状态
                ListTile(
                  title: Text('Battery - %${systemStatusModel?.batteryStatus?.currentCapacity}'),
                  subtitle: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text('Health: ${systemStatusModel?.batteryStatus?.healthString}'),
                      Text('Charging: ${systemStatusModel?.batteryStatus?.isCharging == true ? 'Yes' : 'No'}'),
                      Text('Charged: ${systemStatusModel?.batteryStatus?.isCharged == true ? 'Yes' : 'No'}'),
                      Text('Cycle Count: ${systemStatusModel?.batteryStatus?.cycleCount}'),
                      Text('Ac Powered: ${systemStatusModel?.batteryStatus?.acPowered == true ? 'Yes' : 'No'}'),
                      Text('Temperature: ${systemStatusModel?.batteryStatus?.temperature?.toStringAsFixed(2)} C'),
                    ],
                  ),
                ),
                // 磁盘空间
                ListTile(
                  title: const Text('Disk Space'),
                  subtitle: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      SelectableText('Total: ${((systemStatusModel?.diskSpace?.totalDiskSpace ?? 0) / (1024 * 1024 * 1024)).toStringAsFixed(2)} GB'),
                      Text('Free: ${((systemStatusModel?.diskSpace?.freeDiskSpace ?? 0) / (1024 * 1024 * 1024)).toStringAsFixed(2)} GB'),
                      Text('Used: ${((systemStatusModel?.diskSpace?.usedDiskSpace ?? 0) / (1024 * 1024 * 1024)).toStringAsFixed(2)} GB'),
                      Text('Used Percentage: ${systemStatusModel?.diskSpace?.usedPercentage?.toStringAsFixed(2)}%'),
                    ],
                  ),
                ),
                // 内存统计
                ListTile(
                  title: Text('Memory Statistics - %${systemStatusModel?.memoryStatistics?.memoryUsageRatio?.toStringAsFixed(2)}'),
                  subtitle: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text('Application Memory: ${systemStatusModel?.memoryStatistics?.applicationMemory} bytes'),
                      Text('Wired Memory: ${systemStatusModel?.memoryStatistics?.wiredMemory} bytes'),
                      Text('Compressed Memory: ${systemStatusModel?.memoryStatistics?.compressedMemory} bytes'),
                      Text('Memory Pressure: ${systemStatusModel?.memoryStatistics?.memoryPressure}'),
                    ],
                  ),
                ),
              ],
            )
          : const Center(
              child: CircularProgressIndicator(),
            ),
    );
  }
}

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

1 回复

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


当然,system_status 是一个用于获取 Flutter 应用中系统状态信息的插件。以下是如何在 Flutter 项目中使用 system_status 插件来获取系统状态信息的代码示例。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 system_status 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  system_status: ^x.y.z  # 请将 x.y.z 替换为最新版本号

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

2. 导入插件

在需要使用 system_status 插件的 Dart 文件中导入它:

import 'package:system_status/system_status.dart';

3. 使用插件获取系统状态

以下是一个简单的示例,展示如何使用 system_status 插件来获取设备的电池状态、内存信息和设备信息:

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

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

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

class _MyAppState extends State<MyApp> {
  BatteryStatus? _batteryStatus;
  MemoryInfo? _memoryInfo;
  DeviceInfo? _deviceInfo;

  @override
  void initState() {
    super.initState();
    _getBatteryStatus();
    _getMemoryInfo();
    _getDeviceInfo();
  }

  Future<void> _getBatteryStatus() async {
    try {
      final BatteryStatus batteryStatus = await SystemStatus.batteryStatus;
      setState(() {
        _batteryStatus = batteryStatus;
      });
    } catch (e) {
      print('Error getting battery status: $e');
    }
  }

  Future<void> _getMemoryInfo() async {
    try {
      final MemoryInfo memoryInfo = await SystemStatus.memoryInfo;
      setState(() {
        _memoryInfo = memoryInfo;
      });
    } catch (e) {
      print('Error getting memory info: $e');
    }
  }

  Future<void> _getDeviceInfo() async {
    try {
      final DeviceInfo deviceInfo = await SystemStatus.deviceInfo;
      setState(() {
        _deviceInfo = deviceInfo;
      });
    } catch (e) {
      print('Error getting device info: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('System Status Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              if (_batteryStatus != null)
                Text('Battery Status:\n'
                    'Level: ${_batteryStatus!.level}%\n'
                    'Is Charging: ${_batteryStatus!.isCharging}\n'
                    'Is Full: ${_batteryStatus!.isFull}'),
              SizedBox(height: 16),
              if (_memoryInfo != null)
                Text('Memory Info:\n'
                    'Total RAM: ${_memoryInfo!.totalRam} bytes\n'
                    'Free RAM: ${_memoryInfo!.freeRam} bytes\n'
                    'Used RAM: ${_memoryInfo!.usedRam} bytes'),
              SizedBox(height: 16),
              if (_deviceInfo != null)
                Text('Device Info:\n'
                    'Brand: ${_deviceInfo!.brand}\n'
                    'Model: ${_deviceInfo!.model}\n'
                    'System Version: ${_deviceInfo!.systemVersion}'),
            ],
          ),
        ),
      ),
    );
  }
}

4. 运行应用

将上述代码添加到你的 Flutter 项目中,然后运行应用。你应该能看到设备电池状态、内存信息和设备信息的展示。

注意事项

  • 确保在 AndroidManifest.xml 和 Info.plist 文件中添加了必要的权限(如果有)。
  • system_status 插件的 API 可能会随着版本更新而变化,请查阅最新的文档以获取最新信息。

这个示例展示了如何使用 system_status 插件来获取系统状态信息,并根据这些信息更新 UI。你可以根据需要进一步扩展和自定义这个示例。

回到顶部