繁体   English   中英

flutter:运行时检查应用程序的互联网连接

[英]flutter: check app internet connection when it runs

我正在构建 flutter 应用程序,我想在用户进入应用程序时检查互联网连接,所以如果没有连接,它应该显示一个页面,声明“没有互联网连接,请再试一次..”我使用了下面的代码,但它没有工作,当我处于调试模式时,我关闭了 wifi 并且应用程序仍在运行,有没有办法做到这一点? 提前致谢

 main() async { // if your flutter > 1.7.8 : ensure flutter activated WidgetsFlutterBinding.ensureInitialized(); await translator.init( localeDefault: LocalizationDefaultType.device, languagesList: <String>['en', 'ar'], assetsDirectory: 'assets/langs/', apiKeyGoogle: '<Key>', // NOT YET TESTED ); runApp( LocalizedApp( child: Notification(), ), ); } class Notification extends StatefulWidget { @override _NotificationState createState() => _NotificationState(); } class _NotificationState extends State<Notification> { var subscription; var connectionStatus; @override void initState() { subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) { setState(() => connectionStatus = result ); }); checkInternetConnectivity(); // checkLoginStatus(); super.initState(); } checkInternetConnectivity() { if (connectionStatus == ConnectivityResult.none) { return Fluttertoast.showToast( msg: "Check your internet connection", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.TOP, timeInSecForIosWeb: 1, backgroundColor: Colors.red, textColor: Colors.white, fontSize: 16.0 ); } } @override dispose() { super.dispose(); subscription.cancel(); } // @override Widget build(BuildContext context) { return MultiProvider(

您正在改变connectionStatus每一个连接变化时的时间,这是罚款。 但是您还需要检查该connectionStatus是否有效。 换句话说,在每次连接更改后调用checkInternetConnectivity(); 方法。

subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {         
        setState(() => connectionStatus = result);
        checkInternetConnectivity();
});

如果您仅使用connectionStatus来显示 toast 消息,则无需为此重建小部件树(您正在通过调用setState方法进行此操作)。

此外,您可以在小部件树中使用 StreamBuilder 并根据连接状态构建相应的小部件。

示例代码:

//Put this line outside of the build method
final connectivity = Connectivity();

//Use this in the build method
StreamBuilder<ConnectivityResult>(
  builder: (BuildContext context, AsyncSnapshot<ConnectivityResult> snapshot) {
    if(!snapshot.hasData || snapshot.data != ConnectivityResult.none) { //Connectivity hasn't change or there is no problems with connection
      return Container( //Return widget when there is connection
        color: Colors.green,
      );
    }

    return Container(
      color: Colors.green,
    );
  },
  stream: Connectivity().onConnectivityChanged,
)

请注意,此代码未经测试,只是概念证明。

暂无
暂无

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

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