在Flutter应用程序上连续检查互联网断开连接

nik*_*ike 4 connectivity dart flutter

我正在Flutter上创建一个移动应用程序,并调用在Node.js上创建的REST API,以便始终连接和查询我的Oracle DB。

到目前为止,我已经使用连通性0.3.2以便在异步调用或登录操作之前检查网络连通性。像下面的例子:

    checkConnectivity(context) async{

  String connectionStatus;
  StreamSubscription<ConnectivityResult> _connectivitySubscription;
  final Connectivity _connectivity = new Connectivity();
  try {
    connectionStatus = (await _connectivity.checkConnectivity()).toString();
    _connectivity.onConnectivityChanged.listen((ConnectivityResult result) {
      connectionStatus = result.toString();
      //   print(connectionStatus);
    });
  } on PlatformException catch (e) {
    print(e.toString());
    connectionStatus = 'Failed to get connectivity.';
  }
  if(connectionStatus == "ConnectivityResult.none"){
    components.alertPopup(context, "No Internet Connection available" , "Please check your internet connection and try again");}

}
Run Code Online (Sandbox Code Playgroud)

我想问一问,是否有任何可能的方法可以在用户使用应用程序的每时每刻持续检查Internet断开连接(即使他只是在读取数据而根本不进行API调用)。

为了例如通过SnackBar通知用户他离线。

Ale*_*uer 5

您已经编写了代码以执行所需的操作。您可以轻松地将其包装在页面StateInheritedWidget其他管理类中。

final Connectivity _connectivity;
final StreamSubscription<ConnectivityResult> _subscription;

ConstructorForWhateverClassThisIs() {
    _connectivity = new Connectivity();
    _subscription = _connectivity.onConnectivityChanged.listen(onConnectivityChange);
}

void onConnectivityChange(ConnectivityResult result) {
    // TODO: Show snackbar, etc if no connectivity
}

void dispose() {
    // Always remember to cancel your subscriptions when you're done.
    subscription.cancel();
}
Run Code Online (Sandbox Code Playgroud)

根据文档onConnectivityChanged每次更改时,都会使用新结果更新,这意味着您可以监听更改,而无需手动查询。

文档摘录:

您还可以通过订阅连接插件公开的流来监听网络状态更改