Flutter 连接错误回调
Posted
技术标签:
【中文标题】Flutter 连接错误回调【英文标题】:Flutter connectivity false callback 【发布时间】:2021-06-10 19:11:24 【问题描述】:我正在使用连接包来跟踪用户连接更改。这个想法是在 ConnectivityResult 为无(又名 wifi 和移动设备已断开连接)时弹出连接丢失的警告页面。但相反,我得到了这些结果: 如果 wifi 已连接并且您断开它,则 50% 的时间会弹出警告。 如果您在移动设备上并将其关闭,则连接返回该用户仍在 ConnectivityResult.mobile 而不是 ConnectivityResult.none。
尝试通过 ping google 进行双重检查,但即使这样也没有我预期的那么顺利。
我的代码: 我用函数创建了单独的文件:
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);
这导致有时警告页面弹出两次的问题,因为我相信以前的侦听器没有停止,但我可以弄清楚如何解决它。问题是为什么连接包在移动设备上返回错误回调。我在虚拟 Android API 23 和三星 S9+ 上进行了测试,两者的结果相同。
【问题讨论】:
我刚刚运行了连接包示例代码,在那里我得到了同样的故事 - 当与移动网络断开连接时,它仍然说我有移动网络状态。一旦我打开和关闭 wifi,它就可以正常工作,这与移动 newtork 不同。诡异的。这是一个包错误吗? 【参考方案1】:我将我的应用提供给几个早期测试人员,结果对他们来说一切都很好,即使他们中的一些人也拥有三星设备。看起来连接包完全没有问题,一些三星手机只是表现得很奇怪,因为它们不应该这样做。看起来整个社区中总会有一只害群之马,可悲的是我和我是这个有问题的设备的开发者。
尚未找到适合我设备的修复程序,但看起来该软件包对于市场上的大多数设备来说都是安全的。
手机型号,奇怪的是:SM-G965F。
【讨论】:
以上是关于Flutter 连接错误回调的主要内容,如果未能解决你的问题,请参考以下文章
Flutter 应用程序错误将尝试连接 Firebase 和 Auth
Flutter:如何使用 Firebase PhoneNumberAuth 修复丢失与设备的连接错误
Flutter - Socket.Connect() - SocketException:操作系统错误:连接超时