gpt4 book ai didi

android - 如何始终检查抖动中的互联网连接

转载 作者:行者123 更新时间:2023-12-01 21:26:52 26 4
gpt4 key购买 nike

我有一个依赖互联网才能工作的android应用程序。我需要找到一种方法来一直检查互联网是否存在以查看应用程序..否则,当没有互联网时,我应该查看一个没有互联网连接的小部件。
我已经尝试了connectivity 软件包,但是它没有按预期工作,因为它仅检查开关(wifi -mobile data)是打开还是关闭,而不是真正的互联网。
我认为向网站发送获取请求并分析响应状态代码对我来说是个好主意。所以这是我尝试的:
检查连接类

class CheckConnectionService {
Future<bool> checkConnection() async {
int theCode = 0;
Client client = Client();
try {
await client.get('http://www.google.com').then((value) {
theCode = value.statusCode;
});
}catch(e){
print(e);
return false;
}finally{
client.close();
}
if (theCode == 200){
return true;
}
return false;
}
}
然后在我的 main.dart 中,我试图一直使用此检查,这是我的代码:

class MyApp extends StatefulWidget {
// This widget is the root of your application.
@override
_MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
bool internetExists = true;

Stream checkIfOnline() async* {
await CheckConnectionService().checkConnection().then((check) {
print(check);
if (check){
internetExists = true;
setState(() {});
} else {
internetExists = false;
setState(() {});
}
});
}
@override
Widget build(BuildContext context) {
checkIfOnline();
if (!internetExists){
return MaterialApp(
title: 'G-Attend',
home: NoInternet(),
);
} else{
return MaterialApp(
theme: ThemeData(
fontFamily: 'Anton',
primaryColor: Hexcolor('#691b99'),
primaryColorLight: Hexcolor('#9b4dcb'),
primaryColorDark: Hexcolor('#37006a'),
secondaryHeaderColor: Hexcolor('#60C0D5'),
accentColor: Colors.deepOrange,
),
initialRoute: '/splash',
routes: {
'/splash': (context) => SplashScreen(),
'/login': (context) => Login(),
'/index': (context) => Index(),
'/settings': (context) => Settings(),
'/requests': (context) => Requests(),
'/add_request': (context) => AddRequest(),
'/request_comments': (context) => RequestComments(),
},
);
}
}
}
即使没有真正的互联网连接,也总是显示互联网应该工作的部分。

最佳答案

要检查互联网连接,可以使用 data_connection_checker 软件包:

bool hasConnection = false;

@override
void initState() {
super.initState();

DataConnectionChecker().onStatusChange.listen((status) {
setState(() {
switch(status){
case DataConnectionStatus.connected:
hasConnection = true;
break;
case DataConnectionStatus.disconnected:
hasConnection = false;
break;
}
});
});
}
我通常会去 External Libraries> data_connection_checker-version然后在dart文件中,将DEFAULT_INTERNAL更改为1,以便每1秒钟进行一次验证:
static const Duration DEFAULT_INTERVAL = const Duration(seconds: 1);

关于android - 如何始终检查抖动中的互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63340534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com