device_info_sdk 1.0.0 copy "device_info_sdk: ^1.0.0" to clipboard
device_info_sdk: ^1.0.0 copied to clipboard

A comprehensive Flutter SDK for retrieving detailed device information including hardware specs, battery status, display metrics, and platform-specific data on Android and iOS.

example/lib/main.dart

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Device Info SDK Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: DeviceInfoDemo(),
    );
  }
}

class DeviceInfoDemo extends StatefulWidget {
  @override
  _DeviceInfoDemoState createState() => _DeviceInfoDemoState();
}

class _DeviceInfoDemoState extends State<DeviceInfoDemo> {
  DeviceInfo? _deviceInfo;
  bool _isLoading = true;
  String? _error;

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

  Future<void> _loadDeviceInfo() async {
    try {
      setState(() {
        _isLoading = true;
        _error = null;
      });

      final sdk = DeviceInfoSDK.instance;
      final deviceInfo = await sdk.getDeviceInfo();

      setState(() {
        _deviceInfo = deviceInfo;
        _isLoading = false;
      });
    } catch (e) {
      setState(() {
        _error = e.toString();
        _isLoading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Device Info SDK Demo'),
        backgroundColor: Colors.blue,
        foregroundColor: Colors.white,
        actions: [
          IconButton(
            icon: Icon(Icons.refresh),
            onPressed: _loadDeviceInfo,
          ),
        ],
      ),
      body: _buildBody(),
    );
  }

  Widget _buildBody() {
    if (_isLoading) {
      return Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            CircularProgressIndicator(),
            SizedBox(height: 16),
            Text('Loading device information...'),
          ],
        ),
      );
    }

    if (_error != null) {
      return Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Icon(Icons.error, size: 64, color: Colors.red),
            SizedBox(height: 16),
            Text('Error: $_error'),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _loadDeviceInfo,
              child: Text('Retry'),
            ),
          ],
        ),
      );
    }

    if (_deviceInfo == null) {
      return Center(child: Text('No device information available'));
    }

    return SingleChildScrollView(
      padding: EdgeInsets.all(16),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          _buildDeviceCard(),
          SizedBox(height: 16),
          _buildBatteryCard(),
          SizedBox(height: 16),
          _buildDisplayCard(),
          SizedBox(height: 16),
          _buildSystemCard(),
        ],
      ),
    );
  }

  Widget _buildDeviceCard() {
    return Card(
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              children: [
                Icon(_getDeviceIcon(), size: 24, color: Colors.blue),
                SizedBox(width: 8),
                Text(
                  'Device Information',
                  style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
                ),
              ],
            ),
            SizedBox(height: 16),
            _buildInfoRow('Platform', _deviceInfo!.platform),
            _buildInfoRow('Model', _deviceInfo!.model ?? 'Unknown'),
            _buildInfoRow(
                'Manufacturer', _deviceInfo!.manufacturer ?? 'Unknown'),
            _buildInfoRow('Brand', _deviceInfo!.brand ?? 'Unknown'),
            _buildInfoRow('Device Name', _deviceInfo!.deviceName ?? 'Unknown'),
            _buildInfoRow('OS Version', _deviceInfo!.osVersion ?? 'Unknown'),
            _buildInfoRow(
                'Architecture', _deviceInfo!.cpuArchitecture ?? 'Unknown'),
            _buildInfoRow(
                'Serial Number', _deviceInfo!.serialNumber ?? 'Not available'),
            _buildInfoRow('Is Rooted/Jailbroken',
                (_deviceInfo!.isRooted ?? false) ? 'Yes' : 'No'),
          ],
        ),
      ),
    );
  }

  Widget _buildBatteryCard() {
    final battery = _deviceInfo!.battery;
    if (battery == null) return SizedBox.shrink();

    return Card(
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              children: [
                Icon(Icons.battery_std, size: 24, color: Colors.green),
                SizedBox(width: 8),
                Text(
                  'Battery Information',
                  style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
                ),
              ],
            ),
            SizedBox(height: 16),
            _buildInfoRow('Level', '${battery.batteryLevel}%'),
            _buildInfoRow('Status', battery.batteryStatus),
            _buildInfoRow('Is Charging', battery.isCharging ? 'Yes' : 'No'),
            _buildInfoRow('Is Full', battery.isFull ? 'Yes' : 'No'),
            _buildInfoRow('Is Low', battery.isLow ? 'Yes' : 'No'),
            _buildInfoRow(
                'Power Save Mode', battery.isPowerSaveMode ? 'Yes' : 'No'),
            if (battery.batteryHealth != null)
              _buildInfoRow('Health', battery.batteryHealth!),
            if (battery.batteryTechnology != null)
              _buildInfoRow('Technology', battery.batteryTechnology!),
            if (battery.batteryTemperature != null)
              _buildInfoRow('Temperature', '${battery.batteryTemperature}°C'),
            if (battery.batteryVoltage != null)
              _buildInfoRow('Voltage', '${battery.batteryVoltage}V'),
          ],
        ),
      ),
    );
  }

  Widget _buildDisplayCard() {
    final display = _deviceInfo!.displayMetrics;
    if (display == null) return SizedBox.shrink();

    return Card(
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              children: [
                Icon(Icons.phone_android, size: 24, color: Colors.orange),
                SizedBox(width: 8),
                Text(
                  'Display Information',
                  style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
                ),
              ],
            ),
            SizedBox(height: 16),
            if (display.widthPx != null && display.heightPx != null)
              _buildInfoRow('Resolution',
                  '${display.widthPx!.toInt()} x ${display.heightPx!.toInt()} px'),
            if (display.density != null)
              _buildInfoRow('Density', '${display.density}'),
            if (display.densityDpi != null)
              _buildInfoRow('Density DPI', '${display.densityDpi}'),
            if (display.xDpi != null) _buildInfoRow('X DPI', '${display.xDpi}'),
            if (display.yDpi != null) _buildInfoRow('Y DPI', '${display.yDpi}'),
          ],
        ),
      ),
    );
  }

  Widget _buildSystemCard() {
    final platformSpecific = _deviceInfo!.platformSpecific;
    if (platformSpecific == null) return SizedBox.shrink();

    return Card(
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              children: [
                Icon(Icons.settings, size: 24, color: Colors.purple),
                SizedBox(width: 8),
                Text(
                  'System Information',
                  style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
                ),
              ],
            ),
            SizedBox(height: 16),
            if (_deviceInfo!.platform == 'Android')
              ..._buildAndroidSystemInfo(platformSpecific),
            if (_deviceInfo!.platform == 'iOS')
              ..._buildIOSSystemInfo(platformSpecific),
            SizedBox(height: 8),
            ElevatedButton(
              onPressed: () => _showFullPlatformData(platformSpecific),
              child: Text('View All Platform Data'),
            ),
          ],
        ),
      ),
    );
  }

  List<Widget> _buildAndroidSystemInfo(Map<String, dynamic> data) {
    final version = data['version'] as Map<String, dynamic>?;
    return [
      if (data['product'] != null) _buildInfoRow('Product', data['product']),
      if (data['board'] != null) _buildInfoRow('Board', data['board']),
      if (data['hardware'] != null) _buildInfoRow('Hardware', data['hardware']),
      if (version != null) ...[
        _buildInfoRow('SDK Level', '${version['sdkInt']}'),
        if (version['securityPatch'] != null)
          _buildInfoRow('Security Patch', version['securityPatch']),
      ],
    ];
  }

  List<Widget> _buildIOSSystemInfo(Map<String, dynamic> data) {
    final utsname = data['utsname'] as Map<String, dynamic>?;
    return [
      if (data['systemName'] != null)
        _buildInfoRow('System Name', data['systemName']),
      if (data['localizedModel'] != null)
        _buildInfoRow('Localized Model', data['localizedModel']),
      if (utsname != null) ...[
        if (utsname['machine'] != null)
          _buildInfoRow('Machine', utsname['machine']),
        if (utsname['nodename'] != null)
          _buildInfoRow('Node Name', utsname['nodename']),
      ],
    ];
  }

  Widget _buildInfoRow(String label, String value) {
    return Padding(
      padding: EdgeInsets.symmetric(vertical: 4),
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          SizedBox(
            width: 120,
            child: Text(
              '$label:',
              style: TextStyle(fontWeight: FontWeight.w500),
            ),
          ),
          Expanded(
            child: Text(
              value,
              style: TextStyle(color: Colors.grey[700]),
            ),
          ),
        ],
      ),
    );
  }

  IconData _getDeviceIcon() {
    switch (_deviceInfo!.platform.toLowerCase()) {
      case 'android':
        return Icons.android;
      case 'ios':
        return Icons.phone_iphone;
      default:
        return Icons.device_unknown;
    }
  }

  void _showFullPlatformData(Map<String, dynamic> data) {
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: Text('Full Platform Data'),
        content: Container(
          width: double.maxFinite,
          height: 400,
          child: SingleChildScrollView(
            child: Text(
              _formatJson(data),
              style: TextStyle(fontFamily: 'monospace', fontSize: 12),
            ),
          ),
        ),
        actions: [
          TextButton(
            onPressed: () => Navigator.pop(context),
            child: Text('Close'),
          ),
        ],
      ),
    );
  }

  String _formatJson(Map<String, dynamic> data) {
    final buffer = StringBuffer();
    data.forEach((key, value) {
      buffer.writeln('$key: ${_formatValue(value)}');
    });
    return buffer.toString();
  }

  String _formatValue(dynamic value) {
    if (value is Map) {
      return '{\n${value.entries.map((e) => '  ${e.key}: ${_formatValue(e.value)}').join('\n')}\n}';
    } else if (value is List) {
      return '[${value.join(', ')}]';
    } else {
      return value.toString();
    }
  }
}
0
likes
140
points
109
downloads

Publisher

unverified uploader

Weekly Downloads

A comprehensive Flutter SDK for retrieving detailed device information including hardware specs, battery status, display metrics, and platform-specific data on Android and iOS.

Repository (GitHub)
View/report issues

Topics

#device-info #hardware #battery #android #ios

Documentation

Documentation
API reference

License

MIT (license)

Dependencies

battery_plus, connectivity_plus, device_info_plus, flutter, package_info_plus

More

Packages that depend on device_info_sdk