Flutter网络工具插件network_tools_flutter的使用

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

Flutter网络工具插件 network_tools_flutter 的使用

network_tools_flutter 是一个强大的 Flutter 插件,提供了多种网络相关的功能,如 mDNS 搜索、Ping 设备和端口扫描等。本文将介绍如何在 Flutter 项目中使用该插件。

功能

该插件扩展了 network_tools 库的功能,使其能够在 Flutter 环境下运行,并解决了平台限制问题。

开始使用

添加依赖

首先,在 pubspec.yaml 文件中添加 network_tools_flutterpath_provider 依赖:

dependencies:
  flutter:
    sdk: flutter
    
  network_tools_flutter: ^1.0.4
  path_provider: ^2.1.2

初始化插件

main() 函数中初始化插件:

import 'package:flutter/material.dart';
import 'package:network_tools_flutter/network_tools_flutter.dart';
import 'package:path_provider/path_provider.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final appDocDirectory = await getApplicationDocumentsDirectory();
  await configureNetworkToolsFlutter(appDocDirectory.path, enableDebugging: true);
  runApp(const MyApp());
}

注意:请确保调用 configureNetworkToolsFlutter 方法时传递正确的应用文档目录路径。

示例 Demo

下面是一个完整的示例 Demo,展示了如何使用 network_tools_flutter 插件进行 Ping 设备、端口扫描和 mDNS 搜索等功能。

主界面

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Home'),
      ),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          TextButton(
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => const PingableDevices(),
                ),
              );
            },
            child: const Text('Pingable Devices'),
          ),
          const SizedBox(height: 20, width: double.infinity),
          TextButton(
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => const PortScannerPage(),
                ),
              );
            },
            child: const Text('Port Scanner'),
          ),
          const SizedBox(height: 20, width: double.infinity),
          TextButton(
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => const MdnsScannerPage(),
                ),
              );
            },
            child: const Text('mDNS Scanner'),
          ),
        ],
      ),
    );
  }
}

权限配置

Android

对于 Android 平台,确保最低 API 级别为 21,并在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

iOS

对于 iOS 平台,在 Info.plist 文件中添加以下权限(替换服务类型为你自己的):

<key>NSLocalNetworkUsageDescription</key>
<string>Required to discover local network devices</string>
<key>NSBonjourServices</key>
<array>
    <string>_http._tcp</string>
</array>

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

1 回复

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


当然,以下是如何在Flutter项目中使用network_tools_flutter插件的一个基本示例。network_tools_flutter插件提供了一系列网络工具功能,如ping、traceroute、DNS查询等。以下是一个简单的示例代码,展示如何使用该插件的一些功能。

首先,确保你的Flutter项目中已经添加了network_tools_flutter依赖。在pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  network_tools_flutter: ^最新版本号  # 请替换为实际可用的最新版本号

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

接下来,你可以在你的Flutter应用中使用这些网络工具。以下是一个简单的示例,展示如何使用ping和DNS查询功能:

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

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

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

class _MyAppState extends State<MyApp> {
  String pingResult = "";
  String dnsResult = "";

  void _ping() async {
    try {
      var result = await NetworkTools.ping("google.com");
      setState(() {
        pingResult = result.toString();
      });
    } catch (e) {
      setState(() {
        pingResult = "Ping failed: $e";
      });
    }
  }

  void _dnsLookup() async {
    try {
      var result = await NetworkTools.dnsLookup("google.com");
      setState(() {
        dnsResult = result.map((e) => e.address).join(", ");
      });
    } catch (e) {
      setState(() {
        dnsResult = "DNS lookup failed: $e";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Network Tools Flutter Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text("Ping Result:", style: TextStyle(fontSize: 18)),
              Text(pingResult, style: TextStyle(fontSize: 16)),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _ping,
                child: Text('Ping google.com'),
              ),
              SizedBox(height: 20),
              Text("DNS Lookup Result:", style: TextStyle(fontSize: 18)),
              Text(dnsResult, style: TextStyle(fontSize: 16)),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _dnsLookup,
                child: Text('DNS Lookup google.com'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它有两个按钮,分别用于执行ping操作和DNS查询操作。点击按钮后,应用将显示相应的结果。

  • _ping函数使用NetworkTools.ping方法来ping一个指定的域名(在这个例子中是google.com)。
  • _dnsLookup函数使用NetworkTools.dnsLookup方法来执行DNS查询。

请注意,由于网络操作是异步的,因此我们使用了asyncawait关键字来处理这些操作,并在操作完成后使用setState方法来更新UI。

确保在实际应用中处理错误情况,并根据需要调整UI和逻辑。

回到顶部