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

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

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

简介

cross_connectivity 是一个用于处理移动、Web和桌面平台上的 ConnectivityREAL Connection 状态的Flutter插件。它支持iOS、Android、Web、Windows、Linux和macOS等平台。

Build Pub GitHub License GitHub stars

开始使用

添加依赖

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

dependencies:
  cross_connectivity: any

或者使用Git版本:

dependencies:
  cross_connectivity:
    git:
      url: https://github.com/marchdev-tk/cross_connectivity

导入包

在Dart文件中添加以下导入语句:

import 'package:cross_connectivity/cross_connectivity.dart';

使用方法

功能性方法

该插件提供了两个流(Stream):

  • isConnected:显示设备是否真正连接到网络。
  • onConnectivityChanged:仅显示连接状态,不提供实际网络连接的状态。

对于一次性检查,可以使用以下方法:

  • checkConnection():类似于 isConnected,但返回 Future<bool> 而不是 Stream<bool>
  • checkConnectivity():类似于 onConnectivityChanged,但返回 Future<ConnectivityStatus> 而不是 Stream<ConnectivityStatus>

此外,还有以下方法(仅适用于Android/iOS/macOS):

  • getWifiName():获取已连接网络的Wi-Fi名称(SSID)。
  • getWifiBSSID():获取已连接网络的Wi-Fi BSSID。
  • getWifiIP():获取已连接Wi-Fi网络的IP地址。

这些方法已迁移到 wifi_info_flutter 插件中。

组件方法

作为功能性方法的替代,可以使用 ConnectivityBuilder 组件:

ConnectivityBuilder(
  builder: (context, isConnected, status) => Row(
    mainAxisSize: MainAxisSize.min,
    children: <Widget>[
      Icon(
        isConnected == true
            ? Icons.signal_wifi_4_bar
            : Icons.signal_wifi_off,
        color: isConnected == true ? Colors.green : Colors.red,
      ),
      const SizedBox(width: 8),
      Text(
        '$status',
        style: TextStyle(
          color: status != ConnectivityStatus.none
              ? Colors.green
              : Colors.red,
        ),
      ),
    ],
  ),
)

示例代码

以下是一个完整的示例应用,展示了如何使用 cross_connectivity 插件来检测网络连接状态:

// Copyright (c) 2021, the MarchDev Toolkit project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Cross Connectivity Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Cross Connectivity Example'),
      ),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Center(
            child: ConnectivityBuilder(
              builder: (context, isConnected, status) => Row(
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  Icon(
                    isConnected == true
                        ? Icons.signal_wifi_4_bar
                        : Icons.signal_wifi_off,
                    color: isConnected == true ? Colors.green : Colors.red,
                  ),
                  const SizedBox(width: 8),
                  Text(
                    '$status',
                    style: TextStyle(
                      color: status != ConnectivityStatus.none
                          ? Colors.green
                          : Colors.red,
                    ),
                  ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }
}

特性请求和Bug报告

如果您有任何特性请求或发现了Bug,请随时在 GitHub Issues 中提交。

希望以上内容能帮助您更好地理解和使用 cross_connectivity 插件。如果有任何问题或需要进一步的帮助,请随时提问!


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

1 回复

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


当然,以下是如何在Flutter应用中使用cross_connectivity插件来检测网络连接的示例代码。这个插件允许你检查设备当前是否有网络连接,以及连接的类型(如WiFi、移动数据等)。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  cross_connectivity: ^x.y.z  # 替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 导入包

在你的Dart文件中导入cross_connectivity包:

import 'package:cross_connectivity/cross_connectivity.dart';

3. 检测网络连接

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

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Network Connectivity Demo',
      home: ConnectivityScreen(),
    );
  }
}

class ConnectivityScreen extends StatefulWidget {
  @override
  _ConnectivityScreenState createState() => _ConnectivityScreenState();
}

class _ConnectivityScreenState extends State<ConnectivityScreen> {
  ConnectivityResult _connectivityResult = ConnectivityResult.none;

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

  Future<void> initConnectivity() async {
    var connectivityResult = await (Connectivity().checkConnectivity());
    setState(() {
      _connectivityResult = connectivityResult;
    });

    // 监听连接变化
    Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
      setState(() {
        _connectivityResult = result;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Network Connectivity Demo'),
      ),
      body: Center(
        child: Text('Connectivity Status: $_connectivityResult'),
      ),
    );
  }
}

代码解释

  1. 添加依赖:在pubspec.yaml中添加cross_connectivity依赖。
  2. 导入包:在需要使用网络连接检测的Dart文件中导入cross_connectivity包。
  3. 检测网络连接
    • 创建一个Flutter应用。
    • ConnectivityScreen组件的initState方法中调用initConnectivity函数。
    • initConnectivity函数使用Connectivity().checkConnectivity()方法来获取当前的连接状态,并使用setState更新UI。
    • 使用Connectivity().onConnectivityChanged.listen方法来监听连接状态的变化,并在连接状态变化时更新UI。

注意事项

  • 确保在Android和iOS上都配置了必要的权限。对于Android,通常不需要额外的权限配置,但对于iOS,你可能需要在Info.plist中添加网络权限描述。
  • 在实际使用中,考虑处理异常和错误情况,例如当插件无法访问网络连接信息时。

这个示例提供了一个基础的网络连接检测功能,你可以根据需要进行扩展和修改。

回到顶部