Flutter_学习记录_connectivity_plus 检测网络

  1. 引入插件
    官方网址:https://pub.dev/packages/connectivity_plus
  2. 导入头文件
dart 复制代码
import 'package:connectivity_plus/connectivity_plus.dart';
  1. StreamSubscription订阅网络监听
dart 复制代码
late StreamSubscription<List<ConnectivityResult>> _subscription;

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

    // 必须要有订阅,如果没有订阅的话,那下次再进来,就检测不到网络的变化了
    _subscription =  Connectivity().onConnectivityChanged.listen((List<ConnectivityResult> result){
      print(result);
      if (result.contains(ConnectivityResult.wifi)) {
        setState(() {
          _stateText = "网络连接的Wifi";
        });
      } else if (result.contains(ConnectivityResult.none)) {
        setState(() {
          _stateText = "没有网络连接";
        });
      } else {
        setState(() {
          _stateText = "检测中";
        });
      }
    });
  }
  1. dispose时,取消订阅
dart 复制代码
@override void dispose() { 
    _subscription.cancel();
    super.dispose(); 
  }
  1. 完整代码案例
dart 复制代码
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:connectivity_plus/connectivity_plus.dart';

class ConnectivityDemo extends StatefulWidget {
  const ConnectivityDemo({super.key});

  @override
  State<ConnectivityDemo> createState() => _ConnectivityDemoState();
}

class _ConnectivityDemoState extends State<ConnectivityDemo> {
  late StreamSubscription<List<ConnectivityResult>> _subscription;
  String _stateText = "检测网络中";

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

    // 必须要有订阅,如果没有订阅的话,那下次再进来,就检测不到网络的变化了
    _subscription =  Connectivity().onConnectivityChanged.listen((List<ConnectivityResult> result){
      print(result);
      if (result.contains(ConnectivityResult.wifi)) {
        setState(() {
          _stateText = "网络连接的Wifi";
        });
      } else if (result.contains(ConnectivityResult.none)) {
        setState(() {
          _stateText = "没有网络连接";
        });
      } else {
        setState(() {
          _stateText = "检测中";
        });
      }
    });
  }

         
  @override void dispose() { 
    _subscription.cancel();
    super.dispose(); 
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("网络监听"),
      ),
      body: Center(child: Text(_stateText)),
    );
  }
}
  1. 效果图如下:
相关推荐
不爱吃糖的程序媛13 小时前
Flutter OpenHarmony 环境搭建
flutter
程序员老刘·13 小时前
Flutter版本选择指南:3.41开始进入稳定区间 | 2026年3月
flutter·ai编程·跨平台开发·客户端开发
SoaringHeart1 天前
Flutter组件封装:翻转组件 NFlipCard
前端·flutter
明君879971 天前
说说我为什么放弃使用 GetX,转而使用 flutter_bloc + GetIt
前端·flutter
程序员老刘1 天前
Flutter版本选择指南:3.41开始进入稳定区间 | 2026年3月
flutter·ai编程·客户端
王码码20351 天前
Flutter 三方库 sparky 的鸿蒙化适配指南 - 实现极简 2D 游戏引擎功能、支持高效精灵图渲染与跨端游戏逻辑
flutter·harmonyos·鸿蒙·openharmony
恋猫de小郭1 天前
Android 17 新适配要求,各大权限进一步收紧,适配难度提升
android·前端·flutter
tangweiguo030519871 天前
Flutter SSE 流式接收完全指南:从原理到实战
flutter
西西学代码1 天前
Flutter---文件存储
flutter
林九生1 天前
【Flutter】Flutter 拍照/相册选择后无法显示对话框问题解决方案
前端·javascript·flutter