flutter如何获取wifi列表
在Flutter中如何获取当前可用的WiFi列表?我尝试了一些插件但效果不理想,有些无法获取完整信息。请问有没有稳定可靠的方法或推荐使用的插件?最好能支持Android和iOS平台,并获取到SSID、信号强度等详细信息。
2 回复
在Flutter中,使用 wifi_scan 插件获取WiFi列表。首先添加依赖,然后请求位置权限,最后调用 getScannedResults() 获取扫描结果。示例代码:
List<WiFiAccessPoint> networks = await WiFiScan.instance.getScannedResults();
更多关于flutter如何获取wifi列表的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中获取WiFi列表需要使用平台通道(Platform Channels)调用原生代码,因为Flutter本身没有直接访问WiFi信息的API。以下是实现步骤:
1. 添加权限(Android)
在 android/app/src/main/AndroidManifest.xml 中添加权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
注意:Android 10+ 需要位置权限才能获取WiFi列表。
2. 创建平台通道方法
在Flutter中调用原生代码:
Flutter端代码:
import 'package:flutter/services.dart';
class WifiList {
static const platform = MethodChannel('wifi_list');
static Future<List<dynamic>> getWifiList() async {
try {
final List<dynamic> result = await platform.invokeMethod('getWifiList');
return result;
} on PlatformException catch (e) {
print("Failed to get WiFi list: '${e.message}'");
return [];
}
}
}
Android端代码(Java):
在 MainActivity.java 中添加:
import android.content.Context;
import android.net.wifi.WifiManager;
import android.net.wifi.ScanResult;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
public class MainActivity extends FlutterActivity {
private static final String CHANNEL = "wifi_list";
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler(
(call, result) -> {
if (call.method.equals("getWifiList")) {
List<Map<String, String>> wifiList = getWifiList();
result.success(wifiList);
} else {
result.notImplemented();
}
}
);
}
private List<Map<String, String>> getWifiList() {
List<Map<String, String>> wifiList = new ArrayList<>();
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager != null && wifiManager.startScan()) {
List<ScanResult> results = wifiManager.getScanResults();
for (ScanResult scanResult : results) {
Map<String, String> wifiInfo = new HashMap<>();
wifiInfo.put("ssid", scanResult.SSID);
wifiInfo.put("bssid", scanResult.BSSID);
wifiInfo.put("level", String.valueOf(scanResult.level));
wifiList.add(wifiInfo);
}
}
return wifiList;
}
}
3. 使用示例
// 在Flutter页面中使用
List<dynamic> wifiList = await WifiList.getWifiList();
for (var wifi in wifiList) {
print('SSID: ${wifi['ssid']}, Signal: ${wifi['level']}dBm');
}
注意事项:
- iOS限制:iOS无法直接获取WiFi列表,需要特定的企业证书或使用NEHotspotConfiguration管理已知网络
- 权限处理:需要动态请求位置权限
- 性能:扫描可能需要几秒钟时间
建议使用第三方插件如 wifi_scan 或 wifi_info_flutter 来简化实现过程。

