wifi_signal_strength_indicator 1.0.2
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), ornullif 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), ornullif WiFi is not connected - Example:
final level = await WifiSignalStrength.getSignalLevel();
WifiSignalStrength.isWifiConnected() #
Checks if WiFi is currently connected.
- Returns:
Future<bool>-trueif WiFi is connected,falseotherwise - 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, ornullif not connected - Example:
final ssid = await WifiSignalStrength.getWifiSSID();
Permissions #
Android #
ACCESS_WIFI_STATE- Required to read WiFi stateACCESS_NETWORK_STATE- Required to check network connectivityACCESS_FINE_LOCATION- Required for Android 10+ to access WiFi infoACCESS_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.