mm_device_info 0.0.1 copy "mm_device_info: ^0.0.1" to clipboard
mm_device_info: ^0.0.1 copied to clipboard

A production-ready Flutter plugin for retrieving comprehensive device, operating system, display, battery, storage, network, security, and application information across Android, iOS, Web, Windows, ma [...]

example/lib/main.dart

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

import 'package:mm_device_info/mm_device_info.dart';

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

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

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

class _MyAppState extends State<MyApp> {
  DeviceInfo? _deviceInfo;
  String? _error;
  final _mmDeviceInfoPlugin = MmDeviceInfo();

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

  Future<void> initPlatformState() async {
    setState(() {
      _deviceInfo = null;
      _error = null;
    });

    DeviceInfo? deviceInfo;
    String? error;
    try {
      deviceInfo = await _mmDeviceInfoPlugin.getDeviceInfo();
    } catch (e) {
      error = e.toString();
    }

    if (!mounted) return;

    setState(() {
      _deviceInfo = deviceInfo;
      _error = error;
    });
  }

  String _formatBytes(int bytes, int decimals) {
    if (bytes <= 0) return "0 B";
    const suffixes = ["B", "KB", "MB", "GB", "TB"];
    double size = bytes.toDouble();
    int unitIndex = 0;
    while (size >= 1024 && unitIndex < suffixes.length - 1) {
      size /= 1024;
      unitIndex++;
    }
    return "${size.toStringAsFixed(decimals)} ${suffixes[unitIndex]}";
  }

