Flutter网络连接检测插件internet_connection_checker_service的使用
Flutter网络连接检测插件internet_connection_checker_service的使用
引言
此软件包提供了检查当前互联网连接状态的方法和流,并可以通过指定的URL检查是否有互联网访问。
特性
- 检查当前互联网连接状态:断开或连接。
- 通过特定的URL确定互联网连接。
平台注意事项
某些平台可能需要额外步骤,具体如下:
Android
Android应用程序必须在Android清单文件(AndroidManifest.xml)中声明其对互联网的使用:
<manifest xmlns:android...>
...
<uses-permission android:name="android.permission.INTERNET" />
<application ...
</manifest>
macOS
macOS应用程序必须在其相关的.entitlements文件中允许网络访问:
<key>com.apple.security.network.client</key>
<true/>
更多关于设置权限的信息可以查看设置权限指南。
使用方法
要使用此软件包,请确保将其添加到您的pubspec.yaml
文件中:
dependencies:
internet_connection_checker_service: ^1.1.5+1
示例用法:
final internetConnectionChecker = InternetConnectionCheckerService();
List<InternetConnectionOptions> optionURLs = [
const InternetConnectionOptions(
uri: 'https://google.com',
timeout: Duration(seconds: 20),
),
const InternetConnectionOptions(
uri: 'https://bing.com',
timeout: Duration(seconds: 20),
),
];
// 获取当前互联网连接状态。
final status = await internetConnectionChecker.connectionStatus;
// 监听互联网连接状态的变化。
StreamSubscription<InternetConnectionStatus>? _streamSubscription;
_streamSubscription = internetConnectionChecker
.onInternetConnectionStatusChanged(optionURLs: optionURLs)
.listen((status) {
// 处理互联网连接状态的变化。
});
// 检查是否通过指定的URL有互联网访问。
final hasAccess = await internetConnectionChecker.hasInternetAccess(
optionURLs: optionURLs,
);
// 注意,optionURLs 参数是可选的,可以省略。
示例代码
以下是完整的示例代码,展示了如何在应用中使用该插件:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:internet_connection_checker_service/internet_connection_checker_service.dart';
void main() {
runApp(const HomePage());
}
// 应用程序的根部件
class HomePage extends StatelessWidget {
const HomePage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
// 更多示例请参见:
// https://github.com/logandx/internet_connection_checker_service/tree/main/example/lib/example
home: Example1(),
);
}
}
class Example1 extends StatefulWidget {
const Example1({
super.key,
});
[@override](/user/override)
State<Example1> createState() => _Example1State();
}
class _Example1State extends State<Example1> with WidgetsBindingObserver {
StreamSubscription<InternetConnectionStatus>? _streamSubscription;
InternetConnectionStatus? _lastStatus;
final InternetConnectionCheckerService internetConnectionCheckerService =
InternetConnectionCheckerService();
// 要检查互联网连接的URL列表
List<InternetConnectionOptions> optionURLs = [
const InternetConnectionOptions(
uri: 'https://google.com',
timeout: Duration(seconds: 20),
),
const InternetConnectionOptions(
uri: 'https://youtube.com',
timeout: Duration(seconds: 20),
),
];
[@override](/user/override)
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
// 订阅互联网连接状态变化
_streamSubscription = internetConnectionCheckerService
.onInternetConnectionStatusChanged(optionURLs: optionURLs)
.listen((event) {
_lastStatus = event;
setState(() {});
});
}
[@override](/user/override)
void dispose() {
// 取消订阅并移除观察者当部件被销毁时
_streamSubscription?.cancel();
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
[@override](/user/override)
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.resumed) {
// 当应用程序恢复时重新订阅互联网连接状态
_streamSubscription?.resume();
} else if (state == AppLifecycleState.paused) {
// 当应用程序暂停时暂停订阅
_streamSubscription?.pause();
}
}
Widget _buildContent(BuildContext context) {
if (_lastStatus == null) {
return Center(
child: Text('$_lastStatus'),
);
}
return Center(
child: Container(
padding: const EdgeInsets.all(16),
color: _lastStatus == InternetConnectionStatus.disconnected
? Colors.red
: Colors.green,
child: Text(
_lastStatus == InternetConnectionStatus.disconnected
? 'Disconnected'
: 'Connected',
style: Theme.of(context).textTheme.bodyLarge,
),
),
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Internet Connection Checker Example'),
),
body: Column(
children: [
_buildContent(context),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () async {
// 检查是否有互联网访问并显示一个Snackbar消息
final hasAccess = await internetConnectionCheckerService
.hasInternetAccess(optionURLs: optionURLs);
if (!context.mounted) {
return;
}
if (hasAccess) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Internet access is available.'),
),
);
} else {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Internet access is not available.'),
),
);
}
},
child: const Text('Check Internet Access'),
),
],
),
);
}
}
更多关于Flutter网络连接检测插件internet_connection_checker_service的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络连接检测插件internet_connection_checker_service的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 internet_connection_checker_service
插件在 Flutter 中检测网络连接的代码示例。这个插件允许你轻松检查设备是否有活动的网络连接。
首先,你需要在 pubspec.yaml
文件中添加该插件的依赖:
dependencies:
flutter:
sdk: flutter
internet_connection_checker: ^0.0.1+3 # 请注意版本号,这里用的是示例版本号,实际使用时请检查最新版本
然后运行 flutter pub get
来获取依赖。
接下来,在你的 Flutter 项目中,你可以按照以下步骤使用该插件:
- 导入插件:
import 'package:internet_connection_checker/internet_connection_checker.dart';
- 创建并初始化一个
InternetConnectionChecker
实例:
class _MyAppState extends State<MyApp> {
final InternetConnectionChecker _connectionChecker = InternetConnectionChecker();
bool _isConnected = false;
@override
void initState() {
super.initState();
_checkConnection();
}
Future<void> _checkConnection() async {
var connectivityResult = await _connectionChecker.checkConnection();
if (connectivityResult == ConnectivityResult.connected) {
setState(() {
_isConnected = true;
});
} else {
setState(() {
_isConnected = false;
});
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Network Connection Checker'),
),
body: Center(
child: Text(
_isConnected ? 'Connected to the Internet' : 'Not Connected to the Internet',
style: TextStyle(fontSize: 24),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
// 再次检查连接
await _checkConnection();
// 这里可以添加额外的逻辑,比如显示Snackbar通知用户连接状态
},
tooltip: 'Check Connection',
child: Icon(Icons.refresh),
),
),
);
}
}
- 在你的主文件中使用这个状态类:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: _MyAppState(),
);
}
}
这个示例展示了如何创建一个简单的 Flutter 应用,该应用会在启动时检查网络连接状态,并在屏幕上显示结果。此外,用户可以通过点击浮动操作按钮(FAB)来手动重新检查连接状态。
这个示例代码使用了 setState
方法来更新 UI,每当连接状态改变时,UI 都会重新渲染以反映最新的连接状态。同时,InternetConnectionChecker
插件的 checkConnection
方法会返回一个 ConnectivityResult
,你可以根据这个结果来判断设备是否连接到互联网。