Flutter网络连接检测插件ac_inet_connectivity_checker的使用
Flutter网络连接检测插件ac_inet_connectivity_checker的使用
简介
这是一个简单的、可取消且无状态的互联网连接检测器:
- 可以测试单个或多个端点(配置并发性),
- 不依赖于任何协议(使用Dart的套接字连接),
- 可以取消,并支持全局和每个端点的超时,
- 保持简单。它是无状态的。
此插件不适用于Web上的Flutter(请参阅下方“Web上的Flutter互联网连接检测”部分以获取替代方案)。
如果您寻找的是有状态的互联网连接检测器,请查看以下包:
使用
测试单个端点
final checker = InetConnectivityChecker(
endpoint: InetEndpoint(host: 'google.com', port: 443),
// 可选超时。如果未指定,则将使用操作系统默认的连接超时(约120秒)。
timeout: const Duration(seconds: 10),
);
// 厌倦等待?
// checker.cancel();
final isConnected = await checker.cancelableOperation.value;
测试多个端点
final checker = InetConcurrentConnectivityChecker(
endpoints: [
InetEndpoint(host: '8.8.8.8', port: 53),
InetEndpoint(host: 'google.com', port: 443),
InetEndpoint(host: 'github.com', port: 443),
],
// 可选全局超时。
timeout: const Duration(seconds: 10),
// 可选每个端点的超时。如果未指定,则将使用操作系统默认的连接超时(约120秒)。
timeoutPerEndpoint: const Duration(seconds: 10),
// 可选定义最大并发数(默认为2)
maxConcurrency: 4,
);
final isConnected = await checker.cancelableOperation.value;
应用哪些端点?
如果您想测试互联网连接,那么最好使用不太可能宕机的端点。
该插件提供了所有IPv4和IPv6地址的根名称服务器列表。
请注意,您的应用程序很可能需要同时兼容IPv4-only和IPv6-only网络。我的建议是混合并随机化这两个列表,并使用并发连接检测器来测试互联网连接。
final endpoints = [
...kRootNameServersIpV4Endpoints,
...kRootNameServersIpV6Endpoints,
]..shuffle();
Web上的Flutter互联网连接检测
对于Web上的Flutter互联网连接检测,我推荐您使用connectivity_plus
插件:
import 'package:connectivity_plus/connectivity_plus.dart';
final result = await Connectivity().checkConnectivity();
if (result == ConnectivityResult.none) {
// 未连接到互联网
} else {
// 连接到互联网
}
Connectivity().onConnectivityChanged.listen((result) {
// 连接性变化时
});
或者使用ac_connectivity
包,它扩展了connectivity_plus
以在所有平台上实现互联网连接:
import 'package:ac_connectivity/ac_connectivity.dart';
final cancelableOperation = Connectivity().checkInetConnectivityState(
timeout: const Duration(seconds: 3),
);
final state = await cancelableOperation.value;
if (state == InetConnectivityState.disconnected) {
// 断开连接(与ConnectivityResult.none相同)
} else if (state == InetConnectivityState.connected) {
// 连接到没有互联网访问的网络。
} else if (state == InetConnectivityState.internet) {
// 连接到互联网。
}
Connectivity().listen((state) {
// 互联网连接状态变化时
});
示例代码
// ignore_for_file: avoid_print
import 'package:ac_inet_connectivity_checker/ac_inet_connectivity_checker.dart';
Future<void> main() async {
final checker = InetConnectivityChecker(
endpoint: const InetEndpoint(host: 'google.com', port: 80),
);
print(await checker.cancelableOperation.value);
}
更多关于Flutter网络连接检测插件ac_inet_connectivity_checker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络连接检测插件ac_inet_connectivity_checker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用ac_inet_connectivity_checker
插件来检测网络连接的示例代码。这个插件可以帮助你检测设备的网络连接状态,无论是WiFi还是移动数据。
步骤 1: 添加依赖
首先,你需要在pubspec.yaml
文件中添加ac_inet_connectivity_checker
的依赖:
dependencies:
flutter:
sdk: flutter
ac_inet_connectivity_checker: ^0.4.0 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
步骤 2: 导入插件
在你的Dart文件中导入插件:
import 'package:ac_inet_connectivity_checker/ac_inet_connectivity_checker.dart';
步骤 3: 使用插件检测网络连接
下面是一个完整的示例,展示如何检测网络连接并在UI中显示结果:
import 'package:flutter/material.dart';
import 'package:ac_inet_connectivity_checker/ac_inet_connectivity_checker.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _isConnected = false;
@override
void initState() {
super.initState();
_checkConnectivity();
}
Future<void> _checkConnectivity() async {
bool result;
try {
result = await InternetConnectivityChecker().hasConnection;
} catch (e) {
print("Error checking connectivity: $e");
result = false;
}
if (!mounted) return;
setState(() {
_isConnected = result;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Network Connectivity Checker'),
),
body: Center(
child: Text(
_isConnected ? 'Connected to the internet' : 'Not connected to the internet',
style: TextStyle(fontSize: 24),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
_checkConnectivity();
},
tooltip: 'Check Connectivity',
child: Icon(Icons.refresh),
),
);
}
}
解释
- 依赖添加:在
pubspec.yaml
中添加ac_inet_connectivity_checker
依赖。 - 导入插件:在需要使用插件的Dart文件中导入
ac_inet_connectivity_checker
。 - 初始化检测:在
initState
方法中调用_checkConnectivity
函数来初始化网络连接检测。 - 检测函数:
_checkConnectivity
函数使用InternetConnectivityChecker().hasConnection
来检测网络连接,并将结果存储在_isConnected
变量中。 - UI显示:在UI中使用
Text
组件显示网络连接状态,并提供一个浮动按钮来手动刷新网络连接检测状态。
这个示例代码展示了如何使用ac_inet_connectivity_checker
插件来检测设备的网络连接状态,并在UI中动态显示结果。你可以根据需要进一步扩展这个示例,比如添加更多的错误处理或监听网络状态的变化。