| // Copyright 2017 The Chromium 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/device_info.dart'; |
| |
| void main() { |
| runZoned(() { |
| runApp(MyApp()); |
| }, onError: (dynamic error, dynamic stack) { |
| print(error); |
| print(stack); |
| }); |
| } |
| |
| class MyApp extends StatefulWidget { |
| @override |
| _MyAppState createState() => _MyAppState(); |
| } |
| |
| class _MyAppState extends State<MyApp> { |
| static final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); |
| Map<String, dynamic> _deviceData = <String, dynamic>{}; |
| |
| @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.' |
| }; |
| } |
| |
| if (!mounted) return; |
| |
| setState(() { |
| _deviceData = deviceData; |
| }); |
| } |
| |
| Map<String, dynamic> _readAndroidBuildData(AndroidDeviceInfo build) { |
| return <String, dynamic>{ |
| 'version.securityPatch': build.version.securityPatch, |
| 'version.sdkInt': build.version.sdkInt, |
| 'version.release': build.version.release, |
| 'version.previewSdkInt': build.version.previewSdkInt, |
| 'version.incremental': build.version.incremental, |
| 'version.codename': build.version.codename, |
| 'version.baseOS': build.version.baseOS, |
| 'board': build.board, |
| 'bootloader': build.bootloader, |
| 'brand': build.brand, |
| 'device': build.device, |
| 'display': build.display, |
| 'fingerprint': build.fingerprint, |
| 'hardware': build.hardware, |
| 'host': build.host, |
| 'id': build.id, |
| 'manufacturer': build.manufacturer, |
| 'model': build.model, |
| 'product': build.product, |
| 'supported32BitAbis': build.supported32BitAbis, |
| 'supported64BitAbis': build.supported64BitAbis, |
| 'supportedAbis': build.supportedAbis, |
| 'tags': build.tags, |
| 'type': build.type, |
| 'isPhysicalDevice': build.isPhysicalDevice, |
| 'androidId': build.androidId, |
| 'systemFeatures': build.systemFeatures, |
| }; |
| } |
| |
| Map<String, dynamic> _readIosDeviceInfo(IosDeviceInfo data) { |
| return <String, dynamic>{ |
| 'name': data.name, |
| 'systemName': data.systemName, |
| 'systemVersion': data.systemVersion, |
| 'model': data.model, |
| 'localizedModel': data.localizedModel, |
| 'identifierForVendor': data.identifierForVendor, |
| 'isPhysicalDevice': 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 |
| Widget build(BuildContext context) { |
| return MaterialApp( |
| home: Scaffold( |
| appBar: AppBar( |
| title: Text( |
| Platform.isAndroid ? 'Android Device Info' : 'iOS Device Info'), |
| ), |
| 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(), |
| ), |
| ), |
| ); |
| } |
| } |