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
更多关于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(),
),
);
}
}

