device_root_jail_state_check 0.0.6 copy "device_root_jail_state_check: ^0.0.6" to clipboard
device_root_jail_state_check: ^0.0.6 copied to clipboard

A comprehensive Flutter package to detect device mode, developer mode, emulator, root/jailbreak status, network connection type, and real-time network speed.

example/lib/main.dart

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Device Root Jail State Check Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        useMaterial3: true,
      ),
      home: SecurityDashboard(),
    );
  }
}

class SecurityDashboard extends StatefulWidget {
  @override
  _SecurityDashboardState createState() => _SecurityDashboardState();
}

class _SecurityDashboardState extends State<SecurityDashboard> {
  final DeviceRootJailStateCheck _detector = DeviceRootJailStateCheck();
  DeviceInfo? _deviceInfo;
  List<String> _securityLogs = [];
  bool _isLoading = true;

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

  void _initializeSecurityCheck() async {
    try {
      // Get comprehensive device information
      DeviceInfo deviceInfo = await _detector.getDeviceInfo();

      // Start real-time monitoring
      _detector.getNetworkInfoStream().listen((networkInfo) {
        _addLog('🌐 Network changed: ${networkInfo.type}');
      });

      _detector.getNetworkSpeedStream().listen((speedInfo) {
        _addLog('⚡ Download: ${speedInfo.downloadSpeed.toStringAsFixed(2)} Mbps | Upload: ${speedInfo.uploadSpeed.toStringAsFixed(2)} Mbps');
      });

      setState(() {
        _deviceInfo = deviceInfo;
        _isLoading = false;
      });
    } catch (e) {
      _addLog('❌ Error initializing security check: $e');
      setState(() {
        _isLoading = false;
      });
    }
  }

  void _addLog(String message) {
    setState(() {
      _securityLogs.insert(0, '${DateTime.now().toString().substring(11, 19)}: $message');
      if (_securityLogs.length > 10) _securityLogs.removeLast();
    });
  }

