Flutter网络连接状态检测插件connectivity_plus_widget的使用

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

Flutter网络连接状态检测插件connectivity_plus_widget的使用

是否在寻找一种简单的方法来在您的Flutter应用中显示当前的网络连接状态?请查看Dart编程语言的软件包仓库pub.dev上的"connectivity_plus_widget"包!

此插件提供了一个可自定义的小部件,当没有互联网连接时会自动显示,并且当连接恢复时会自动消失。您还可以自定义小部件的属性,并传递自己的小部件来使用。此外,该插件允许您在应用的任何位置使用connectivity plus小部件。

如果您想简化Flutter应用中网络连接的管理,不妨试试"connectivity_plus_widget"插件。它可能会为您节省开发过程中的时间和精力!

特性

  • 当没有互联网连接时,小部件会自动显示。
  • 当有互联网连接时,小部件会自动消失。
  • 您可以自定义connectivity plus小部件的属性。
  • 您可以传递自己的小部件。
  • 您可以在应用的任何位置使用connectivity plus小部件。
  • 您也可以在调用API或进行任何网络操作之前检查互联网状态。
  • 插件还支持跑马灯文字。

使用方法

在添加依赖后,在主函数中添加以下代码以启用整个应用的连接检查流:

WidgetsFlutterBinding.ensureInitialized();
ConnectivityPlusService().initConnectivityService();

示例代码

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  ConnectivityPlusService().initConnectivityService();
  runApp(const MyApp());
}

调用小部件

ConnectivityPlusWidget(
  backgroundColor: Colors.red,
  height: 40,
  marquee: false,
  textStyle: const TextStyle(fontSize: 20, color: Colors.white),
),

ConnectivityPlusCustomWidget(
  customWidget: const Center(
    child: Icon(Icons.wifi_off_outlined, color: Colors.red, size: 100),
  ),
),

ConnectivityPlusWidget(
  backgroundColor: Colors.orange,
  height: 40,
  marquee: true,
  textStyle: const TextStyle(fontSize: 20, color: Colors.white),
  decoration: BoxDecoration(
    color: Colors.orange,
    borderRadius: BorderRadius.only(
      topLeft: const Radius.circular(20.0),
      topRight: const Radius.circular(20.0)
    )
  ),
),

检查互联网状态

如果您想在调用API或执行任何网络操作之前检查互联网状态,请调用ConnectivityPlusServicegetInternetStatus函数,该函数将返回一个布尔值。

log(ConnectivityPlusService().getInternetStatus().toString(), name: "status");

示例代码:main.dart

import 'package:connectivity_plus_widget/connectivity/connectivity_plus_service.dart';
import 'package:connectivity_plus_widget/connectivity/connectivity_widget.dart';
import 'package:flutter/material.dart';
import 'dart:developer';
import 'package:flutter/cupertino.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  ConnectivityPlusService().initConnectivityService();
  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Connectivity Plus Widget Example',
      home: Screen1(),
    );
  }
}

