Flutter系统信息获取插件os_release的使用

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

Flutter系统信息获取插件os_release的使用

os_release

读取Linux发行版的os-release文件并使其易于访问。

如果你的Dart或Flutter应用需要知道已安装的Linux发行版名称、版本,或者是否基于主要发行版(如Arch或Debian)——这个包就是为你准备的。

注意:此包处于预发布阶段。请谨慎使用,并请在GitHub问题页面报告任何发现的错误或潜在问题。

兼容性

此包中的检测代码仅适用于基于Linux的操作系统。然而,你可以在跨平台的Dart或Flutter项目中使用该包和OsRelease类,前提是仅在基于Linux的操作系统上运行检测方法和其他OsRelease静态方法。

你可以使用dart:io包中的Platform.isLinux字段来防止在不支持的操作系统上调用检测代码。

为了更好地说明兼容性,请查看以下表格:

平台 OsRelease.detect() 支持 OsRelease.readFile()OsRelease.readFileSync() 支持 OsRelease.contains(String string) 支持
Linux
macOS
Windows
Windows Subsystem For Linux
Android
iOS
Web

注意:对于在Windows Subsystem For Linux下运行的Dart或Flutter项目,无需进行代码更改,dart:io提供的Platform.isLinux字段将返回true

开始使用

这将依赖于你已经安装了Dart SDK或Flutter SDK(Flutter SDK会下载并安装Dart SDK)。

如果你想在你的Dart项目中添加此包,请输入:

dart pub add os_release

如果你想在你的Flutter项目中添加此包,请输入:

flutter pub add os_release

使用方法

为了保持兼容性,如果你只想在Linux上执行检测,可以这样做:

import 'dart:io';
import 'package:os_release/os_release.dart';

// 创建一个可为null的实例,以便如果检测代码不在Linux上运行则不会成为问题。
OsRelease? osRelInfo;

if (Platform.isLinux) {
  /// 这是一个静态方法,这是你应该用来检测os-release信息的方式。
  osRelInfo = await OsRelease.detect();
  
  // 在这里执行你想要对检测结果进行的操作
}

// 你也可以在这里使用osRelInfo,但在if语句中使用它可能更容易,因为那里的osRelInfo可能不是null。

另外,如果你以其他方式已经检测到os-release信息,你仍然可以使用OsRelease类作为模型来存储检测到的数据。

额外信息

OsRelease类中声明的所有字段都是最终的,即使其中一些字段是可选的。使用构造函数初始化类以设置你希望的值 - 之后无法更改它们。

OsRelease类是final

OsRelease类是final - 你不能扩展它或继承自它。如果你想要向其添加新功能,请考虑为现有类贡献更改。

为什么类是final?

这个类(以及这个包)旨在提供与不同Linux发行版兼容的功能,这意味着要围绕os-release本身标准化。os-release规范中大多数可选字段也是可选的(因此被标记为可空),除非os-release提供了默认值 - 在这种情况下提供了值,因此不应为可空。

为什么字段是final?

直接修改检测结果,特别是以删除检测数据的方式,对任何人都没有帮助 - 如果你想修改结果,请创建一个新的变量来实现。

这也是最佳实践,因为你不能有意义地更改数据,除非你正在检测数据 - 这就是为什么存在static OsRelease detect()方法的原因。

贡献于包

建议和错误报告

如果你有任何建议或错误报告,可以将其提交到GitHub仓库的问题页面

安全漏洞

如果你希望报告潜在的安全漏洞,请通过电子邮件联系Dart Pub上的发布者信息中列出的联系邮箱,邮件主题为"os_release Potential Security Vulnerability",并在邮件正文中提供有关潜在漏洞的信息。

提交拉取请求

如果你希望添加功能或更改部分代码,请按以下步骤操作:

  1. fork 仓库
  2. 从主分支创建一个简短描述你想要进行的更改的新分支
  3. 测试更改,确保它不会破坏现有代码,并且在当前支持的平台上正常工作 - 目前,只需在Linux发行版(通过虚拟机或原生,无论你通常在哪里使用Linux)或通过Windows Subsystem for Linux进行测试即可。
  4. 提交一个包含你所做的更改及其原因的描述的拉取请求(特别是在更改不立即明显的情况下)
  5. 如果我在几周内没有评论或审查你的拉取请求,请在拉取请求中@我 @alastairlundy

如果你有多个不相互依赖的功能或更改,每个单独的更改或功能都请遵循这些步骤。

你可能会觉得这样做重复或令人疲惫,这是可以理解的,但这有助于确保: A) 单独的更改根据其优点接受或拒绝 B) 提交给合并的代码经过仔细审查和审核,以避免或减轻针对开源代码和基础设施的攻击 - 我们不希望看到xz utils后门攻击的重演。 C) 代码安全地添加到项目中,而不会因为接受代码而导致包出现问题。

如果你接受这些原则并遵循这些步骤,并且你的代码确实做出了有用的更改,我可能会同意合并它。

示例代码

import 'dart:io';
import 'package:os_release/os_release.dart';

Future<void> main() async {
  if (Platform.isLinux) {
    var osRel = await OsRelease.detect();

    print("我们正在运行: ${osRel.name},这是一个Linux发行版。这真是太酷了!");
  }
}

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

1 回复

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


当然,os_release 是一个 Flutter 插件,用于获取设备的操作系统信息。以下是如何在 Flutter 应用中使用 os_release 插件来获取系统信息的代码案例。

首先,确保你已经在 pubspec.yaml 文件中添加了 os_release 插件的依赖:

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

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

接下来,在你的 Dart 文件中,你可以这样使用 os_release 插件来获取并显示系统信息:

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

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

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

class _MyAppState extends State<MyApp> {
  String? osName;
  String? osVersion;
  String? idLike;
  String? prettyName;

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

  Future<void> _getSystemInfo() async {
    try {
      OsRelease osRelease = await OsRelease.load();
      setState(() {
        osName = osRelease.name;
        osVersion = osRelease.version;
        idLike = osRelease.idLike;
        prettyName = osRelease.prettyName;
      });
    } catch (e) {
      print('Error fetching OS info: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('System Information'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text('OS Name: $osName'),
              SizedBox(height: 16),
              Text('OS Version: $osVersion'),
              SizedBox(height: 16),
              Text('ID Like: $idLike'),
              SizedBox(height: 16),
              Text('Pretty Name: $prettyName'),
            ],
          ),
        ),
      ),
    );
  }
}

代码说明:

  1. 依赖添加:在 pubspec.yaml 文件中添加 os_release 依赖。
  2. 导入插件:在 Dart 文件中导入 os_release 插件。
  3. 获取系统信息:在 initState 方法中调用 _getSystemInfo 方法,该方法异步获取系统信息并更新状态。
  4. 显示系统信息:在 build 方法中构建一个简单的 UI,显示获取到的系统信息。

注意事项:

  • 请确保替换 ^latest_versionos_release 插件的实际最新版本号。
  • 由于 os_release 插件可能依赖于平台特定的实现,因此在某些平台上可能无法获取所有字段的信息。

这个代码案例展示了如何使用 os_release 插件来获取并显示设备的操作系统信息。你可以根据需要进一步扩展和修改这个示例。

回到顶部