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中有对网络类型的监控,
也可以点击按纽临时获取
三,测试效果:

浙公网安备 33010602011771号