繁体   English   中英

Flutter 连接错误回调

[英]Flutter connectivity false callback

我使用连接 package 来跟踪用户连接更改。 这个想法是在 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);
  }

这会导致有时警告页面会弹出两次的问题,因为我相信之前的侦听器尚未停止,但我可以弄清楚如何解决它。 问题是为什么连接 package 在移动设备上返回错误回调。 我在虚拟 Android API 23 和三星 S9+ 上进行了测试,两者的结果相同。

我把我的应用程序给了几个早期的测试人员,结果对他们来说一切都很好,即使他们中的一些人也拥有三星设备。 看起来连接 package 完全没有问题,一些三星手机只是表现得奇怪,因为它们不应该。 看起来整个社区中总会有一只害群之马,可悲的是我和我是这个有问题的设备的开发人员。

Havent 找到了我的设备的修复程序,但对于市场上的大多数设备,package 对 go 来说似乎是安全的。

电话 model,表现得很奇怪:SM-G965F。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM