Flutter网络设备扫描插件arp_scanner的使用
Flutter网络设备扫描插件arp_scanner的使用
arp_scanner
是一个用于在本地网络中发现设备的 Flutter 插件。它返回 IPv4 地址、MAC 地址、接口供应商和主机名。
限制
- 该插件仅支持 Android SDK 版本 29。
- 主机名解析仅在 2.4G Wi-Fi 下工作,否则将返回
null
。
使用
要使用此插件,将其添加为依赖项到你的 pubspec.yaml
文件中:
dependencies:
arp_scanner: ^版本号
修改 App 的 build.gradle
将 build.gradle
中的 compileSdkVersion
改为 29:
android {
....
compileSdkVersion 29
....
}
修改 Project 的 build.gradle
将 build.gradle
中的 Kotlin 版本改为 1.5.30 或更高版本:
buildscript {
...
ext.kotlin_version = '1.5.30'
...
}
修复 Duplicate class com.google.gson
错误
在 build.gradle
文件中排除 gson
模块:
android {
configurations {
all {
exclude module: 'gson'
}
}
}
示例
你可以在这里找到示例代码:示例代码
示例代码
import 'package:arp_scanner/device.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:arp_scanner/arp_scanner.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _result = ''; // 用于存储扫描结果
[@override](/user/override)
void initState() {
super.initState();
// 监听扫描过程中的设备事件
ArpScanner.onScanning.listen((Device device) {
setState(() {
_result = "${_result}Mac:${device.mac} ip:${device.ip} hostname:${device.hostname} time:${device.time} vendor:${device.vendor} \n";
});
});
// 监听扫描完成后的事件
ArpScanner.onScanFinished.listen((List<Device> devices) {
setState(() {
_result = "${_result}total: ${devices.length}";
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
floatingActionButton: FloatingActionButton( // 扫描按钮
child: const Icon(Icons.scanner_sharp),
onPressed: () async {
// 执行子网设备扫描
await ArpScanner.scan();
setState(() {
_result = ""; // 清空结果
});
}),
appBar: AppBar(
actions: <Widget>[ // 取消按钮
IconButton(
icon: const Icon(Icons.cancel),
onPressed: () async {
await ArpScanner.cancel(); // 取消扫描
},
),
],
title: const Text('插件示例应用'),
),
body: Center(
child: Text(_result), // 显示扫描结果
),
),
);
}
}
更多关于Flutter网络设备扫描插件arp_scanner的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络设备扫描插件arp_scanner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用arp_scanner
插件进行网络设备扫描的示例代码。这个插件允许你通过ARP请求扫描同一局域网内的设备。
首先,你需要在你的pubspec.yaml
文件中添加arp_scanner
依赖:
dependencies:
flutter:
sdk: flutter
arp_scanner: ^0.4.0 # 请检查最新版本号
然后运行flutter pub get
来获取依赖。
接下来,你可以在你的Flutter项目中编写代码来使用这个插件。以下是一个简单的示例,展示了如何扫描网络设备并打印结果:
import 'package:flutter/material.dart';
import 'package:arp_scanner/arp_scanner.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<NetworkDevice> devices = [];
bool isScanning = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('ARP Scanner Demo'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: isScanning ? null : scanDevices,
child: Text(isScanning ? 'Scanning...' : 'Scan Devices'),
),
SizedBox(height: 20),
Expanded(
child: ListView.builder(
itemCount: devices.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('Device: ${devices[index].ipAddress}'),
subtitle: Text('MAC: ${devices[index].macAddress}'),
);
},
),
),
],
),
),
);
}
Future<void> scanDevices() async {
setState(() {
isScanning = true;
devices = [];
});
try {
List<NetworkDevice> result = await ArpScanner.scan();
setState(() {
devices = result;
isScanning = false;
});
} catch (e) {
print('Error scanning devices: $e');
setState(() {
isScanning = false;
});
}
}
}
在这个示例中,我们定义了一个简单的Flutter应用,其中包含一个按钮用于启动扫描,以及一个列表视图用于显示扫描到的设备。
代码说明:
-
依赖导入:
- 导入
flutter/material.dart
用于UI组件。 - 导入
arp_scanner/arp_scanner.dart
用于ARP扫描功能。
- 导入
-
主应用:
MyApp
是一个有状态的Widget,包含设备列表和扫描状态。
-
UI布局:
- 使用
Column
布局包含按钮和列表视图。 - 按钮用于启动扫描,当扫描进行时按钮文本变为"Scanning…"且不可点击。
- 列表视图显示扫描到的设备IP地址和MAC地址。
- 使用
-
扫描功能:
scanDevices
方法使用ArpScanner.scan()
方法异步扫描设备。- 扫描结果存储在
devices
列表中,并更新UI。 - 捕获任何扫描过程中可能发生的异常并打印错误信息。
确保你的设备具有适当的权限来执行ARP请求,这通常需要在Android的AndroidManifest.xml
中添加适当的网络权限。对于iOS,通常不需要额外的配置,但始终建议检查插件的文档以确认任何平台特定的要求。
注意:这个插件可能不适用于所有设备和所有网络环境,特别是如果设备或网络有特殊的安全设置或防火墙规则。