wifi_signal_strength_indicator 1.0.8 copy "wifi_signal_strength_indicator: ^1.0.8" to clipboard
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),
        ],
      ),
    );
  }
}
3
likes
160
points
339
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

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on wifi_signal_strength_indicator

Packages that implement wifi_signal_strength_indicator