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

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

简介

s_network_connection_checker 是一个用于检测网络连接状态的 Flutter 插件。通过该插件,您可以轻松检测设备是否具有互联网连接,并实时监听网络状态的变化。


截图

基本用法 底部提示
基本用法示例 底部提示示例
全屏加载动画
全屏加载动画示例

配置参数

以下是一些关键配置参数:

  • [failedPingCount] - 检测到失败的 ping 次数达到此值时,认为网络已断开。
  • [reTryDuration] - 每隔多久发送一次 ping 请求。
  • [pingTimeout] - 如果在指定时间内未收到响应,则认为请求失败。
  • [urls] - 要进行 ping 的目标地址列表,默认取第一个元素。

示例代码

SNetworkConnectionChecker.instance.setConfig(
  failedPingCount: 2,         // 失败次数
  pingTimeout: const Duration(seconds: 2), // 超时时间
  reTryDuration: const Duration(seconds: 3), // 重试间隔
  urls: [
    SIpModel("Google 1", "8.8.8.8", 53), // Google DNS 1
    SIpModel("Google 2", "8.8.4.4", 53), // Google DNS 2
  ],
);

使用方法

检查是否有网络连接

使用 hasConnection() 方法可以快速检查当前设备是否联网。

var hasConnection = await SNetworkConnectionChecker.instance.hasConnection();

print("Has connection $hasConnection");
runApp(const FullScreenWarningWithOpacity());

监听网络连接状态变化

通过监听 isConnected 流,您可以实时获取网络连接的状态。

void main() async {
  // 开始监听网络状态
  SNetworkConnectionChecker.instance.startListen();
  runApp(const FullScreenWarningWithOpacity());
}

// 监听网络连接状态变化
SNetworkConnectionChecker.instance.isConnected.listen(
  (value) {
    // true 表示已连接,false 表示未连接,null 表示正在加载
    print("Connection status changed $value");
  },
);

在 UI 中使用

基本用法

MaterialApp(
  title: 'SNetwork connection checker example',
  theme: ThemeData(
    colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
    useMaterial3: true,
  ),
  builder: (context, child) {
    return Scaffold(
      body: SNetworkConnectionCheckerWidget(
        loadingBuilder: () {
          return const Center(child: Text("Loading")); // 加载页面
        },
        disConnectedBuilder: () {
          return const Center(child: Text("Custom disconnected page")); // 断开连接页面
        },
        child: child!, // 主页面内容
      ),
    );
  },
  home: const Scaffold(
    body: Center(
      child: Text("Connected"), // 已连接页面
    ),
  ),
);

其他用法

通过 builder 方法动态控制 UI 状态。

MaterialApp(
  title: 'SNetwork connection checker example',
  theme: ThemeData(
    colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
    useMaterial3: true,
  ),
  builder: (context, child) {
    return Scaffold(
      body: SNetworkConnectionChecker.instance.isConnected.builder((loading, isConnected, error, context) {
        if (isConnected == null) {
          return const Center(
            child: Text("Loading"), // 加载中
          );
        }
        return Stack(
          children: [
            // 动画效果:根据连接状态调整透明度
            AnimatedOpacity(
              opacity: isConnected ? 1 : 0.1,
              duration: const Duration(milliseconds: 100),
              child: IgnorePointer(
                ignoring: isConnected == false,
                child: child, // 主页面内容
              ),
            ),
            // 显示断网提示
            if (!isConnected)
              const Align(
                alignment: Alignment.center,
                child: Center(
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Text("No connection"), // 无网络提示
                      Text("Please check your network connection"), // 检查网络提示
                    ],
                  ),
                ),
              ),
          ],
        );
      }),
    );
  },
  home: const Scaffold(
    body: Center(
      child: Text("Home page"), // 主页内容
    ),
  ),
);

示例代码

以下是完整的示例代码,展示如何使用 s_network_connection_checker 插件。

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

