linfeng hai 1 ano
pai
achega
cdd8f356f8
Modificáronse 3 ficheiros con 45 adicións e 1 borrados
  1. 36 1
      lib/main.dart
  2. 8 0
      pubspec.lock
  3. 1 0
      pubspec.yaml

+ 36 - 1
lib/main.dart

@@ -1,5 +1,6 @@
 import 'dart:convert';
 
+import 'package:dart_ping/dart_ping.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:smartledz_wifi_test/plugin/wifi_plugin.dart';
@@ -65,6 +66,8 @@ class _WifiListState extends State<WifiList> {
 
   final List<WifiModel> _wifiList = []; // 扫描的wifi列表
   final List<String> _selectWifiList = []; // 已选择的wifi的bssid标识列表
+  void Function()? _connectCallback; // 连接成功回调
+  void Function()? _disconnectCallback; // 断开连接回调
 
   @override
   void initState() {
@@ -75,6 +78,7 @@ class _WifiListState extends State<WifiList> {
       Map jsonArr = jsonDecode(dataStr);
       debugPrint("收到通知事件 ---> $jsonArr");
       switch(jsonArr["cmd"]){
+
         case "scanResult": // 扫描
           setState(() {
             for (var element in _wifiList) { // 已存在则跳过
@@ -98,6 +102,15 @@ class _WifiListState extends State<WifiList> {
             });
           });
           break;
+
+        case "connected": // 连接成功
+          _connectCallback?.call();
+          break;
+
+        case "disconnect": // 断开连接
+          debugPrint("断开连接回调    _____> ");
+          _disconnectCallback?.call();
+          break;
       }
     });
 
@@ -150,8 +163,30 @@ class _WifiListState extends State<WifiList> {
 
     WifiModel wifiModel = _wifiList[wifiIndex];
 
-    setState(()=>_wifiList[wifiIndex].result="正在测试");
+    setState(()=>_wifiList[wifiIndex].result="正在连接");
     debugPrint("开始连接wifi  ssid --> ${wifiModel.ssid}   bssid --> ${wifiModel.bssid}");
+    _connectCallback = (){
+      debugPrint("wifi  --->  连接成功");
+      setState(()=>_wifiList[wifiIndex].result="正在测试");
+      final ping = Ping('192.168.16.254', count: 3);
+      int? ttl;
+      ping.stream.listen((event) {
+        if(event.response?.ttl != null){
+          ttl = event.response!.ttl;
+        }
+      });
+      Future.delayed(const Duration(seconds: 3), (){
+        if(ttl != null){
+          setState(()=>_wifiList[wifiIndex].result="测试通过");
+          _disconnectCallback = (){ // 断开成功的回调
+            eachTestWifiList(isSelect, index+1); // 开始测试下一个设备
+          };
+          WiFiPlugin.disconnect();
+        }else{
+          setState(()=>_wifiList[wifiIndex].result="未通过");
+        }
+      });
+    };
     WiFiPlugin.connect(wifiModel.ssid, wifiModel.bssid, "12345678");
   }
 

+ 8 - 0
pubspec.lock

@@ -49,6 +49,14 @@ packages:
       url: "https://pub.flutter-io.cn"
     source: hosted
     version: "1.0.5"
+  dart_ping:
+    dependency: "direct main"
+    description:
+      name: dart_ping
+      sha256: "91ee37e5bf5316caca5bd6f7b6016e73cd861b6a4b99565a2fd89b1d65003e1a"
+      url: "https://pub.flutter-io.cn"
+    source: hosted
+    version: "8.0.1"
   fake_async:
     dependency: transitive
     description:

+ 1 - 0
pubspec.yaml

@@ -36,6 +36,7 @@ dependencies:
   # Use with the CupertinoIcons class for iOS style icons.
   cupertino_icons: ^1.0.2
   flutter_screenutil: ^5.7.0
+  dart_ping: ^8.0.1
 
 dev_dependencies:
   flutter_test: