我正在创建一个项目,其中我的 Arduino Nano IoT 33 需要连接到互联网(这确实至关重要),因此我使用 flutter_blue_plus 发送在 flutter 中创建的应用程序中收集的所有数据,通过蓝牙将其发送到 Arduino。问题是,在收集数据(涉及 SSID 和密码)时,没有任何库可以真正检查用户输入的密码是否正确(我已经尝试过几个库,例如 wifi_IoT)。它们都使用凭据进行身份验证,导致应用程序失去互联网连接,如下图所示:
这是我使用的代码:
//Try to connect using WiFiForIoTPlugin with findAndConnect
bool connectionSuccessful = await WiFiForIoTPlugin.findAndConnect(
ssid,
password: password,
withInternet: false,
);
print("Connection result: $connectionSuccessful");
if (!connectionSuccessful) {
_showErrorMessage("Could not connect to the Wi-Fi network.");
return; // Stop the flow if the connection failed
}
// Verify if we are connected to the desired SSID
final connectedSSID = await WiFiForIoTPlugin.getSSID();
if (connectedSSID != ssid) {
_showErrorMessage("Connection to the expected SSID was not completed. Please check the password.");
return; // Stop the flow if the SSID does not match
}
// If everything is successful, navigate to the next screen
Get.to(() => AEMETAPIScreen(
user: widget.user,
password: widget.password,
localidad: widget.localidad,
wifi: ssid,
wifiPassword: password,
));
} catch (e) {
_showErrorMessage("Error while attempting to connect: $e");
}
当我使用 withInternet: true
即使用户输入的密码错误,也会从网络日志返回此代码。
状态:0
还有布尔变量connectionSuccesful,也遵循一个模式,第一次执行该函数(不依赖于根据SSID输入的密码是否正确)返回false,然后再次单击返回true,并导航到下一个屏幕。
所以基本上,即使密码不正确,它也始终会导航。
我还使用了“connect()”而不是“findAndConnect()”函数,但仍然做同样的事情。
我什至尝试用一种较低抽象的语言来实现相同的想法:使用 Kotlin。但即使这样,我也会收到相同的弹出窗口和相同的通知,并且应用程序再次失去连接(这也很重要,因为我稍后在应用程序上使用 flutter MQTT 库)。
我尝试过的其他库似乎执行相同的过程(显示弹出窗口、访问下一页、失去 Wi-Fi 连接,使得用户必须手动重新启动它并导航到下一个屏幕,即使密码不正确)。
我真的想避免绕过引入的密码并发送用户在参数中写入的任何内容的想法。
我建议将 SSID 和密码作为参数发送给 Arduino,然后尝试使用 Arduino 的 WiFi 库连接到 WiFi。 如果建立连接,您可以从 Arduino 代码返回成功值,然后继续在您的应用程序上进行身份验证。 否则,您可以在 Arduino 的 WiFi 连接尝试中使用超时,以将失败值返回到您的应用程序。