  void _refreshSecurityCheck() async {
    setState(() {
      _isLoading = true;
    });

    try {
      DeviceInfo deviceInfo = await _detector.getDeviceInfo();
      setState(() {
        _deviceInfo = deviceInfo;
        _isLoading = false;
      });
      _addLog('🔄 Security check refreshed');
    } catch (e) {
      _addLog('❌ Error refreshing security check: $e');
      setState(() {
        _isLoading = false;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Security Dashboard'),
        backgroundColor: Colors.blueGrey[900],
        elevation: 0,
        actions: [
          IconButton(
            icon: Icon(Icons.refresh),
            onPressed: _refreshSecurityCheck,
            tooltip: 'Refresh Security Check',
          ),
        ],
      ),
      body: _isLoading
          ? Center(child: CircularProgressIndicator())
          : _buildSecurityDashboard(),
      floatingActionButton: FloatingActionButton(
        onPressed: _refreshSecurityCheck,
        child: Icon(Icons.security),
        tooltip: 'Run Security Check',
      ),
    );
  }

  Widget _buildSecurityDashboard() {
    return SingleChildScrollView(
      padding: EdgeInsets.all(16),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          _buildSecurityStatusCard(),
          SizedBox(height: 16),
          _buildDeviceInfoCard(),
          SizedBox(height: 16),
          _buildNetworkInfoCard(),
          SizedBox(height: 16),
          _buildSecurityLogsCard(),
        ],
      ),
    );
  }

  Widget _buildSecurityStatusCard() {
    Color statusColor = _deviceInfo!.securityStatus == SecurityStatus.normal
        ? Colors.green
        : Colors.orange;

    IconData statusIcon = _deviceInfo!.securityStatus == SecurityStatus.normal
        ? Icons.check_circle
        : Icons.warning;

    return Card(
      elevation: 4,
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              children: [
                Icon(Icons.security, color: statusColor),
                SizedBox(width: 8),
                Text(
                  'Security Status',
                  style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                ),
              ],
            ),
            SizedBox(height: 12),
            Container(
              padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
              decoration: BoxDecoration(
                color: statusColor.withOpacity(0.1),
                borderRadius: BorderRadius.circular(8),
                border: Border.all(color: statusColor),
              ),
              child: Row(
                children: [
                  Icon(statusIcon, color: statusColor),
                  SizedBox(width: 8),
                  Expanded(
                    child: Text(
                      _getSecurityStatusText(_deviceInfo!.securityStatus),
                      style: TextStyle(
                        fontSize: 16,
                        fontWeight: FontWeight.w500,
                        color: statusColor,
                      ),
                    ),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }

  Widget _buildDeviceInfoCard() {
    return Card(
      elevation: 4,
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              children: [
                Icon(Icons.phone_android, color: Colors.blue),
                SizedBox(width: 8),
                Text(
                  'Device Information',
                  style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                ),
              ],
            ),
            SizedBox(height: 12),
            _buildInfoRow('Platform', _deviceInfo!.platform),
            _buildInfoRow('Version', _deviceInfo!.platformVersion),
            _buildInfoRow('Model', _deviceInfo!.deviceModel),
            _buildInfoRow('Brand', _deviceInfo!.deviceBrand),
            _buildInfoRow('Device Mode', _deviceInfo!.deviceMode.name),
            _buildInfoRow('Emulator', _deviceInfo!.isEmulator ? 'Yes ⚠️' : 'No ✅'),
            _buildInfoRow('Developer Mode', _deviceInfo!.isDeveloperModeEnabled ? 'Yes ⚠️' : 'No ✅'),
          ],
        ),
      ),
    );
  }

  Widget _buildNetworkInfoCard() {
    return Card(
      elevation: 4,
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              children: [
                Icon(Icons.network_wifi, color: Colors.green),
                SizedBox(width: 8),
                Text(
                  'Network Information',
                  style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                ),
              ],
            ),
            SizedBox(height: 12),
            _buildInfoRow('Connection Type', _deviceInfo!.networkInfo.type.name.toUpperCase()),
            _buildInfoRow('Connected', _deviceInfo!.networkInfo.isConnected ? 'Yes ✅' : 'No ❌'),
            _buildInfoRow('SSID', _deviceInfo!.networkInfo.ssid.isEmpty ? 'Unknown' : _deviceInfo!.networkInfo.ssid),
            _buildInfoRow('Signal Strength', '${_deviceInfo!.networkInfo.signalStrength} dBm'),
            _buildInfoRow('Download Speed', '${_deviceInfo!.networkInfo.downloadSpeed.toStringAsFixed(2)} Mbps'),
            _buildInfoRow('Upload Speed', '${_deviceInfo!.networkInfo.uploadSpeed.toStringAsFixed(2)} Mbps'),
          ],
        ),
      ),
    );
  }

  Widget _buildSecurityLogsCard() {
    return Card(
      elevation: 4,
      child: Padding(
        padding: EdgeInsets.all(16),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              children: [
                Icon(Icons.list_alt, color: Colors.purple),
                SizedBox(width: 8),
                Text(
                  'Security Logs',
                  style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                ),
              ],
            ),
            SizedBox(height: 12),
            Container(
              height: 200,
              decoration: BoxDecoration(
                border: Border.all(color: Colors.grey[300]!),
                borderRadius: BorderRadius.circular(8),
                color: Colors.grey[50],
              ),
              child: _securityLogs.isEmpty
                  ? Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Icon(Icons.info, color: Colors.grey, size: 40),
                    SizedBox(height: 8),
                    Text(
                      'No security events yet',
                      style: TextStyle(color: Colors.grey),
                    ),
                  ],
                ),
              )
                  : ListView.builder(
                reverse: true,
                itemCount: _securityLogs.length,
                itemBuilder: (context, index) {
                  return Container(
                    decoration: BoxDecoration(
                      border: index < _securityLogs.length - 1
                          ? Border(bottom: BorderSide(color: Colors.grey[200]!))
                          : null,
                    ),
                    child: Padding(
                      padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
                      child: Text(
                        _securityLogs[index],
                        style: TextStyle(
                          fontFamily: 'Monospace',
                          fontSize: 12,
                          color: Colors.grey[700],
                        ),
                      ),
                    ),
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }

  Widget _buildInfoRow(String label, String value) {
    return Padding(
      padding: EdgeInsets.symmetric(vertical: 6),
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Expanded(
            flex: 2,
            child: Text(
              '$label:',
              style: TextStyle(
                fontWeight: FontWeight.w500,
                color: Colors.grey[700],
                fontSize: 14,
              ),
            ),
          ),
          Expanded(
            flex: 3,
            child: Text(
              value,
              style: TextStyle(
                fontWeight: FontWeight.w400,
                fontSize: 14,
              ),
            ),
          ),
        ],
      ),
    );
  }

  String _getSecurityStatusText(SecurityStatus status) {
    switch (status) {
      case SecurityStatus.normal:
        return '✅ Device is secure and not compromised';
      case SecurityStatus.rooted:
        return '⚠️ Android device is rooted - Security risk!';
      case SecurityStatus.jailbroken:
        return '⚠️ iOS device is jailbroken - Security risk!';
      case SecurityStatus.potentiallyCompromised:
        return '🚨 Device might be compromised';
      case SecurityStatus.unknown:
        return '❓ Unable to determine security status';
      default:
        return 'Unknown status';
    }
  }

  @override
  void dispose() {
    _detector.dispose();
    super.dispose();
  }
}
0
likes
0
points
25
downloads

Publisher

unverified uploader

Weekly Downloads

A comprehensive Flutter package to detect device mode, developer mode, emulator, root/jailbreak status, network connection type, and real-time network speed.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter

More

Packages that depend on device_root_jail_state_check

Packages that implement device_root_jail_state_check