【问题标题】:Is there a way to detect if flutter has access to internet?有没有办法检测颤振是否可以访问互联网?
【发布时间】:2020-09-26 06:51:05
【问题描述】:

我一直在寻找一种方法来检测我的 Flutter 应用是否可以访问互联网。我想使用它让应用程序选择将一些数据发送到 API(如果有互联网)或将其保存到本地数据库(如果没有互联网)。

我已经尝试了一些插件,但它们似乎都是检测网络状态而不是检查是否有互联网连接。

我试过只是简单地发送一个 ping 并以这种方式检查它,但是当我这样做时,似乎需要很长时间才能停止并返回 ping 失败。

我也在使用 DIO 库来访问 API,因此我也尝试通过该库检测它,但停止和返回也需要相当长的时间(大约 30 秒)。在这种情况下,我想我只是超时了,但这也不是我真正想要的。

有什么想法或更好的方法可以快速检测是否存在活动的互联网连接而不是网络状态?

【问题讨论】:

  • 你试过connectivity插件...?
  • 尝试将其发送到 API。如果失败,请将其保存在本地。任何其他策略都包括试图预测未来。
  • @srikanth7785 感谢您的提示。我已经尝试过连接,但我遇到的问题是,当我连接到 Wifi 但 Wifi 没有互联网连接时,它仍然告诉我它已连接。这是正常的,在插件的文档中它甚至这样声明:“请注意,在 Android 上,这并不能保证连接到 Internet。例如,该应用程序可能具有 wifi 访问权限,但它可能是 VPN 或酒店 WiFi,没有访问。”
  • @MarquisofLorne 好的,似乎是唯一的方法。打算试试看。谢谢!

标签: android flutter networking dio


【解决方案1】:

查看连接包 Connectivity Package

如果软件包不满足您的要求,那么也许您可以在后台尝试使用 http 连接到任何网站/API 并检查状态

【讨论】:

    【解决方案2】:

    对于在此处寻找类似解决方案的任何人,我认为我将使用它。

    Dio 库有一个 http 超时选项,它似乎工作得很好,我尝试使用 Future 超时,但没有考虑到是否能够建立 http 连接。

    这里是 Dio 文档中的一个示例

    Dio dio = new Dio(); // with default Options
    
    // Set default configs
    dio.options.connectTimeout = 5000; //5s
    dio.options.receiveTimeout = 3000;
    
    // or new Dio with a BaseOptions instance.
    BaseOptions options = new BaseOptions(
        connectTimeout: 5000,
        receiveTimeout: 3000,
    );
    Dio dio = new Dio(options);
    

    感谢您的帮助。希望我能以我想要的方式工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多