class Screen1 extends StatelessWidget {
  const Screen1({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
          body: Column(
        children: [
          ConnectivityPlusWidget(
            backgroundColor: Colors.red,
            height: 40,
            marquee: false,
            textStyle: const TextStyle(fontSize: 20, color: Colors.white),
          ),
          const Spacer(),
          ConnectivityPlusWidget(
            width: 300,
            backgroundColor: Colors.grey,
            textStyle: const TextStyle(fontSize: 20),
          ),
          const Spacer(),
          ConnectivityPlusWidget(
            backgroundColor: Colors.orange,
            height: 100,
            notConnectedText: "Custom Text",
            marquee: true,
            textStyle: const TextStyle(fontSize: 30, color: Colors.white),
            decoration: BoxDecoration(
              color: Colors.blueAccent,
              border: Border.all(
                width: 10,
                color: Colors.red,
              ),
            ),
          ),
          const Spacer(),
          ConnectivityPlusCustomWidget(
            customWidget: Center(
              child: Container(
                child: const Center(child: Text("Custom Widget ")),
                height: 100,
                width: 300,
                decoration: BoxDecoration(
                  color: Colors.greenAccent,
                  border: Border.all(
                    width: 10,
                    color: Colors.black,
                  ),
                ),
              ),
            ),
          ),
          const Spacer(),
          CupertinoButton(
              child: const Text("点击这里检查互联网状态"),
              onPressed: () {
                log(ConnectivityPlusService().getInternetStatus().toString(), name: "status");
              }),
          Container(
            margin: const EdgeInsets.all(20),
            child: ConnectivityPlusWidget(
              notConnectedText: "无网络",
              marquee: false,
              padding: const EdgeInsets.all(10),
              backgroundColor: Colors.orange,
              height: 50,
              textStyle: const TextStyle(fontSize: 20, color: Colors.red),
              decoration: BoxDecoration(
                color: Colors.amberAccent,
                borderRadius: BorderRadius.all(
                  const Radius.circular(40.0),
                ),
              ),
            ),
          ),
          const Spacer(),
          ConnectivityPlusCustomWidget(
            customWidget: const Center(
              child: Icon(
                Icons.wifi_off_outlined,
                color: Colors.red,
                size: 100,
              ),
            ),
          ),
          const Spacer(),
          ConnectivityPlusWidget(
            backgroundColor: Colors.orange,
            height: 40,
            marquee: true,
            textStyle: const TextStyle(fontSize: 20, color: Colors.white),
            decoration: BoxDecoration(
              color: Colors.orange,
              borderRadius: BorderRadius.only(
                topLeft: const Radius.circular(20.0),
                topRight: const Radius.circular(20.0)
              )
            ),
          ),
          ConnectivityPlusWidget(
            backgroundColor: Colors.red,
            height: 40,
            marquee: true,
            textStyle: const TextStyle(fontSize: 20, color: Colors.white),
          ),
        ],
      )),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用connectivity_plus_widget插件来检测网络连接状态的示例代码。这个插件是connectivity_plus的扩展,提供了更方便的UI组件来显示网络连接状态。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  connectivity_plus: ^2.0.0 # 请检查最新版本号
  connectivity_plus_widget: ^0.3.0 # 请检查最新版本号

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

步骤 2: 导入包

在你的Dart文件中导入必要的包:

import 'package:flutter/material.dart';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:connectivity_plus_widget/connectivity_plus_widget.dart';

步骤 3: 使用ConnectivityPlusWidget

以下是一个完整的示例,展示如何在Flutter应用中使用ConnectivityPlusWidget来检测网络连接状态:

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

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

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

class _ConnectivityScreenState extends State<ConnectivityScreen> {
  late ConnectivityResult _connectivityResult;

  @override
  void initState() {
    super.initState();
    initConnectivity();
    Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
      setState(() {
        _connectivityResult = result;
      });
    });
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Connectivity Status'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ConnectivityPlusWidget(
              connectivityResult: _connectivityResult,
              builder: (context, result) {
                String text = 'No Internet Connection';
                Color color = Colors.red;

                if (result == ConnectivityResult.wifi || result == ConnectivityResult.mobile) {
                  text = 'Connected to Internet';
                  color = Colors.green;
                } else if (result == ConnectivityResult.none) {
                  text = 'No Internet Connection';
                  color = Colors.red;
                } else if (result == ConnectivityResult.bluetooth || result == ConnectivityResult.ethernet) {
                  text = 'Other Network';
                  color = Colors.orange;
                }

                return Text(
                  text,
                  style: TextStyle(color: color, fontSize: 24),
                );
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                ConnectivityResult result = await Connectivity().checkConnectivity();
                setState(() {
                  _connectivityResult = result;
                });
              },
              child: Text('Check Connectivity'),
            ),
          ],
        ),
      ),
    );
  }
}

解释

  1. 依赖导入:我们导入了connectivity_plusconnectivity_plus_widget包。
  2. 初始化状态:在initState方法中,我们初始化网络连接状态,并监听连接状态的变化。
  3. UI构建:使用ConnectivityPlusWidget来显示当前的网络连接状态,并根据状态改变显示的文本和颜色。
  4. 手动检查:提供了一个按钮,允许用户手动检查网络连接状态。

这个示例展示了如何使用connectivity_plus_widget来检测并显示网络连接状态。你可以根据需要进一步自定义UI和逻辑。

回到顶部