Flutter网络连接检测插件internet_connection_checker_plus的使用
Flutter网络连接检测插件internet_connection_checker_plus的使用
简介
Internet Connection Checker Plus
是一个Flutter包,它能够以亚秒级响应时间检查您的互联网连接状态,即使是在移动网络上也能快速响应!
该库通过检查对各种 Uri
的可达性来监控和验证互联网连接。它依赖于 connectivity_plus
包来监听连接变化,并使用 http
包进行网络请求。
特性
- 检查互联网连接状态
- 监听互联网连接变化
支持平台
平台 | 检查连接 | 监听变化 |
---|---|---|
Android | ✅ | ✅ |
iOS | ✅ | ✅ |
macOS | ✅ | ✅ |
Linux | ✅ | ✅ |
Windows | ✅ | ✅ |
Web | ✅ | ✅ |
权限设置
Android
在 AndroidManifest.xml
文件中添加以下权限:
<uses-permission android:name="android.permission.INTERNET" />
macOS
在 macOS 的 .entitlements
文件中添加以下权限:
<key>com.apple.security.network.client</key>
<true/>
更多信息请参考 Flutter Networking Documentation。
使用方法
1. 添加依赖
在 pubspec.yaml
文件中添加 internet_connection_checker_plus
包:
dependencies:
internet_connection_checker_plus: ^2.7.0
2. 导入包
在 Dart 文件中导入 internet_connection_checker_plus
包:
import 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';
3. 检查互联网连接
最简单的方法是使用 InternetConnection
类来检查互联网连接:
bool result = await InternetConnection().hasInternetAccess;
4. 监听互联网连接变化
InternetConnection
类提供了一个 InternetStatus
流,可以用来监听互联网连接的变化:
final listener = InternetConnection().onStatusChange.listen((InternetStatus status) {
switch (status) {
case InternetStatus.connected:
// 互联网已连接
break;
case InternetStatus.disconnected:
// 互联网已断开
break;
}
});
不要忘记在不再需要时取消订阅,以防止内存泄漏并释放资源:
listener.cancel();
5. 添加自定义 Uri
进行检查
InternetConnection
类可以配置为使用自定义 Uri
检查互联网连接:
final connection = InternetConnection.createInstance(
customCheckOptions: [
InternetCheckOption(uri: Uri.parse('https://example.com')),
],
);
重要提示: 确保自定义 Uri
没有启用缓存,否则结果可能不准确。在 web
平台上,确保自定义 Uri
不被 CORS 阻止。
6. 添加自定义成功标准
InternetConnection
类可以配置为使用自定义成功标准检查互联网连接:
final connection = InternetConnection.createInstance(
customCheckOptions: [
InternetCheckOption(
uri: Uri.parse('https://example.com'),
responseStatusFn: (response) {
return response.statusCode >= 69 && response.statusCode < 169;
},
),
InternetCheckOption(
uri: Uri.parse('https://example2.com'),
responseStatusFn: (response) {
return response.statusCode >= 420 && response.statusCode < 1412;
},
),
],
);
7. 应用生命周期变化时暂停和恢复
在应用进入后台时暂停网络请求,在应用返回前台时恢复:
class MyWidget extends StatefulWidget {
const MyWidget({super.key});
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
late final StreamSubscription<InternetStatus> _subscription;
late final AppLifecycleListener _listener;
@override
void initState() {
super.initState();
_subscription = InternetConnection().onStatusChange.listen((status) {
// 处理互联网状态变化
});
_listener = AppLifecycleListener(
onResume: _subscription.resume,
onHide: _subscription.pause,
onPause: _subscription.pause,
);
}
@override
void dispose() {
_subscription.cancel();
_listener.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
// 构建你的组件
}
}
默认 Uri
InternetConnection
类默认使用的 Uri
如下:
URI | 描述 |
---|---|
https://one.one.one.one |
响应时间小于 100ms ,CORS 启用,无缓存 |
https://icanhazip.com |
响应时间小于 100ms ,CORS 启用,无缓存 |
https://jsonplaceholder.typicode.com/todos/1 |
响应时间小于 100ms ,CORS 启用,无缓存 |
https://reqres.in/api/users/1 |
响应时间小于 100ms ,CORS 启用,无缓存 |
示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 internet_connection_checker_plus
包:
// Flutter Packages
import 'package:flutter/material.dart';
// Pages
import 'pages/custom_success_criteria.dart';
import 'pages/custom_uris.dart';
import 'pages/listen_once.dart';
import 'pages/listen_to_stream.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Internet Connection Checker Plus Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
MyHomePage({super.key});
final pages = {
'Listen Once': const ListenOnce(),
'Listen to Stream': const ListenToStream(),
'Custom URIs': const CustomURIs(),
'Custom Success Criteria': const CustomSuccessCriteria(),
};
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: const Text('Internet Connection Checker Plus Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: pages.entries.map((entry) {
return Padding(
padding: const EdgeInsets.all(10.0),
child: ElevatedButton(
onPressed: () => Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => entry.value,
),
),
child: Text(entry.key),
),
);
}).toList(),
),
),
);
}
}
希望这些信息对你有所帮助!如果你喜欢这个包,请给它一个 Like 👍🏼 和 Star ⭐。
致谢
此包是基于 internet_connection_checker 包修改而来,而后者又是基于 data_connection_checker 包修改而来,后者已不再维护。本包旨在支持 web
平台,这是 internet_connection_checker 包目前不支持的功能。
更多关于Flutter网络连接检测插件internet_connection_checker_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络连接检测插件internet_connection_checker_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用internet_connection_checker_plus
插件来检测网络连接的示例代码。
首先,确保你已经在pubspec.yaml
文件中添加了internet_connection_checker_plus
依赖:
dependencies:
flutter:
sdk: flutter
internet_connection_checker_plus: ^1.0.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter项目中编写代码来检测网络连接状态。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:internet_connection_checker_plus/internet_connection_checker_plus.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Internet Connection Checker Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
late InternetConnectionChecker _connectionChecker;
late Future<bool> _connectionStatus;
@override
void initState() {
super.initState();
_connectionChecker = InternetConnectionChecker();
_connectionStatus = _checkConnection();
}
Future<bool> _checkConnection() async {
var connectionResult = await _connectionChecker.hasConnection;
return connectionResult;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Internet Connection Checker Demo'),
),
body: Center(
child: FutureBuilder<bool>(
future: _connectionStatus,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
bool hasConnection = snapshot.data ?? false;
return Text(
'Connection Status: ${hasConnection ? 'Connected' : 'Not Connected'}',
style: TextStyle(fontSize: 24),
);
}
},
),
),
);
}
}
代码解释:
- 依赖导入:在文件顶部导入
internet_connection_checker_plus
包。 - 初始化:在
_MyHomePageState
的initState
方法中,初始化InternetConnectionChecker
实例,并调用_checkConnection
方法来检查网络连接状态。 - 检查连接:
_checkConnection
方法异步调用hasConnection
属性,该属性返回一个Future<bool>
,表示是否有网络连接。 - UI更新:使用
FutureBuilder
来监听_connectionStatus
的状态。当连接状态正在检查时,显示一个CircularProgressIndicator
;如果检查完成,显示连接状态文本。
这个示例展示了如何使用internet_connection_checker_plus
插件在Flutter应用中检测网络连接状态,并根据状态更新UI。你可以根据需要对这个基础示例进行扩展和修改。