A cross-platform WiFi connectivity library for Dart that provides WiFi connection management, hotspot creation, and network interface control. This library is a port of the popular Rust wifi-rs library to Dart.
- Cross-platform support: macOS, Linux, and Windows
- WiFi connection management: Connect to and disconnect from WiFi networks
- Network scanning: Discover available WiFi networks
- Interface control: Turn WiFi on/off and get status information
- Platform-specific implementations: Optimized for each operating system
Add this to your pubspec.yaml:
dependencies:
wifi_desktop: ^0.2.4Then run:
dart pub getimport 'package:wifi_desktop/wifi_desktop.dart';
void main() async {
// Create a WiFi instance
final wifi = WiFi();
// Check if WiFi is enabled
final isEnabled = await wifi.isWifiEnabled();
print('WiFi Enabled: $isEnabled');
// Connect to a network
final connected = await wifi.connect('MyNetwork', 'MyPassword');
if (connected) {
print('Successfully connected!');
}
// Get available networks
final networks = await wifi.getAvailableNetworks();
print('Found ${networks.length} networks');
}// Use default configuration
final wifi = WiFi();
// Or specify a custom interface
final config = WifiConfig(interface: 'wlan0');
final wifi = WiFi(config);// Check if WiFi is enabled
final isEnabled = await wifi.isWifiEnabled();
// Get current WiFi status
final status = await wifi.getWifiStatus();
// Get current connection info
final connection = await wifi.getCurrentConnection();// Connect to a WiFi network
final connected = await wifi.connect('NetworkSSID', 'NetworkPassword');
if (connected) {
print('Connected successfully!');
print('Current connection: ${wifi.connection?.ssid}');
} else {
print('Failed to connect');
}// Disconnect from current network
final disconnected = await wifi.disconnect();
if (disconnected) {
print('Disconnected successfully');
} else {
print('Failed to disconnect');
}// Get all available networks
final networks = await WiFi.getAvailableNetworks();
for (final network in networks) {
print('SSID: ${network['ssid']}');
print('Security: ${network['security']}');
print('Signal Strength: ${network['signalStrength']} dBm');
print('Frequency: ${network['frequency']} MHz');
print('Channel: ${network['channel']}');
print('---');
}// Turn WiFi on/off
await wifi.turnOn();
await wifi.turnOff();
// Check if WiFi is enabled
final enabled = await wifi.isWifiEnabled();class WifiManager {
final WiFi _wifi;
WifiManager([WifiConfig? config]) : _wifi = WiFi(config);
Future<bool> connectToNetwork(String ssid, String password) async {
try {
return await _wifi.connect(ssid, password);
} catch (e) {
print('Connection error: $e');
return false;
}
}
Future<List<Map<String, dynamic>>> scanNetworks() async {
try {
return await WiFi.getAvailableNetworks();
} catch (e) {
print('Scan error: $e');
return [];
}
}
}
// Usage
final manager = WifiManager();
await manager.connectToNetwork('MyNetwork', 'MyPassword');try {
final connected = await wifi.connect('Network', 'Password');
if (connected) {
print('Connected successfully!');
}
} on WifiDisabledException {
print('WiFi is disabled. Please enable WiFi first.');
} on FailedToConnectException catch (e) {
print('Failed to connect: ${e.message}');
} on WifiException catch (e) {
print('WiFi error: ${e.message}');
} catch (e) {
print('Unexpected error: $e');
}- Uses
networksetupcommand-line tool - Default interface:
en0 - Supports WiFi connection, disconnection, and hotspot creation
- Uses
iwconfig,iwlist, andwpa_supplicant - Default interface:
wlan0 - Supports WiFi connection and disconnection
- Uses Windows Native WiFi API
- Default interface:
Wi-Fi - Supports WiFi connection and disconnection
class WifiConfig {
final String? interface;
const WifiConfig({this.interface});
}class WifiConnection {
final String ssid;
final int? signalStrength;
final String? security;
final int? frequency;
final int? channel;
}class WifiNetwork {
final String ssid;
final int signalStrength;
final String security;
final int frequency;
final int channel;
final bool isConnected;
}The library provides specific exception types for different error scenarios:
WifiException- Base exception classWifiDisabledException- WiFi interface is disabledWifiInterfaceFailedToOnException- Failed to turn on WiFiWifiIoException- IO error occurredAddNetworkProfileFailedException- Failed to add network profileFailedToConnectException- Failed to connect to networkFailedToDisconnectException- Failed to disconnect from network
flutter- Flutter frameworkffi- Foreign Function Interface for native code integrationpath- Path manipulation utilitiesprocess_run- Process execution utilities
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
This project is licensed under the MIT License - see the LICENSE file for details.
This library is a port of the excellent wifi-rs Rust library by Tochukwu Nkemdilim.
Check out the example/ directory for complete working examples of how to use the library.
If you encounter any issues or have questions, please:
- Check the existing issues on GitHub
- Create a new issue with a detailed description of the problem
- Include your platform (macOS/Linux/Windows) and Dart/Flutter version