Flutter网络连接检测插件flutter_reachability_plus的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter网络连接检测插件flutter_reachability_plus的使用

简介

flutter_reachability_plus 是一个用于Flutter应用中检测网络变化的插件。它可以检测移动网络类型,如2G、3G、4G、5G,并且适用于iOS和Android平台。此外,它还可以检测互联网连接状态。

该插件依赖于 permission_handler 插件,以确保在需要时能够请求必要的权限。

使用步骤

1. 添加依赖

pubspec.yaml 文件中添加 flutter_reachability_pluspermission_handler 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_reachability_plus: ^最新版本
  permission_handler: ^最新版本

2. 请求权限

在 Android 平台上,使用 flutter_reachability_plus 需要请求电话权限(Permission.phone)。你可以在代码中通过 permission_handler 插件来请求该权限。

3. 检测网络状态

使用 FlutterReachabilityPlus().currentNetworkStatus() 方法可以获取当前的网络状态。该方法返回一个 NetworkStatus 枚举值,表示当前的网络连接类型。

完整示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_reachability_plus 插件来检测网络连接状态,并将其结果显示在界面上。

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_reachability_plus/flutter_reachability_plus.dart';
import 'package:permission_handler/permission_handler.dart';

void main() {
  runApp(const MyApp());
}

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _networkStatus = "未知";

  [@override](/user/override)
  void initState() {
    super.initState();
    checkRechability();
  }

  // 检查网络连接状态
  Future<void> checkRechability() async {
    if (Platform.isAndroid) {
      // 请求电话权限(仅限Android)
      await Permission.phone.request();
    }
    try {
      // 获取当前网络状态
      NetworkStatus status = await FlutterReachabilityPlus().currentNetworkStatus();
      setState(() {
        _networkStatus = getReturninString(status);
      });
    } catch (e) {
      print("Error checking reachability: $e");
    }
  }

  // 将NetworkStatus枚举转换为字符串
  String getReturninString(NetworkStatus status) {
    switch (status) {
      case NetworkStatus.unreachable:
        return "无法连接";
      case NetworkStatus.wifi:
        return "Wi-Fi";
      case NetworkStatus.mobile2G:
        return "2G";
      case NetworkStatus.mobile3G:
        return "3G";
      case NetworkStatus.mobile4G:
        return "4G";
      case NetworkStatus.mobile5G:
        return "5G";
      case NetworkStatus.otherMobile:
        return "其他移动网络";
      default:
        return "未知";
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('网络连接检测'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(
                '当前网络状态: $_networkStatus',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 20),
              MaterialButton(
                onPressed: () {
                  checkRechability(); // 点击按钮重新检查网络状态
                },
                color: Colors.blue,
                textColor: Colors.white,
                child: Text("点击检查网络"),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter网络连接检测插件flutter_reachability_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络连接检测插件flutter_reachability_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用 flutter_reachability_plus 插件来检测网络连接的 Flutter 代码示例。这个插件允许你检查设备当前的网络连接状态。

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 flutter_reachability_plus 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_reachability_plus: ^2.0.0  # 请确保使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 flutter_reachability_plus

import 'package:flutter_reachability_plus/flutter_reachability_plus.dart';

3. 检测网络连接

下面是一个完整的示例,展示如何使用 flutter_reachability_plus 来检测网络连接状态:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Network Reachability Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late Reachability _reachability;
  bool _isConnected = false;

  @override
  void initState() {
    super.initState();
    _reachability = Reachability()
      ..listen((ReachabilityResult result) {
        if (result == ReachabilityResult.wifi || result == ReachabilityResult.mobile) {
          setState(() {
            _isConnected = true;
          });
        } else {
          setState(() {
            _isConnected = false;
          });
        }
      });

    // 初始化网络连接状态
    _checkConnection();
  }

  @override
  void dispose() {
    _reachability.stopListening();
    super.dispose();
  }

  Future<void> _checkConnection() async {
    bool result = await _reachability.connectionStatus();
    if (mounted) {
      setState(() {
        _isConnected = result;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Network Reachability Demo'),
      ),
      body: Center(
        child: Text(
          _isConnected ? 'You are connected to the internet.' : 'You are NOT connected to the internet.',
          style: TextStyle(fontSize: 24),
        ),
      ),
    );
  }
}

代码解释

  1. 依赖和导入:首先在 pubspec.yaml 中添加依赖,然后在 Dart 文件中导入插件。
  2. 初始化 Reachability:在 initState 方法中初始化 Reachability 实例,并添加一个监听器来实时检测网络连接状态的变化。
  3. 检测初始状态:调用 _reachability.connectionStatus() 来获取初始的网络连接状态。
  4. UI 更新:根据网络连接状态更新 UI。如果设备连接到网络(无论是 WiFi 还是移动数据),显示“You are connected to the internet.”,否则显示“You are NOT connected to the internet.”。
  5. 清理资源:在 dispose 方法中停止监听,以释放资源。

这样,你就可以在 Flutter 应用中轻松检测网络连接状态了。

回到顶部