void main() async {
  // 初始化配置
  var hasConnection = await SNetworkConnectionChecker.instance.hasConnection();
  SNetworkConnectionChecker.instance.selectedIp.setState(SIpModel("Google 1", "8.8.8.8", 53));
  SNetworkConnectionChecker.instance.setConfig(
    failedPingCount: 2,
    pingTimeout: const Duration(seconds: 2),
    reTryDuration: const Duration(seconds: 3),
    urls: [
      SIpModel("Google 1", "8.8.8.8", 53),
      SIpModel("Google 2", "8.8.4.4", 53),
    ],
  );

  print("Has connection $hasConnection");
  runApp(const FullScreenWarningWithOpacity());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 开始监听网络状态
    SNetworkConnectionChecker.instance.isConnected.listen(
      (value) {
        print("Connection status changed $value");
      },
    );
    return MaterialApp(
      title: 'SNetwork connection checker example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      builder: (context, child) {
        return Scaffold(
          body: SNetworkConnectionCheckerWidget(
            loadingBuilder: () {
              return const Center(child: Text("Loading"));
            },
            disConnectedBuilder: () {
              return const Center(child: Text("Custom disconnected page"));
            },
            child: child!,
          ),
        );
      },
      home: const Scaffold(
        body: Center(
          child: Text("Connected"),
        ),
      ),
    );
  }
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 开始监听网络状态
    SNetworkConnectionChecker.instance.startListen();
    return MaterialApp(
      title: 'SNetwork connection checker example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      builder: (context, child) {
        return Scaffold(
          body: SNetworkConnectionChecker.instance.isConnected.builder((loading, isConnected, error, context) {
            if (isConnected == null) {
              return const Center(
                child: Text("Loading"),
              );
            }
            return Stack(
              children: [
                AnimatedOpacity(
                  opacity: isConnected ? 1 : 0.1,
                  duration: const Duration(milliseconds: 100),
                  child: IgnorePointer(
                    ignoring: isConnected == false,
                    child: child,
                  ),
                ),
                if (!isConnected)
                  const Align(
                    alignment: Alignment.center,
                    child: Center(
                      child: Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          Text("No connection"),
                          Text("Please check your network connection"),
                        ],
                      ),
                    ),
                  ),
              ],
            );
          }),
        );
      },
      home: const Scaffold(
        body: Center(
          child: Text("Home page"),
        ),
      ),
    );
  }
}

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

1 回复

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


s_network_connection_checker 是一个用于检测网络连接的 Flutter 插件。它可以帮助你检查设备是否连接到互联网,并确定连接的类型(如 WiFi 或移动数据)。以下是如何使用 s_network_connection_checker 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  s_network_connection_checker: ^1.0.0  # 请使用最新版本

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

2. 导入插件

在需要使用网络检测功能的 Dart 文件中导入插件:

import 'package:s_network_connection_checker/s_network_connection_checker.dart';

3. 检查网络连接

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

void checkNetworkConnection() async {
  bool isConnected = await SNetworkConnectionChecker.isConnected();
  if (isConnected) {
    print("Device is connected to the internet.");
  } else {
    print("Device is not connected to the internet.");
  }
}

4. 检查连接类型

你还可以检查设备当前使用的网络类型(如 WiFi 或移动数据):

void checkConnectionType() async {
  ConnectionType connectionType = await SNetworkConnectionChecker.getConnectionType();
  switch (connectionType) {
    case ConnectionType.wifi:
      print("Connected via WiFi.");
      break;
    case ConnectionType.mobile:
      print("Connected via mobile data.");
      break;
    case ConnectionType.none:
      print("No network connection.");
      break;
  }
}

5. 监听网络连接变化

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

void listenToNetworkChanges() {
  SNetworkConnectionChecker.onConnectionChange.listen((bool isConnected) {
    if (isConnected) {
      print("Network connection is active.");
    } else {
      print("Network connection is lost.");
    }
  });
}

6. 完整示例

以下是一个完整的示例,展示了如何使用 s_network_connection_checker 插件来检查网络连接状态和类型,并监听连接变化:

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

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

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

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

class _NetworkCheckScreenState extends State<NetworkCheckScreen> {
  bool isConnected = false;
  ConnectionType connectionType = ConnectionType.none;

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

  void checkNetworkConnection() async {
    isConnected = await SNetworkConnectionChecker.isConnected();
    connectionType = await SNetworkConnectionChecker.getConnectionType();
    setState(() {});
  }

  void listenToNetworkChanges() {
    SNetworkConnectionChecker.onConnectionChange.listen((bool isConnected) {
      setState(() {
        this.isConnected = isConnected;
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Network Connection Checker"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              isConnected ? "Connected" : "Disconnected",
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            Text(
              "Connection Type: ${connectionType.toString().split('.').last}",
              style: TextStyle(fontSize: 18),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部