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

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

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

device_info_null_safety 是一个用于在 Android 设备上获取设备信息的 Flutter 插件。该插件基于 EasyDeviceInfo 实现,不处理权限问题,因此需要结合 permission_handler 来管理权限。

权限声明

AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-feature android:name="android.hardware.fingerprint" android:required="true" />

导入插件

首先,在你的 Dart 文件中导入 device_info_null_safety 插件:

import 'package:device_info_null_safety/device_info_null_safety.dart';

示例 Demo

下面是一个完整的示例 Demo,展示如何使用 device_info_null_safety 获取各种设备信息,并以 UI 形式展示出来。

主程序文件 (main.dart)

import 'package:device_info_null_safety/device_info_null_safety.dart';
import 'package:device_info_null_safety/memory_info_enum.dart';
import 'package:flutter/material.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final DeviceInfoNullSafety _deviceInfoNullSafety = DeviceInfoNullSafety();

  ListView getWidget(AsyncSnapshot<Map<String, dynamic>> snapshot) {
    return ListView(
      children: snapshot.data!.entries
          .map((val) => ListTile(
                title: Text(val.key.toString().toUpperCase()),
                subtitle: Text(val.value.toString().toUpperCase()),
              ))
          .toList(),
    );
  }

  Widget getBuilder(Future<Map<String, dynamic>> future) {
    return FutureBuilder(
      future: future,
      builder: (context, AsyncSnapshot<Map<String, dynamic>> snapshot) {
        if (snapshot.hasData) {
          return getWidget(snapshot);
        }
        return const Center(
          child: CircularProgressIndicator(),
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: DefaultTabController(
        length: 11,
        animationDuration: const Duration(milliseconds: 500),
        child: Scaffold(
          appBar: AppBar(
            title: const Text('Device Info Null Safety'),
            bottom: const TabBar(
              isScrollable: true,
              tabs: [
                Tab(child: Text('Battery Info')),
                Tab(child: Text('Abi Info')),
                Tab(child: Text('Sensor Info')),
                Tab(child: Text('Memory Info')),
                Tab(child: Text('Finger Print Info')),
                Tab(child: Text('System Info')),
                Tab(child: Text('Config Info')),
                Tab(child: Text('Display Info')),
                Tab(child: Text('Nfc Info')),
                Tab(child: Text('Network Info')),
                Tab(child: Text('Location Info')),
              ],
            ),
          ),
          body: TabBarView(
            children: [
              getBuilder(_deviceInfoNullSafety.batteryInfo),
              getBuilder(_deviceInfoNullSafety.abiInfo),
              FutureBuilder(
                future: _deviceInfoNullSafety.sensorInfo,
                builder: (context,
                    AsyncSnapshot<List<Map<String, dynamic>>> snapshot) {
                  if (snapshot.hasData) {
                    return ListView(
                      children: snapshot.data!
                          .map((val) => ExpansionTile(
                                initiallyExpanded: true,
                                title: Text(val['name']),
                                children: val.entries
                                    .map((e) => ListTile(
                                          leading: Text(e.key.toUpperCase()),
                                          trailing: Text(
                                              e.value.toString().toUpperCase()),
                                        ))
                                    .toList(),
                              ))
                          .toList(),
                    );
                  }
                  return const Center(
                    child: CircularProgressIndicator(),
                  );
                },
              ),
              getBuilder(_deviceInfoNullSafety.memoryInfo(
                  memoryInfoUnit: MemoryInfoUnit.gb)),
              getBuilder(_deviceInfoNullSafety.fingerPrintInfo),
              getBuilder(_deviceInfoNullSafety.systemInfo),
              getBuilder(_deviceInfoNullSafety.configInfo),
              getBuilder(_deviceInfoNullSafety.displayInfo),
              getBuilder(_deviceInfoNullSafety.nfcInfo),
              getBuilder(_deviceInfoNullSafety.networkInfo),
              getBuilder(_deviceInfoNullSafety.locationInfo),
            ],
          ),
        ),
      ),
    );
  }
}

功能说明

  • 电池信息:调用 _deviceInfoNullSafety.batteryInfo 获取电池信息。
  • ABI 信息:调用 _deviceInfoNullSafety.abiInfo 获取 ABI 信息。
  • 传感器信息:调用 _deviceInfoNullSafety.sensorInfo 获取传感器信息。
  • 内存信息:调用 _deviceInfoNullSafety.memoryInfo(memoryInfoUnit: MemoryInfoUnit.gb) 获取内存信息(单位为 GB)。
  • 指纹信息:调用 _deviceInfoNullSafety.fingerPrintInfo 获取指纹信息。
  • 系统信息:调用 _deviceInfoNullSafety.systemInfo 获取系统信息。
  • 配置信息:调用 _deviceInfoNullSafety.configInfo 获取配置信息。
  • 显示信息:调用 _deviceInfoNullSafety.displayInfo 获取显示信息。
  • NFC 信息:调用 _deviceInfoNullSafety.nfcInfo 获取 NFC 信息。
  • 网络信息:调用 _deviceInfoNullSafety.networkInfo 获取网络信息。
  • 位置信息:调用 _deviceInfoNullSafety.locationInfo 获取位置信息。

通过上述代码和功能说明,你可以轻松地在 Flutter 应用中集成并使用 device_info_null_safety 插件来获取设备的各种信息。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用device_info_null_safety插件来获取设备信息的代码示例。这个插件允许你获取设备的详细信息,如品牌、型号、操作系统版本等。

1. 添加依赖

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

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

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

2. 导入插件并获取设备信息

在你的Dart文件中(例如main.dart),导入device_info_null_safety插件并编写代码来获取设备信息。

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

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

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

class DeviceInfoScreen extends StatefulWidget {
  @override
  _DeviceInfoScreenState createState() => _DeviceInfoScreenState();
}

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

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

  Future<void> _getDeviceInfo() async {
    DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();

    // 获取Android设备信息
    if (Platform.isAndroid) {
      AndroidDeviceInfo androidDeviceInfo = await deviceInfoPlugin.androidInfo;
      setState(() {
        _deviceData = <String, dynamic>{
          'Brand': androidDeviceInfo.brand,
          'Model': androidDeviceInfo.model,
          'Android Version': androidDeviceInfo.version.release,
          'SDK Version': androidDeviceInfo.version.sdkInt,
          'Board': androidDeviceInfo.board,
          'Bootloader': androidDeviceInfo.bootloader,
          'Brand': androidDeviceInfo.brand,
          'CPU ABI': androidDeviceInfo.cpuAbi,
          'CPU ABI 2': androidDeviceInfo.cpuAbi2,
          'Device': androidDeviceInfo.device,
          'Display': androidDeviceInfo.display,
          'Fingerprint': androidDeviceInfo.fingerprint,
          'Hardware': androidDeviceInfo.hardware,
          'Host': androidDeviceInfo.host,
          'Id': androidDeviceInfo.id,
          'Manufacturer': androidDeviceInfo.manufacturer,
          'Product': androidDeviceInfo.product,
          'Serial': androidDeviceInfo.serial,
          'Tags': androidDeviceInfo.tags,
          'Type': androidDeviceInfo.type,
          'Is Physical Device': androidDeviceInfo.isPhysicalDevice,
        };
      });
    }

    // 获取iOS设备信息
    if (Platform.isIOS) {
      IosDeviceInfo iosDeviceInfo = await deviceInfoPlugin.iosInfo;
      setState(() {
        _deviceData = <String, dynamic>{
          'Name': iosDeviceInfo.name,
          'System Name': iosDeviceInfo.systemName,
          'System Version': iosDeviceInfo.systemVersion,
          'Model': iosDeviceInfo.model,
          'Localized Model': iosDeviceInfo.localizedModel,
          'Identifier For Vendor': iosDeviceInfo.identifierForVendor,
          'Is Physical Device': iosDeviceInfo.isPhysicalDevice,
        };
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Device Information'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: _deviceData.isEmpty
            ? CircularProgressIndicator()
            : ListView(
                children: _deviceData.entries.map((entry) {
                  return ListTile(
                    title: Text('${entry.key}: ${entry.value}'),
                  );
                }).toList(),
              ),
      ),
    );
  }
}

3. 运行应用

保存所有文件并运行你的Flutter应用。你应该会看到一个显示设备详细信息的列表。

这个示例展示了如何使用device_info_null_safety插件获取并显示Android和iOS设备的详细信息。根据需求,你可以进一步定制和扩展这些信息。

回到顶部