zero_network_kit 1.0.5
zero_network_kit: ^1.0.5 copied to clipboard
Network diagnostics toolkit for Flutter: connectivity, ping, DNS, speed test, port scan and quality scoring across Android, iOS, macOS, Windows, Linux and Web.
Changelog #
1.0.5 #
Fixed / 修复 #
- Upload speed measurement — the upload duration now stops as soon as the
request body is fully sent, so the server's response download no longer
inflates the measured upload throughput (and the reported
SpeedTestProgressvalue stays consistent with the final result).- 上传速率测量——上传耗时改为在请求体完全发出时即停止,服务器回包下载时间不再计入,上传速率与进度回调数值保持一致。
- Web connectivity listener leak —
WebConnectivityAdapter.onConnectivityChangednow attaches theonline/offlinebrowser listeners on the first subscription and detaches them on the last cancellation, so repeated subscriptions no longer accumulate global event listeners.- Web 连通性监听泄漏——
WebConnectivityAdapter.onConnectivityChanged改为首次订阅时挂载、末次取消时移除浏览器的online/offline监听,反复订阅不再累积全局监听。
- Web 连通性监听泄漏——
- Web DNS DoH contract — an explicit DNS server with no known DoH endpoint now
returns the documented "unsupported" result instead of probing an arbitrary
https://<server>/dns-queryURL.- Web 端 DNS DoH 契约——对没有已知 DoH 端点的显式 DNS 服务器,现在按文档返回"不支持"结果,而非去请求一个未必提供 DoH 的
https://<server>/dns-query地址。
- Web 端 DNS DoH 契约——对没有已知 DoH 端点的显式 DNS 服务器,现在按文档返回"不支持"结果,而非去请求一个未必提供 DoH 的
- Web ping RTT — the TCP-probe ping on the web stops the timer at the response
headers, so a large response body no longer inflates the reported latency.
- Web 端 Ping RTT——Web 端的 TCP 探测 ping 在收到响应头即停表,响应体大小不再抬高测得的延迟。
Added / 新增 #
- IPv6 DNS resolution — the raw-UDP resolver now sends both A and AAAA
queries and binds a wildcard socket that matches the target server's address
family, so IPv6 answers are resolved too (previously only IPv4).
- IPv6 DNS 解析——原始 UDP 解析器现在同时发送 A 与 AAAA 查询,并按目标服务器地址族绑定通配套接字,从而也能解析出 IPv6 地址(此前仅限 IPv4)。
1.0.4 #
Fixed / 修复 #
- Web/WASM build — the platform-specific implementations are now selected by
gating the
dart:iovariants behinddart.library.io, using the browser-based variants as the fallback. Previously the conditional exports defaulted to thedart:iovariants, so an environment that does not definedart.library.htmlstill resolved them and pulleddart:iointo the Web build. Runtime behaviour is unchanged on every supported platform: native still uses thedart:iovariants, the Web still uses the browser-based ones.- Web/WASM 构建——各平台实现改为按
dart.library.io条件引入原生版本,并以 浏览器版本作为兜底。此前条件导出默认使用dart:io版本,未定义dart.library.html的环境仍会解析到它们,从而把dart:io带入 Web 构建。 各平台运行时行为不变:原生仍使用dart:io版本,Web 仍使用基于浏览器的版本。
- Web/WASM 构建——各平台实现改为按
1.0.3 #
Fixed / 修复 #
- WASM compatibility — the web connectivity implementation no longer imports
connectivity_plus(whose non-web default branch pulls in the Linux-onlynmpackage). It now talks to the browser directly throughpackage:web(navigator.onLineplus theonline/offlineevents), so the package scores full marks (20/20) on pub.dev's platform-support check and compiles withflutter build web --wasm.connectivity_plusis still used on native platforms.- WASM 兼容性——Web 端连通性实现不再导入
connectivity_plus(其非 Web 默认分支会引入仅限 Linux 的nm包),改为通过package:web(navigator.onLine与online/offline事件)直接与浏览器交互。包在 pub.dev 平台支持项中得满分(20/20),且可用flutter build web --wasm编译。connectivity_plus在原生平台仍继续使用。
- WASM 兼容性——Web 端连通性实现不再导入
1.0.2 #
Added / 新增 #
- Swift Package Manager support — iOS and macOS now ship a
Package.swiftnext to the CocoaPods podspec, so the plugin keeps working in projects that have migrated to SwiftPM. Native sources moved to<platform>/zero_network_kit/Sources/zero_network_kit/.- 支持 Swift Package Manager——iOS 与 macOS 在 CocoaPods podspec 之外新增
Package.swift,使插件在已迁移 SwiftPM 的工程中同样可用。原生源码移至<platform>/zero_network_kit/Sources/zero_network_kit/。
- 支持 Swift Package Manager——iOS 与 macOS 在 CocoaPods podspec 之外新增
Fixed / 修复 #
- Package description — the pub.dev description still advertised only five
platforms after Web support shipped; it now lists all six.
- 包描述——Web 支持上线后,pub.dev 上的描述仍只宣传五个平台,现已列出全部六个。
- podspec metadata — replaced the leftover macOS template values (placeholder
summary,
example.comhomepage,Your Companyauthor) and the iOS author with the real project metadata, and enabled the privacy manifest resource bundle on both platforms.- podspec 元信息——把 macOS 残留的模板值(占位 summary、
example.com主页、Your Company作者)与 iOS 的作者替换为真实项目信息,并在两个平台启用隐私清单资源包。
- podspec 元信息——把 macOS 残留的模板值(占位 summary、
1.0.1 #
Added / 新增 #
- Web platform (partial) — the package now compiles and runs on Flutter Web.
Connectivity is backed by
connectivity_plus, ping falls back to an HTTPS round trip, DNS resolution uses DNS-over-HTTPS, and the speed test, quality score and benchmarks work unchanged. Capabilities the browser sandbox forbids degrade gracefully: native details (SSID / gateway / MAC / VPN) reportnulland TCP port checks return an "unavailable" result instead of throwing. CallNetworkCapabilities.current()to discover the supported set at runtime.- Web 平台(部分支持)——包现已可在 Flutter Web 上编译运行。连通性由
connectivity_plus提供,Ping 退化为 HTTPS 往返耗时,DNS 解析改用 DNS-over-HTTPS,测速、质量评分与基准测试行为不变。浏览器沙箱禁止的能力会优雅降级: 原生详情(SSID / 网关 / MAC / VPN)返回null,TCP 端口检测返回"不可用"结果而非抛异常。 运行时可调用NetworkCapabilities.current()查询当前支持的能力集合。
- Web 平台(部分支持)——包现已可在 Flutter Web 上编译运行。连通性由
Fixed / 修复 #
- Speed test on the web — download and upload requests no longer send a
Cache-Controlheader. It is not a CORS-safelisted header, so it forced an OPTIONS preflight that speed-test endpoints reject, surfacing asFailed to fetch.- Web 端测速——下载与上传请求不再携带
Cache-Control头。该头不属于 CORS 安全头,会触发 OPTIONS 预检,而测速端点会拒绝该预检,最终表现为Failed to fetch。
- Web 端测速——下载与上传请求不再携带
Changed / 变更 #
- Windows VPN detection — adapters are now also recognised from the driver
name in their description (TAP-Windows, Wintun, WireGuard, OpenVPN, …) in
addition to
IF_TYPE_TUNNEL.IF_TYPE_PPPis deliberately not treated as a VPN because PPPoE broadband reports the same interface type.- Windows VPN 检测——除
IF_TYPE_TUNNEL外,还会依据网卡描述中的驱动名识别 VPN 网卡(TAP-Windows、Wintun、WireGuard、OpenVPN 等)。有意不把IF_TYPE_PPP视为 VPN,因为 PPPoE 宽带拨号上报的也是该接口类型。
- Windows VPN 检测——除
1.0.0 #
Added / 新增 #
- Connectivity —
NetworkDiagnostic.checkConnection()returns aNetworkConnectionInfosnapshot with transport type, IPv4/IPv6, gateway, Wi-Fi SSID, signal strength (dBm), MAC address and VPN detection.NetworkDiagnostic.onConnectivityChangedstreams a fresh snapshot on every change.- 连通性——
NetworkDiagnostic.checkConnection()返回NetworkConnectionInfo快照,包含传输类型、IPv4/IPv6、网关、Wi-Fi SSID、信号强度(dBm)、MAC 地址与 VPN 检测;NetworkDiagnostic.onConnectivityChanged会在每次变化时推送新快照。
- 连通性——
- Ping —
NetworkDiagnostic.ping()measures latency with TCP handshake round trips on every platform, and can use the system ICMPpingcommand on desktop (PingMode.icmp).PingResultreports sent/received, packet loss, min/avg/max and jitter.- Ping——
NetworkDiagnostic.ping()在各平台以 TCP 握手往返测量延迟,桌面端还 可使用系统 ICMPping命令(PingMode.icmp)。PingResult提供发送/接收数、 丢包率、最小/平均/最大耗时与抖动。
- Ping——
- DNS —
NetworkDiagnostic.resolve()queriessystemplus any explicit resolvers over raw UDP, using the built-in DNS wire-format codec (DnsPacket), with concurrent or serialised execution and per-serverDnsTestResult.- DNS——
NetworkDiagnostic.resolve()通过原始 UDP 查询system及任意指定 DNS 服务器,使用内置 DNS 报文编解码器(DnsPacket),支持并发或串行执行, 并为每台服务器返回DnsTestResult。
- DNS——
- Speed test —
NetworkDiagnostic.runSpeedTest()measures download and upload throughput plus latency/jitter/packet loss, with progress callbacks viaSpeedTestProgress.- 测速——
NetworkDiagnostic.runSpeedTest()测量下载与上传速率,并附带延迟、 抖动与丢包率,通过SpeedTestProgress回调进度。
- 测速——
- Port check —
NetworkDiagnostic.checkPort()returns aPortCheckResult(useisPortOpen()for a plain boolean) andscanPorts()performs bounded-concurrency TCP reachability checks.- 端口检测——
NetworkDiagnostic.checkPort()返回PortCheckResult(仅需布尔值 时可用isPortOpen());scanPorts()以受限并发执行 TCP 可达性检测。
- 端口检测——
- Quality score —
NetworkDiagnostic.evaluateQuality()andNetworkQualityEvaluatorproduce a 0–100 weighted score with aNetworkQualityLeveland actionable suggestions.- 质量评分——
NetworkDiagnostic.evaluateQuality()与NetworkQualityEvaluator产出 0–100 的加权评分,附带NetworkQualityLevel与可执行的优化建议。
- 质量评分——
- Full report —
NetworkDiagnostic.diagnose()aggregates every probe into aNetworkDiagnosticReport.- 汇总报告——
NetworkDiagnostic.diagnose()将全部探测结果汇总为NetworkDiagnosticReport。
- 汇总报告——
- Benchmarks —
NetworkBenchmark.runAll()and friends measure the diagnostics API itself and returnBenchmarkSuiteResult.- 基准测试——
NetworkBenchmark.runAll()等方法测量诊断 API 自身的性能, 返回BenchmarkSuiteResult。
- 基准测试——
- Configuration —
NetworkDiagnosticConfigcentralises hosts, timeouts, payload sizes and quality targets;ZeroNetworkKit.init()applies it globally anddispose()releases the owned HTTP client.- 配置——
NetworkDiagnosticConfig集中管理主机、超时、负载大小与质量目标;ZeroNetworkKit.init()全局生效,dispose()释放其持有的 HTTP 客户端。
- 配置——
- Native channel —
getPlatformVersion()andgetNetworkDetails()implemented for Android (Kotlin) and iOS (Swift).- 原生通道——
getPlatformVersion()与getNetworkDetails()已在 Android (Kotlin)与 iOS(Swift)实现。
- 原生通道——
- Desktop platforms — Windows, macOS and Linux are now supported
(
pubspec.yamldeclares them);getPlatformVersion()andgetNetworkDetails()are implemented for each. On desktop, SSID / signal strength arenull; Windows additionally exposes gateway / MAC / VPN via the native layer.- 桌面平台——已支持 Windows、macOS 与 Linux(
pubspec.yaml已声明),并为各自 实现getPlatformVersion()与getNetworkDetails()。桌面端 SSID 与信号强度为null;Windows 还通过原生层额外提供网关 / MAC / VPN。
- 桌面平台——已支持 Windows、macOS 与 Linux(
- Capabilities —
NetworkDiagnostic.capabilitiesreturnsNetworkCapabilities, so callers can query-then-call and hide unsupported cards (e.g. SSID on desktop).- 能力集——
NetworkDiagnostic.capabilities返回NetworkCapabilities, 调用方可"先查询再调用",隐藏不支持的卡片(例如桌面端的 SSID)。
- 能力集——
- Advanced API — services,
ConnectivityAdapter,QualityEvaluatorand theDnsPacketcodec moved intopackage:zero_network_kit/advanced.dart; the root barrel stays small (models + facades + config).- 进阶 API——各项 service、
ConnectivityAdapter、QualityEvaluator与DnsPacket编解码器已移入package:zero_network_kit/advanced.dart;根 barrel 保持精简(仅模型 + 门面 + 配置)。
- 进阶 API——各项 service、