wifi_signal_strength_indicator 1.0.2 copy "wifi_signal_strength_indicator: ^1.0.2" to clipboard
wifi_signal_strength_indicator: ^1.0.2 copied to clipboard

A Flutter package to get WiFi signal strength indicator for iOS and Android platforms. Includes visual indicator widgets with bars and WiFi arc styles.

WiFi Signal Strength #

A Flutter package to get WiFi signal strength indicator for iOS and Android platforms.

Features #

  • ✅ Get WiFi signal strength in dBm
  • ✅ Get WiFi signal level (0-4 scale)
  • ✅ Check if WiFi is connected
  • ✅ Get WiFi SSID (network name)
  • Visual WiFi signal strength indicator widget
  • Two visual styles: Bars and Sectors
  • Custom RSSI input support
  • ✅ Works on both iOS and Android

Installation #

Add this to your package's pubspec.yaml file:

dependencies:
  wifi_signal_strength: ^1.0.0

Then run:

flutter pub get

Platform Setup #

Android #

Add the following permissions to your android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

Note: For Android 10 (API 29) and above, location permission is required to access WiFi information. Make sure to request location permissions at runtime.

iOS #

Add the following to your ios/Runner/Info.plist:

<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs location permission to access WiFi information</string>

Note: iOS requires location permissions to access WiFi SSID. For iOS 13+, additional entitlements may be required for full functionality.

Usage #

Basic Example #

import 'package:wifi_signal_strength/wifi_signal_strength.dart';

// Check if WiFi is connected
final isConnected = await WifiSignalStrength.isWifiConnected();
print('WiFi connected: $isConnected');

// Get signal strength in dBm
final signalStrength = await WifiSignalStrength.getSignalStrength();
if (signalStrength != null) {
  print('Signal strength: $signalStrength dBm');
}

// Get signal level (0-4)
final signalLevel = await WifiSignalStrength.getSignalLevel();
if (signalLevel != null) {
  print('Signal level: $signalLevel/4');
}

// Get WiFi SSID
final ssid = await WifiSignalStrength.getWifiSSID();
if (ssid != null) {
  print('Connected to: $ssid');
}

Signal Level Reference #

  • 4: Excellent signal (RSSI >= -50 dBm)
  • 3: Good signal (RSSI >= -60 dBm)
  • 2: Fair signal (RSSI >= -70 dBm)
  • 1: Weak signal (RSSI >= -80 dBm)
  • 0: No signal (RSSI < -80 dBm)

Visual Indicator Widget #

The package includes a ready-to-use widget for displaying WiFi signal strength visually:

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

// Using actual WiFi signal strength
WifiSignalStrengthIndicator(
  rssi: -55, // RSSI value from WifiSignalStrength.getSignalStrength()
  style: WifiSignalStyle.bars, // or WifiSignalStyle.sectors
  size: 100.0,
  showLevel: true,
)

// With custom RSSI value
WifiSignalStrengthIndicator(
  rssi: -65, // Your custom RSSI value
  style: WifiSignalStyle.sectors,
  size: 120.0,
  showLevel: true,
  excellentColor: Colors.green,
  goodColor: Colors.lightGreen,
  fairColor: Colors.orange,
  weakColor: Colors.deepOrange,
)

Complete Example with UI #

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

class WifiStatusWidget extends StatefulWidget {
  @override
  _WifiStatusWidgetState createState() => _WifiStatusWidgetState();
}

class _WifiStatusWidgetState extends State<WifiStatusWidget> {
  int? _signalStrength;
  WifiSignalStyle _style = WifiSignalStyle.bars;

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

  Future<void> _updateWifiStatus() async {
    final signalStrength = await WifiSignalStrength.getSignalStrength();
    setState(() {
      _signalStrength = signalStrength;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        WifiSignalStrengthIndicator(
          rssi: _signalStrength,
          style: _style,
          size: 120.0,
          showLevel: true,
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () => setState(() => _style = WifiSignalStyle.bars),
              child: Text('Bars'),
            ),
            SizedBox(width: 16),
            ElevatedButton(
              onPressed: () => setState(() => _style = WifiSignalStyle.sectors),
              child: Text('Sectors'),
            ),
          ],
        ),
        ElevatedButton(
          onPressed: _updateWifiStatus,
          child: Text('Refresh'),
        ),
      ],
    );
  }
}

API Reference #

WifiSignalStrength.getSignalStrength() #

Returns the current WiFi signal strength in dBm.

  • Returns: Future<int?> - Signal strength in dBm (typically -100 to 0), or null if WiFi is not connected
  • Example: final strength = await WifiSignalStrength.getSignalStrength();

WifiSignalStrength.getSignalLevel() #

Returns the WiFi signal strength level on a 0-4 scale.

  • Returns: Future<int?> - Signal level (0-4), or null if WiFi is not connected
  • Example: final level = await WifiSignalStrength.getSignalLevel();

WifiSignalStrength.isWifiConnected() #

Checks if WiFi is currently connected.

  • Returns: Future<bool> - true if WiFi is connected, false otherwise
  • Example: final isConnected = await WifiSignalStrength.isWifiConnected();

WifiSignalStrength.getWifiSSID() #

Gets the current WiFi SSID (network name).

  • Returns: Future<String?> - The SSID of the connected WiFi network, or null if not connected
  • Example: final ssid = await WifiSignalStrength.getWifiSSID();

Permissions #

Android #

  • ACCESS_WIFI_STATE - Required to read WiFi state
  • ACCESS_NETWORK_STATE - Required to check network connectivity
  • ACCESS_FINE_LOCATION - Required for Android 10+ to access WiFi info
  • ACCESS_COARSE_LOCATION - Required for Android 10+ to access WiFi info

iOS #

  • Location permissions are required to access WiFi SSID on iOS 12+
  • For iOS 13+, additional NetworkExtension entitlements may be needed for full functionality

Limitations #

iOS #

  • Getting actual RSSI values on iOS requires special entitlements and may not be available in all scenarios
  • WiFi SSID access requires location permissions and may be restricted on iOS 13+

Android #

  • Location permissions are required for Android 10 (API 29) and above
  • Some devices may have restrictions on accessing WiFi information

Contributing #

Contributions are welcome! Please feel free to submit a Pull Request.

License #

This project is licensed under the MIT License - see the LICENSE file for details.

Support #

If you encounter any issues or have questions, please file an issue on the GitHub repository.

4
likes
0
points
349
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package to get WiFi signal strength indicator for iOS and Android platforms. Includes visual indicator widgets with bars and WiFi arc styles.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on wifi_signal_strength_indicator

Packages that implement wifi_signal_strength_indicator