首页 > 解决方案 > 如何在全球范围内检查互联网连接并显示无连接屏幕

问题描述

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

文件main.dart代码:

StreamProvider<ConnectivityResult>(
    create: (context) =>
        InternetConnectionService().connectionStatusController.stream,
    child: MaterialApp(
.....

在每个屏幕上,我都会像这样检查互联网连接:

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();
}

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

标签: flutterdartflutter-dependenciesconnectivity

解决方案


在您的 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;
            }
        );
    }
);

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


推荐阅读