Flutter檢查連接網(wǎng)絡(luò)connectivity_plus實(shí)現(xiàn)步驟
前言
有些對(duì)通訊敏感的程序,我們需要檢查當(dāng)前連接的網(wǎng)絡(luò)情況。
我推薦使用 connectivity_plus
https://pub-web.flutter-io.cn/packages/connectivity_plus
這個(gè)插件的好處就是支持全平臺(tái),這點(diǎn)非常好。
我們今天來(lái)寫一個(gè)例子嘗試下這個(gè)功能。
這個(gè)插件遇到獲取狀態(tài)不對(duì),請(qǐng)用真機(jī)調(diào)試,模擬器可能有偏差。
步驟
第一步:配置依賴包
pubspec.yaml
dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 connectivity_plus: ^4.0.1
第二步:修改 android 最小編譯版本
android/app/build.gradle
改成·minSdkVersion 19
android { ... defaultConfig { applicationId "com.example.flutter_application_connectivity" minSdkVersion 19 //flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName }
第三步:檢查網(wǎng)路連接代碼
lib/connectivity.dart
定義 Connectivity 對(duì)象
class _ConnectivityPageState extends State<ConnectivityPage> { // Connectivity 對(duì)象 final Connectivity _connectivity = Connectivity();
消息訂閱 StreamSubscription
// 消息訂閱 late StreamSubscription<ConnectivityResult> _subscription;
返回狀態(tài)保存
// 初始返回的網(wǎng)絡(luò)狀態(tài) ConnectivityResult? _connectivityStatus;
初始化,單次檢查方式
// 初始化 Future<void> _init() async { try { // 方式1:?jiǎn)未握?qǐng)求檢查 final connectivityResult = await _connectivity.checkConnectivity(); _updateConnectionStatus(connectivityResult); } on PlatformException catch (e) { print(e); print('連接網(wǎng)絡(luò)出現(xiàn)了異常'); } }
訂閱方式
// 初始化 Future<void> _init() async { try { // 方式1:?jiǎn)未握?qǐng)求檢查 // final connectivityResult = await _connectivity.checkConnectivity(); // _updateConnectionStatus(connectivityResult); // 方式2:狀態(tài)訂閱 _subscription = _connectivity.onConnectivityChanged.listen(_updateConnectionStatus); } on PlatformException catch (e) { print(e); print('連接網(wǎng)絡(luò)出現(xiàn)了異常'); } }
更新訂閱狀態(tài)
Future<void> _updateConnectionStatus(ConnectivityResult result) async { setState(() { _connectivityStatus = result; }); if (result == ConnectivityResult.mobile) { print('成功連接移動(dòng)網(wǎng)絡(luò)'); } else if (result == ConnectivityResult.wifi) { print('成功連接WIFI'); } else if (result == ConnectivityResult.ethernet) { print('成功連接到以太網(wǎng)'); } else if (result == ConnectivityResult.vpn) { print('成功連接vpn網(wǎng)絡(luò)'); } else if (result == ConnectivityResult.bluetooth) { print('成功連接藍(lán)牙'); } else if (result == ConnectivityResult.other) { print('成功連接除以上以外的網(wǎng)絡(luò)'); } else if (result == ConnectivityResult.none) { print('沒(méi)有連接到任何網(wǎng)絡(luò)'); } }
初始 initState
@override void initState() { super.initState(); _init(); }
釋放 dispose,關(guān)閉訂閱
@override void dispose() { _subscription.cancel(); super.dispose(); }
視圖
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('網(wǎng)路連接檢查'), ), body: Center( child: Column( children: [ const Text('狀態(tài)'), Text(_connectivityStatus?.toString() ?? "未知"), ], ), ), ); }
小結(jié)
connectivity_plus
是一個(gè) Flutter 插件,用于檢測(cè)設(shè)備的網(wǎng)絡(luò)連接狀態(tài)。它可以檢測(cè)設(shè)備是否連接到互聯(lián)網(wǎng),以及連接類型是 Wi-Fi、蜂窩數(shù)據(jù)還是無(wú)網(wǎng)絡(luò)連接。這個(gè)插件的作用和重要性在于:
- 提供了一種簡(jiǎn)單、可靠的方法來(lái)檢測(cè)設(shè)備的網(wǎng)絡(luò)連接狀態(tài),方便開(kāi)發(fā)者編寫更智能的應(yīng)用程序。
- 讓應(yīng)用程序可以根據(jù)設(shè)備的網(wǎng)絡(luò)連接狀態(tài)來(lái)調(diào)整其行為,例如根據(jù)網(wǎng)絡(luò)狀況選擇合適的數(shù)據(jù)加載方式、調(diào)整 UI 布局等。
- 支持多種平臺(tái),包括 Android、iOS、macOS 和 Windows,可以輕松地在不同平臺(tái)上進(jìn)行開(kāi)發(fā)和測(cè)試。
總之,connectivity_plus
插件是一個(gè)非常有用和重要的工具,可以幫助開(kāi)發(fā)者編寫更智能、更適應(yīng)用戶需求的應(yīng)用程序。
以上就是Flutter檢查連接網(wǎng)絡(luò)connectivity_plus實(shí)現(xiàn)步驟的詳細(xì)內(nèi)容,更多關(guān)于Flutter connectivity_plus的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android手機(jī)獲取root權(quán)限并實(shí)現(xiàn)關(guān)機(jī)重啟功能的方法
這篇文章主要介紹了Android手機(jī)獲取root權(quán)限并實(shí)現(xiàn)關(guān)機(jī)重啟功能的方法,是Android程序設(shè)計(jì)中非常重要的技巧,需要的朋友可以參考下2014-08-08解決eclipse啟動(dòng)時(shí)報(bào)錯(cuò)Failed to create the Java Virtural Machine.問(wèn)題的
這篇文章主要介紹了解決eclipse啟動(dòng)時(shí)報(bào)Failed to create the Java Virtural Machine.問(wèn)題的方法,感興趣的小伙伴們可以參考一下2016-01-01Android動(dòng)畫教程之屬性動(dòng)畫詳解
這篇文章主要給大家介紹了關(guān)于Android動(dòng)畫教程之屬性動(dòng)畫的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)各位Android開(kāi)發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Android中TextView顯示圓圈背景或設(shè)置圓角的方法
TextView顯示文本給用戶,并允許他們選擇編輯。TextView是一個(gè)完整的文本編輯器,但是其基本類配置為不允許編輯。下面這篇文章主要給大家介紹了關(guān)于Android中TextView顯示圓圈背景或設(shè)置圓角的方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-05-05Android下拉刷新完全解析,教你如何一分鐘實(shí)現(xiàn)下拉刷新功能(附源碼)
以下是我自己花功夫編寫了一種非常簡(jiǎn)單的下拉刷新實(shí)現(xiàn)方案,現(xiàn)在拿出來(lái)和大家分享一下。相信在閱讀完本篇文章之后,大家都可以在自己的項(xiàng)目中一分鐘引入下拉刷新功能2013-07-07Android ViewPager實(shí)現(xiàn)圖片輪翻效果
這篇文章主要為大家詳細(xì)介紹了Android ViewPager實(shí)現(xiàn)圖片輪翻效果的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01android開(kāi)發(fā)框架afinal使用方法小結(jié)
這篇文章主要為大家詳細(xì)總結(jié)了android開(kāi)發(fā)框架afinal使用方法,注解功能、文件上傳下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android開(kāi)發(fā)中應(yīng)用程序分享功能實(shí)例
這篇文章主要介紹了Android開(kāi)發(fā)中應(yīng)用程序分享功能,結(jié)合實(shí)例形式分析了基于Intent實(shí)現(xiàn)Android程序分享功能的技巧,需要的朋友可以參考下2016-02-02Android 自定義View時(shí)使用TypedArray配置樣式屬性詳細(xì)介紹
這篇文章主要介紹了Android 自定義View時(shí)使用TypedArray配置樣式屬性詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-11-11android 9.0 launcher3 去掉抽屜式顯示所有 app(代碼詳解)
本文通過(guò)實(shí)例代碼給大家介紹了android 9.0 Launcher3 去掉抽屜式,顯示所有 app,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11