flutter:得到当前网络类型,是移动网络还是wifi

一,安装第三方库

库地址:

https://pub.dev/packages/connectivity_plus

安装:编辑pubspec.yaml,

dependencies:
  flutter:
    sdk: flutter
  connectivity_plus: ^6.1.3

然后点击 pub get

添加权限:

在android/app/src/main/AndroidManifest.xml中添加:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

二,代码

1,助手类:

import 'package:flutter/material.dart';
import 'dart:io' show Platform;
import 'package:device_info_plus/device_info_plus.dart';
import 'package:connectivity_plus/connectivity_plus.dart';

class SystemHelper {

   //得到网络类型
   static Future<String> getNetworkType() async {
     String netType = "none";
     final List<ConnectivityResult> connectivityResult = await (Connectivity().checkConnectivity());

     if (connectivityResult.contains(ConnectivityResult.wifi)) {
       netType = "wifi";
     } else if (connectivityResult.contains(ConnectivityResult.mobile)) {
       netType = "mobile";
     } else if (connectivityResult.contains(ConnectivityResult.none)) {
       netType = "none";
     }
     return netType;
   }
}

2, 页面中调用:

import 'dart:async';

import 'package:demo3/common/SystemHelper.dart';
import 'package:dio/io.dart';
import 'package:flutter/material.dart';
import 'package:image_gallery_saver_plus/image_gallery_saver_plus.dart';
import 'package:dio/dio.dart';
import 'dart:typed_data';
import 'package:connectivity_plus/connectivity_plus.dart';

class SystemPage extends StatefulWidget {
  final Map arguments;
  // 为title设置一个默认参数,这样的跳转该界面时可以不传值。
  SystemPage({super.key, required this.arguments});
  @override
  State<SystemPage> createState() => _SystemPageState();
}

class _SystemPageState extends State<SystemPage> {
  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.mobile)) {
      setState(() {
      _stateText = "网络连接使用mobile";
      });
      } else if (result.contains(ConnectivityResult.none)) {
        setState(() {
          _stateText = "没有网络连接";
        });
      } else {
        setState(() {
          _stateText = "网络检测中";
        });
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.primaryContainer,
        title: Text(widget.arguments["title"]),
      ),

      body: Center(
        child:Column(
            children: [
            ElevatedButton(
            onPressed: () async {
              String netType = await SystemHelper.getNetworkType();
              print("当前网络类型:");
              print(netType);
            },
            child:  Row(
                mainAxisSize: MainAxisSize.min, // 根据内容调整大小
                children: <Widget>[
                  Icon(Icons.add), // 图标在左侧
                  SizedBox(width: 10), // 可选:添加一些间隔
                  Text("得到网络类型"), // 文本在右侧
                ],
              ),
            ),
              Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text(_stateText),
                ],
              ),
            ],
          ),

        ),
      );
  }
}

说明:initState中有对网络类型的监控,

也可以点击按纽临时获取

三,测试效果:

posted @ 2025-04-04 13:14  刘宏缔的架构森林  阅读(88)  评论(0)    收藏  举报