  String _formatUptime(int milliseconds) {
    var duration = Duration(milliseconds: milliseconds);
    var days = duration.inDays;
    var hours = duration.inHours.remainder(24);
    var minutes = duration.inMinutes.remainder(60);
    var seconds = duration.inSeconds.remainder(60);

    List<String> parts = [];
    if (days > 0) parts.add("${days}d");
    if (hours > 0) parts.add("${hours}h");
    if (minutes > 0) parts.add("${minutes}m");
    parts.add("${seconds}s");

    return parts.join(" ");
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(useMaterial3: true, colorSchemeSeed: Colors.blue),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('mm_device_info Example'),
          actions: [
            IconButton(
              icon: const Icon(Icons.refresh),
              onPressed: initPlatformState,
            ),
          ],
        ),
        body: _buildBody(),
      ),
    );
  }

  Widget _buildBody() {
    if (_error != null) {
      return Center(
        child: Padding(
          padding: const EdgeInsets.all(24.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const Icon(Icons.error_outline, color: Colors.red, size: 64),
              const SizedBox(height: 16),
              const Text(
                'Failed to load device info',
                style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
              ),
              const SizedBox(height: 8),
              Text(
                _error!,
                textAlign: TextAlign.center,
                style: const TextStyle(color: Colors.grey),
              ),
              const SizedBox(height: 24),
              ElevatedButton(
                onPressed: initPlatformState,
                child: const Text('Retry'),
              ),
            ],
          ),
        ),
      );
    }

    if (_deviceInfo == null) {
      return const Center(child: CircularProgressIndicator());
    }

    return ListView(
      padding: const EdgeInsets.all(16),
      children: [
        _sectionHeader('Security Information'),
        _infoTile('Is Emulator', _deviceInfo!.isEmulator ? "Yes" : "No"),
        _infoTile('Is Rooted', _deviceInfo!.isRooted ? "Yes" : "No"),
        _infoTile(
          'Dev Mode',
          _deviceInfo!.isDeveloperModeEnabled ? "Enabled" : "Disabled",
        ),
        _infoTile(
          'ADB Status',
          _deviceInfo!.isAdbEnabled ? "Enabled" : "Disabled",
        ),

        const Divider(),
        _sectionHeader('System Diagnostics'),
        _infoTile('Uptime', _formatUptime(_deviceInfo!.systemUptime)),
        _infoTile('Kernel', _deviceInfo!.kernelVersion),

        const Divider(),
        _sectionHeader('Sensor Availability'),
        _sensorTile('Accelerometer', _deviceInfo!.hasAccelerometer),
        _sensorTile('Gyroscope', _deviceInfo!.hasGyroscope),
        _sensorTile('Magnetometer', _deviceInfo!.hasMagnetometer),
        _sensorTile('Proximity', _deviceInfo!.hasProximitySensor),
        _sensorTile('Light Sensor', _deviceInfo!.hasLightSensor),

        const Divider(),
        _sectionHeader('Application Information'),
        _infoTile('App Name', _deviceInfo!.appName),
        _infoTile('Package Name', _deviceInfo!.packageName),
        _infoTile('Version', _deviceInfo!.version),
        _infoTile('Build Number', _deviceInfo!.buildNumber),

        const Divider(),
        _sectionHeader('Basic Information'),
        _infoTile('Model', _deviceInfo!.model),
        _infoTile('Brand', _deviceInfo!.brand),
        _infoTile('Manufacturer', _deviceInfo!.manufacturer),
        _infoTile('Android Version', _deviceInfo!.androidVersion),
        _infoTile('SDK Version', _deviceInfo!.sdkVersion.toString()),

        const Divider(),
        _sectionHeader('Display Information'),
        _infoTile(
          'Resolution',
          '${_deviceInfo!.displayWidth} x ${_deviceInfo!.displayHeight} px',
        ),
        _infoTile('Density', _deviceInfo!.displayDensity.toStringAsFixed(2)),
        _infoTile('DPI (Bucket)', _deviceInfo!.displayDpi.toString()),
        _infoTile('Hardware XDPI', _deviceInfo!.displayXdpi.toStringAsFixed(2)),
        _infoTile('Hardware YDPI', _deviceInfo!.displayYdpi.toStringAsFixed(2)),
        _infoTile('Orientation', _deviceInfo!.displayOrientation),
        _infoTile(
          'Refresh Rate',
          '${_deviceInfo!.displayRefreshRate.toStringAsFixed(1)} Hz',
        ),

        const Divider(),
        _sectionHeader('Battery Information'),
        _infoTile('Level', '${_deviceInfo!.batteryLevel}%'),
        _infoTile('Status', _deviceInfo!.batteryStatus),
        _infoTile('Health', _deviceInfo!.batteryHealth),

        const Divider(),
        _sectionHeader('Storage & Memory'),
        _infoTile(
          'Total Storage',
          _formatBytes(_deviceInfo!.totalInternalStorage, 2),
        ),
        _infoTile(
          'Free Storage',
          _formatBytes(_deviceInfo!.freeInternalStorage, 2),
        ),
        _infoTile('Total RAM', _formatBytes(_deviceInfo!.totalRam, 2)),
        _infoTile('Available RAM', _formatBytes(_deviceInfo!.availableRam, 2)),

        const Divider(),
        _sectionHeader('Network Information'),
        _infoTile('Type', _deviceInfo!.networkType),
        _infoTile(
          'WiFi Connected',
          _deviceInfo!.isWifiConnected ? "Yes" : "No",
        ),
        _infoTile(
          'Mobile Data',
          _deviceInfo!.isMobileDataConnected ? "Yes" : "No",
        ),
        _infoTile('Operator', _deviceInfo!.networkOperator),
      ],
    );
  }

  Widget _sectionHeader(String title) {
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 8),
      child: Text(
        title,
        style: const TextStyle(
          fontSize: 18,
          fontWeight: FontWeight.bold,
          color: Colors.blue,
        ),
      ),
    );
  }

  Widget _infoTile(String title, String value) {
    return ListTile(
      title: Text(title),
      trailing: Text(
        value,
        style: const TextStyle(fontWeight: FontWeight.w500),
      ),
    );
  }

  Widget _sensorTile(String title, bool available) {
    return ListTile(
      title: Text(title),
      trailing: Icon(
        available ? Icons.check_circle : Icons.cancel,
        color: available ? Colors.green : Colors.red,
      ),
    );
  }
}
0
likes
110
points
9
downloads

Documentation

Documentation
API reference

Publisher

verified publishersivakarmegan.in

Weekly Downloads

A production-ready Flutter plugin for retrieving comprehensive device, operating system, display, battery, storage, network, security, and application information across Android, iOS, Web, Windows, macOS, and Linux.

Homepage
Repository (GitHub)
View/report issues

Topics

#flutter #device-info #plugin #android #ios

License

MIT (license)

Dependencies

flutter, flutter_web_plugins, plugin_platform_interface, web

More

Packages that depend on mm_device_info

Packages that implement mm_device_info