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

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

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

插件介绍

internet_connectivity_checker 是一个用于检测设备是否真正连接到互联网的Flutter插件。与connectivity等类似包不同,它不仅提供网络连接信息,还确认设备是否能访问互联网。这使得我们可以根据设备的实际互联网状态来动态管理应用中的组件。

Demo

开始使用

添加依赖

首先,在您的pubspec.yaml文件中添加以下依赖:

flutter pub add internet_connectivity_checker

使用方法

导入包并使用ConnectivityBuilder组件,它可以接收一个builder函数和一个可选的时间间隔参数(Duration对象),用于指定每次检查互联网连接之间等待的时间,默认为5秒。

示例代码

简单示例

下面是一个简单的例子,当设备在线时显示"Online",否则显示"Offline":

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

  @override
  Widget build(BuildContext context) {
    return ConnectivityBuilder(
      builder: (status) {
        bool connected = status == ConnectivityStatus.online;
        return Text(connected ? "Online" : "Offline");
      },
    );
  }
}

完整示例

这是一个更完整的示例,包括了UI样式设置,并且处理了三种不同的状态:在线、离线以及正在检查的状态。

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

void main() => runApp(const App());

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

  @override
  Widget build(BuildContext context) {
    TextStyle kTextStyle = Theme.of(context)
        .textTheme
        .headlineMedium!
        .copyWith(color: Colors.white);
    return MaterialApp(
      theme: ThemeData.dark(useMaterial3: true),
      home: Scaffold(
        backgroundColor: const Color(0XFF000F1D),
        appBar: AppBar(
          centerTitle: true,
          title: const Text("Internet Connectivity Checker"),
        ),
        body: Center(
          child: Container(
            width: 300,
            height: 300,
            margin: const EdgeInsets.all(20),
            child: ConnectivityBuilder(
              interval: const Duration(seconds: 5),
              builder: (ConnectivityStatus status) {
                if (status == ConnectivityStatus.online) {
                  return Container(
                    decoration: BoxDecoration(
                      color: Colors.green,
                      borderRadius: BorderRadius.circular(15),
                    ),
                    child: Center(child: Text("Online", style: kTextStyle)),
                  );
                } else if (status == ConnectivityStatus.offline) {
                  return Container(
                    decoration: BoxDecoration(
                      color: Colors.red,
                      borderRadius: BorderRadius.circular(15),
                    ),
                    child: Center(child: Text("Offline", style: kTextStyle)),
                  );
                } else {
                  // status == ConnectivityStatus.checking
                  return const Center(
                    child: SizedBox(
                      width: 25,
                      height: 25,
                      child: CircularProgressIndicator(strokeWidth: 2),
                    ),
                  );
                }
              },
            ),
          ),
        ),
      ),
    );
  }
}

此外,您还可以通过监听ConnectivityChecker().stream来手动处理逻辑,如下所示:

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

  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
      stream: ConnectivityChecker(interval: const Duration(seconds: 10)).stream,
      builder: (context, snapshot) {
        if (snapshot.hasData && (snapshot.data as bool) == true) {
          return const Text("Online");
        } else if (snapshot.connectionState == ConnectionState.waiting) {
          return const Center(child: CircularProgressIndicator());
        } else {
          return const Text("Offline");
        }
      },
    );
  }
}

额外信息

如果您觉得这个项目有用,请不要吝啬给个星🌟。同时欢迎提交Pull Request或创建Issue来帮助改进该项目。

许可证

本软件采用MIT许可证发布,详情请参阅许可证文件

希望以上内容对您有所帮助!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter项目中使用internet_connectivity_checker插件来检测网络连接的示例代码。

首先,确保你已经在pubspec.yaml文件中添加了internet_connectivity_checker依赖:

dependencies:
  flutter:
    sdk: flutter
  internet_connectivity_checker: ^0.0.1+3  # 请检查最新版本号

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

接下来,在你的Flutter应用中,你可以按照以下步骤使用internet_connectivity_checker插件来检测网络连接状态。

1. 导入插件

在你的Dart文件中导入internet_connectivity_checker插件:

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

2. 创建网络连接检测逻辑

你可以创建一个函数或类来管理网络连接检测逻辑。以下是一个简单的示例,展示如何在应用启动时检测网络连接状态,并在网络连接状态改变时更新UI。

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final InternetConnectivityChecker _connectivityChecker =
      InternetConnectivityChecker();
  String _connectionStatus = 'Unknown';

  @override
  void initState() {
    super.initState();
    _checkConnectivity();
    _connectivityChecker.subscribe((connectivityResult) {
      // 更新UI
      setState(() {
        _connectionStatus = _getConnectionStatus(connectivityResult);
      });
    });
  }

  @override
  void dispose() {
    _connectivityChecker.unsubscribe();
    super.dispose();
  }

  Future<void> _checkConnectivity() async {
    var connectivityResult = await _connectivityChecker.checkConnectivity();
    setState(() {
      _connectionStatus = _getConnectionStatus(connectivityResult);
    });
  }

  String _getConnectionStatus(ConnectivityResult result) {
    switch (result) {
      case ConnectivityResult.wifi:
        return 'Connected to WiFi';
      case ConnectivityResult.mobile:
        return 'Connected to Mobile Network';
      case ConnectivityResult.none:
        return 'Not Connected';
      default:
        return 'Unknown';
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Network Connectivity Checker'),
        ),
        body: Center(
          child: Text(
            _connectionStatus,
            style: TextStyle(fontSize: 24),
          ),
        ),
      ),
    );
  }
}

解释

  1. 导入插件:首先导入internet_connectivity_checkerflutter/material.dart
  2. 创建MyApp:这是一个StatefulWidget,用于管理应用的状态。
  3. 初始化状态:在initState方法中,调用_checkConnectivity函数来检查初始的网络连接状态,并订阅网络连接变化事件。
  4. 检查网络连接_checkConnectivity函数使用_connectivityChecker.checkConnectivity()来异步获取当前的连接状态,并更新UI。
  5. 处理网络连接变化:在订阅的回调函数中,每当网络连接状态发生变化时,更新UI。
  6. 取消订阅:在dispose方法中取消订阅,以防止内存泄漏。
  7. 构建UI:在build方法中,使用CenterText组件来显示当前的网络连接状态。

这个示例展示了如何使用internet_connectivity_checker插件来检测Flutter应用中的网络连接状态,并在状态变化时更新UI。你可以根据需要在应用中进一步扩展和优化这一逻辑。

回到顶部