[英]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.