wifi_signal_strength_indicator 1.0.8
wifi_signal_strength_indicator: ^1.0.8 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.
example/lib/main.dart
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:wifi_signal_strength_indicator/wifi_signal_strength_indicator.dart';
void main() {
// Enable logging for debugging
WifiSignalStrength.setLoggingEnabled(true);
WifiSignalStrength.setLogLevel(LogLevel.debug);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'WiFi Signal Strength Example',
theme: ThemeData(
primarySwatch: Colors.blue,
useMaterial3: true,
),
home: const WifiSignalDemo(),
);
}
}
class WifiSignalDemo extends StatefulWidget {
const WifiSignalDemo({super.key});
@override
State<WifiSignalDemo> createState() => _WifiSignalDemoState();
}
class _WifiSignalDemoState extends State<WifiSignalDemo> {
int? _rssi;
WifiSignalInfo? _wifiInfo;
NetworkSpeedInfo? _networkSpeed;
bool _isLoading = false;
StreamSubscription<WifiSignalInfo?>? _wifiInfoSubscription;
StreamSubscription<NetworkSpeedInfo?>? _networkSpeedSubscription;
@override
void initState() {
super.initState();
_loadWifiInfo();
}
@override
void dispose() {
_wifiInfoSubscription?.cancel();
_networkSpeedSubscription?.cancel();
super.dispose();
}
Future<void> _loadWifiInfo() async {
setState(() => _isLoading = true);
try {
final isConnected = await WifiSignalStrength.isWifiConnected();
if (!isConnected) {
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('WiFi is not connected')),
);
}
return;
}
final info = await WifiSignalStrength.getWifiSignalInfo();
final rssi = await WifiSignalStrength.getSignalStrength();
setState(() {
_wifiInfo = info;
_rssi = rssi;
_isLoading = false;
});
} catch (e) {
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error: $e')),
);
}
setState(() => _isLoading = false);
}
}
void _startWifiInfoStream() {
_wifiInfoSubscription?.cancel();
_wifiInfoSubscription = WifiSignalStrength.streamWifiInfo(
interval: const Duration(seconds: 2),
).listen((info) {
setState(() {
_wifiInfo = info;
_rssi = info?.dbm;
});
});
}
void _startNetworkSpeedStream() {
_networkSpeedSubscription?.cancel();
_networkSpeedSubscription = WifiSignalStrength.streamNetworkSpeed(
interval: const Duration(seconds: 1),
).listen((speed) {
setState(() {
_networkSpeed = speed;
});
});
}
void _stopStreams() {
_wifiInfoSubscription?.cancel();
_networkSpeedSubscription?.cancel();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('WiFi Signal Strength Demo'),
),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Signal Indicator
Card(
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
const Text(
'Signal Indicator',
style:
TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
const SizedBox(height: 16),
if (_rssi != null) ...[
WifiSignalStrengthIndicator(
rssi: _rssi!,
style: WifiSignalStyle.bars,
size: 40,
animate: true,
),
const SizedBox(height: 16),
WifiSignalStrengthIndicator(
rssi: _rssi!,
style: WifiSignalStyle.sectors,
size: 40,
animate: true,
),
const SizedBox(height: 16),
WifiSignalStrengthIndicator(
rssi: _rssi!,
style: WifiSignalStyle.bars,
size: 40,
colorScheme: WifiSignalColorScheme.blue,
animate: true,
),
] else
const Text('No signal data'),
],
),
),
),
const SizedBox(height: 16),
// WiFi Info
Card(
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'WiFi Information',
style:
TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
const SizedBox(height: 16),
if (_wifiInfo != null) ...[
_buildInfoRow('Signal Strength', '${_wifiInfo!.dbm} dBm'),
_buildInfoRow('Frequency', '${_wifiInfo!.frequency} MHz'),
_buildInfoRow('SSID', _wifiInfo!.ssid ?? 'Unknown'),
_buildInfoRow('BSSID', _wifiInfo!.bssid ?? 'Unknown'),
_buildInfoRow('IP Address', _wifiInfo!.ip ?? 'Unknown'),
] else
const Text('No WiFi info available'),
],
),
),
),
const SizedBox(height: 16),
// Network Speed
Card(
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'Network Speed',
style:
TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
const SizedBox(height: 16),
if (_networkSpeed != null) ...[
_buildInfoRow('Download',
'${_networkSpeed!.downloadSpeedMbps?.toStringAsFixed(2)} Mbps'),
_buildInfoRow('Upload',
'${_networkSpeed!.uploadSpeedMbps?.toStringAsFixed(2)} Mbps'),
] else
const Text('No speed data'),
],
),
),
),
const SizedBox(height: 16),
// Buttons
Wrap(
spacing: 8,
runSpacing: 8,
children: [
ElevatedButton(
onPressed: _isLoading ? null : _loadWifiInfo,
child: const Text('Refresh'),
),
ElevatedButton(
onPressed: _startWifiInfoStream,
child: const Text('Start WiFi Stream'),
),
ElevatedButton(
onPressed: _startNetworkSpeedStream,
child: const Text('Start Speed Stream'),
),
ElevatedButton(
onPressed: _stopStreams,
child: const Text('Stop Streams'),
),
],
),
],
),
),
);
}
Widget _buildInfoRow(String label, String value) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 4),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(label, style: const TextStyle(fontWeight: FontWeight.w500)),
Text(value),
],
),
);
}
}