Flutter连接错误回调



Im使用连接包来跟踪用户的连接更改。这个想法是当ConnectivityResult为none(即wifi和移动设备断开连接(时,弹出一个连接丢失的警告页面。但我得到了以下结果:如果连接了wifi并断开连接,50%的时间会弹出警告。如果您在移动设备上并将其关闭,则连接将返回用户仍在ConnectivityResult.mobile而非ConnectivityResult.none.

试着对谷歌进行双重检查,但即使这样也没有我预期的那么顺利。

我的代码:我创建了具有以下功能的独立文件:

void trackNetworkStatus(BuildContext ctx) {
//check in case state is just opened
pingGoogle(ctx);
//add network listener
Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
print("Network changed to $result");
//if user lost connection
if (result == ConnectivityResult.none) {
openNoInternetScreen(ctx);
}else{
//if user has connection, doublecheck
//mobile network is tricky on android
pingGoogle(ctx);
}
});
}
Future<void> pingGoogle(BuildContext ctx) async {
try {
//ping internet page
final result = await InternetAddress.lookup('google.com');
//if ping is successful
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
print('connected');
}else{
print('not connected');
openNoInternetScreen(ctx);
}
} on SocketException catch (_) {
print('not connected');
openNoInternetScreen(ctx);
}
}
void openNoInternetScreen(BuildContext ctx) {
Navigator.push(
ctx,
MaterialPageRoute(builder: (context) => noInternetPage()),
);
}

因为我在每个应用程序上都这样调用它们:

@override
void initState() {
super.initState();
//listen to netwoek changes
trackNetworkStatus(context);
}

这就导致了有时会弹出两次警告页面的问题,因为我相信,上一个侦听器没有被阻止,但我可以找到解决方法。问题是为什么连接包在移动设备上返回错误回调。我在虚拟安卓API 23和三星S9+上进行了测试,结果相同。

我把我的应用程序交给了几位早期测试人员,结果对他们来说一切都很好,即使他们中的一些人也拥有三星设备。看起来连接包一点问题都没有,三星的一些手机只是表现得很奇怪。看起来整个社区总是会有害群之马,遗憾的是,我和我是这个bug设备的开发者。

Havent找到了我的设备的修复程序,但看起来对于市场上的大多数设备来说,这个包是安全的。

手机型号,这是很奇怪的:SM-G965F。

最新更新