如何检查全局互联网连接并显示无连接屏幕

And*_*ter 2 connectivity dart flutter flutter-dependencies

我在项目中使用连接包来检查互联网连接。

文件main.dart代码:

StreamProvider<ConnectivityResult>(
    create: (context) =>
        InternetConnectionService().connectionStatusController.stream,
    child: MaterialApp(
.....
Run Code Online (Sandbox Code Playgroud)

在每个屏幕上我检查互联网连接,如下所示:

bool hasConnection;

void checkConnectivity(context) async {
  var connectivityResult = Provider.of<ConnectivityResult>(context);
  if (connectivityResult == ConnectivityResult.none ||
      connectivityResult == null) {
    setState(() {
      hasConnection = false;
    });
  } else {
    setState(() {
      hasConnection = true;
    });
  }
}

Widget build(BuildContext context) {
  checkConnectivity(context);
  return hasConnection == true 
    ? Scaffold() 
    : NoInternetScreen();
}
Run Code Online (Sandbox Code Playgroud)

如何从根或一个小部件全局检查连接,而不是在每个屏幕上检查连接,并且不显示连接屏幕?

Afr*_*yal 6

在您的 MaterialApp 小部件中,有一个构建器。您可以使用构建器将路径包装在任何小部件中。尝试这样做:

MaterialApp(
    ...
    builder: (context, child) {
        return StreamBuilder<ConnectivityResult>(
            stream: InternetConnectionService().connectionStatusController.stream,
            builder: (context, snapshot) {
                final conenctivityResult = snapshot.data;
                if (connectivityResult == ConnectivityResult.none || connectivityResult == null) return NoInternetScreen();

                return child;
            }
        );
    }
);
Run Code Online (Sandbox Code Playgroud)

现在您不必在其他文件中添加任何互联网逻辑。您可以简单地编写排除它们的构建方法。