Flutter设备信息获取插件device_info_noid的使用

Flutter设备信息获取插件device_info_noid的使用

Deprecation Notice(弃用通知)

该插件已被替换为Flutter Community Plus Plugins版本,即device_info_plus。未来不再对该插件进行更新,建议所有用户迁移到Plus版本。

重要修复(如安全事件)将在2021年底之前继续提供支持,之后此包将被标记为废弃。


获取当前设备信息

从Flutter应用程序中获取当前设备信息。

使用方法

导入package:device_info/device_info.dart,实例化DeviceInfoPlugin并使用Android和iOS的getter来获取平台特定的设备信息。

示例代码:

import 'package:device_info_noid/device_info_noid.dart';

DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
print('Running on ${androidInfo.model}');  // 输出例如:"Moto G (4)"

IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
print('Running on ${iosInfo.utsname.machine}');  // 输出例如:"iPod7,1"

您可以在pub页面上找到API文档的链接。


入门指南

对于如何开始使用Flutter,请查阅我们的在线文档

有关编辑插件代码的帮助,请查看文档


完整示例代码

以下是一个完整的示例,展示如何使用device_info_noid插件来获取设备信息并在Flutter应用中显示。

示例代码文件路径: example/lib/main.dart

// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// ignore_for_file: public_member_api_docs

import 'dart:async';

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:device_info_noid/device_info_noid.dart';

void main() {
  // 捕获运行时异常
  runZonedGuarded(() {
    runApp(MyApp());
  }, (dynamic error, dynamic stack) {
    print(error);
    print(stack);
  });
}

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

class _MyAppState extends State<MyApp> {
  // 初始化设备信息插件
  static final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
  Map<String, dynamic> _deviceData = {};

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化设备信息
    initPlatformState();
  }

  // 异步初始化设备信息
  Future<void> initPlatformState() async {
    Map<String, dynamic> deviceData = {};

    try {
      // 根据平台获取设备信息
      if (Platform.isAndroid) {
        deviceData = _readAndroidBuildData(await deviceInfoPlugin.androidInfo);
      } else if (Platform.isIOS) {
        deviceData = _readIosDeviceInfo(await deviceInfoPlugin.iosInfo);
      }
    } on PlatformException {
      // 如果获取失败,设置默认错误信息
      deviceData = <String, dynamic>{
        'Error:': 'Failed to get platform version.',
      };
    }

    // 确保组件未被卸载的情况下更新UI
    if (!mounted) return;

    setState(() {
      _deviceData = deviceData;
    });
  }

  // 解析Android设备信息
  Map<String, dynamic> _readAndroidBuildData(AndroidDeviceInfo build) {
    return <String, dynamic>{
      '版本安全补丁': build.version.securityPatch,
      'SDK版本号': build.version.sdkInt,
      '系统版本': build.version.release,
      '预览SDK版本号': build.version.previewSdkInt,
      '增量版本号': build.version.incremental,
      '版本代号': build.version.codename,
      '基础操作系统': build.version.baseOS,
      '主板': build.board,
      '引导加载程序': build.bootloader,
      '品牌': build.brand,
      '设备名称': build.device,
      '显示名称': build.display,
      '指纹': build.fingerprint,
      '硬件': build.hardware,
      '主机': build.host,
      'ID': build.id,
      '制造商': build.manufacturer,
      '型号': build.model,
      '产品': build.product,
      '支持的32位ABIs': build.supported32BitAbis,
      '支持的64位ABIs': build.supported64BitAbis,
      '支持的ABIs': build.supportedAbis,
      '标签': build.tags,
      '类型': build.type,
      '是否物理设备': build.isPhysicalDevice,
      // 'Android ID': build.androidId,
      '系统功能': build.systemFeatures,
    };
  }

  // 解析iOS设备信息
  Map<String, dynamic> _readIosDeviceInfo(IosDeviceInfo data) {
    return <String, dynamic>{
      '设备名称': data.name,
      '系统名称': data.systemName,
      '系统版本': data.systemVersion,
      '模型': data.model,
      '本地化模型': data.localizedModel,
      '供应商标识符': data.identifierForVendor,
      '是否物理设备': data.isPhysicalDevice,
      'utsname.sysname:': data.utsname.sysname,
      'utsname.nodename:': data.utsname.nodename,
      'utsname.release:': data.utsname.release,
      'utsname.version:': data.utsname.version,
      'utsname.machine:': data.utsname.machine,
    };
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text(
            Platform.isAndroid ? 'Android 设备信息' : 'iOS 设备信息',
          ),
        ),
        body: ListView(
          children: _deviceData.keys.map((String property) {
            return Row(
              children: <Widget>[
                Container(
                  padding: const EdgeInsets.all(10.0),
                  child: Text(
                    property,
                    style: const TextStyle(
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ),
                Expanded(
                  child: Container(
                    padding: const EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 10.0),
                    child: Text(
                      '${_deviceData[property]}',
                      maxLines: 10,
                      overflow: TextOverflow.ellipsis,
                    ),
                  ),
                ),
              ],
            );
          }).toList(),
        ),
      ),
    );
  }
}

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

1 回复

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


device_info_noid 是一个 Flutter 插件,用于获取设备的基本信息。它提供了一种简单的方式来访问设备的详细信息,如设备型号、操作系统版本、制造商等。这个插件是 device_info 插件的无 ID 版本,意味着它不会收集设备的唯一标识符(如 IMEI、MAC 地址等),因此在隐私保护方面更为友好。

安装

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

dependencies:
  flutter:
    sdk: flutter
  device_info_noid: ^1.0.0  # 请检查最新版本

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

基本用法

以下是如何使用 device_info_noid 插件获取设备信息的基本示例:

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

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

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

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

class _DeviceInfoScreenState extends State<DeviceInfoScreen> {
  Map<String, dynamic> _deviceData = <String, dynamic>{};

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

  Future<void> _getDeviceInfo() async {
    DeviceInfoNoid deviceInfo = DeviceInfoNoid();
    Map<String, dynamic> deviceData = <String, dynamic>{};

    try {
      if (Theme.of(context).platform == TargetPlatform.android) {
        deviceData = deviceInfo.androidInfo;
      } else if (Theme.of(context).platform == TargetPlatform.iOS) {
        deviceData = deviceInfo.iosInfo;
      } else if (Theme.of(context).platform == TargetPlatform.linux) {
        deviceData = deviceInfo.linuxInfo;
      } else if (Theme.of(context).platform == TargetPlatform.macOS) {
        deviceData = deviceInfo.macOSInfo;
      } else if (Theme.of(context).platform == TargetPlatform.windows) {
        deviceData = deviceInfo.windowsInfo;
      }
    } catch (e) {
      print('Failed to get device info: $e');
    }

    if (!mounted) return;

    setState(() {
      _deviceData = deviceData;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Device Info'),
      ),
      body: ListView(
        children: _deviceData.keys.map((String key) {
          return ListTile(
            title: Text(key),
            subtitle: Text(_deviceData[key].toString()),
          );
        }).toList(),
      ),
    );
  }
}
回到顶部