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

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

ConnectionChecker 是一个简单的Flutter包,允许你检查互联网连接或任何由用户提供的URI的连接状态。该包提供了简单的方式来验证设备是否在线或是否可以访问特定的端点,非常适合需要进行网络状态验证的应用。

功能

  • 检查互联网连接。
  • 验证到特定URI的连接。
  • 轻量且易于集成到Flutter项目中。
  • 处理不同的网络类型(如Wi-Fi、移动数据等)。
  • 使用套接字进行快速可靠的连接检查。

安装

在你的pubspec.yaml文件中添加包:

dependencies:
  connectivity_checker: latest_version

然后运行以下命令以获取依赖项:

flutter pub get

使用

Android权限

Android应用必须在Android清单文件(AndroidManifest.xml)中声明其使用互联网的权限:

<manifest xmlns:android...>
 ...
 <uses-permission android:name="android.permission.INTERNET" />
 <application ...
</manifest>

iOS权限

对于iOS,必须在Info-debug.plist中添加以下内容:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

macOS权限

macOS应用必须在相关的*.entitlements文件中允许网络访问:

<key>com.apple.security.network.client</key>
<true/>

检查互联网连接

要检查设备是否已连接到互联网:

import 'package:connectivity_checker/connectivity_checker.dart';

void checkConnectivity() async {
  bool isConnected = await ConnectionChecker.hasConnection();
  print('Internet Connected: $isConnected');
}

检查到特定URI的连接

要检查到特定URI的连接:

import 'package:connectivity_checker/connectivity_checker.dart';

void checkConnectivity() async {
  String uri = 'https://example.com';
  bool isConnected = await ConnectionChecker.checkConnectivity(HttpOption(url: uri));
  print('Connected to $uri: $isConnected');
}

监听连接变化

你还可以订阅设备连接状态(在线/离线)的变化:

import 'package:connectivity_checker/connectivity_checker.dart';

void monitorConnectivityChanges() {
  ConnectionChecker.onConnectivityChanged.listen((status) {
    if (status == ConnectivityResult.connected) {
      print('Device is online');
    } else {
      print('Device is offline');
    }
  });
}

API 参考

1. checkConnectivity()

  • 描述: 检查设备是否有活跃的互联网连接。
  • 返回值: 返回一个Future<bool>,如果连接则为true,否则为false

2. checkConnectivity(String url)

  • 描述: 检查特定URI是否可以通过互联网访问。
  • 参数:
    • url (String): 需要检查的URI。
  • 返回值: 返回一个Future<bool>,如果URI可访问则为true,否则为false

3. onConnectivityChanged

  • 描述: 一个监听连接状态变化的流。
  • 返回值: 返回一个Stream<ConnectivityResult>,广播连接状态的变化(例如connecteddisconnected)。

示例

这是一个完整的示例,展示了如何在Flutter应用中使用ConnectionChecker

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:connectivity_checker/connectivity_checker.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> {
  late final StreamSubscription<ConnectivityResult> _subscription;
  ValueNotifier<bool> res = ValueNotifier<bool>(true);

  [@override](/user/override)
  void initState() {
    super.initState();
    var i = ConnectionChecker();

    _subscription = i.onConnectivityChanged.listen((status) {
      res.value = status == ConnectivityResult.connected;
    });
  }

  [@override](/user/override)
  void dispose() {
    _subscription.cancel();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: ValueListenableBuilder(
            valueListenable: res,
            builder: (context, value, child) {
              return Text("$value");
            },
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


在 Flutter 中,connection_checker 是一个用于检测设备网络连接状态的插件。它可以帮助你检查设备是否连接到互联网,以及连接的类型(如 Wi-Fi 或移动数据)。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 connection_checker 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  connection_checker: ^0.0.1 # 请检查最新版本

然后运行 flutter pub get 来安装插件。

使用插件

1. 导入插件

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

import 'package:connection_checker/connection_checker.dart';

2. 检查网络连接

你可以使用 ConnectionChecker 类来检查设备的网络连接状态。以下是一个简单的示例:

void checkConnection() async {
  bool isConnected = await ConnectionChecker().hasConnection;

  if (isConnected) {
    print("设备已连接到互联网");
  } else {
    print("设备未连接到互联网");
  }
}

3. 监听网络连接变化

你还可以监听网络连接的变化,以便在连接状态发生变化时执行某些操作:

void listenToConnectionChanges() {
  ConnectionChecker().onStatusChange.listen((bool isConnected) {
    if (isConnected) {
      print("设备已连接到互联网");
    } else {
      print("设备未连接到互联网");
    }
  });
}

4. 获取连接类型

connection_checker 还允许你获取当前的网络连接类型(如 Wi-Fi 或移动数据):

void getConnectionType() async {
  ConnectionType connectionType = await ConnectionChecker().getConnectionType;

  switch (connectionType) {
    case ConnectionType.wifi:
      print("设备连接到 Wi-Fi");
      break;
    case ConnectionType.mobile:
      print("设备连接到移动数据");
      break;
    case ConnectionType.none:
      print("设备未连接到互联网");
      break;
  }
}

完整示例

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

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  bool _isConnected = false;
  String _connectionType = 'Unknown';

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

  void checkConnection() async {
    bool isConnected = await ConnectionChecker().hasConnection;
    ConnectionType connectionType = await ConnectionChecker().getConnectionType;

    setState(() {
      _isConnected = isConnected;
      _connectionType = connectionType.toString();
    });
  }

  void listenToConnectionChanges() {
    ConnectionChecker().onStatusChange.listen((bool isConnected) {
      setState(() {
        _isConnected = isConnected;
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Connection Checker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Connected: $_isConnected',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            Text(
              'Connection Type: $_connectionType',
              style: TextStyle(fontSize: 24),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部