Flutter for OpenHarmony:filesize 人类可读文件大小转换库(极简实用工具) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:filesize 人类可读文件大小转换库(极简实用工具) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

在这里插入图片描述

前言

在应用开发中,我们经常需要显示文件大小:

  • 下载进度条: 15.4 MB / 102.0 MB
  • 缓存管理页面: Clean 234.5 KB
  • 系统存储详情: Available: 12.1 GB

如果直接显示字节数 12345678 Bytes,用户会一脸茫然。我们需要将字节转换成 KB, MB, GB 等单位,并保留适当的小数位。

虽然写一个除法函数很简单,但要处理好边缘情况(如 1024 vs 1000 进制,小数点保留,单位后缀 KiB vs KB),还是直接用现成的库来得稳妥。

filesize 就是这样一个极简的 Dart 库,专门把数字变成人类能看懂的字符串。

一、核心功能

它的功能只有一个:Int -> String

支持:

  1. 自动单位选择:自动判断数值大小,选用 B, KB, MB, GB, TB, PB, EB, ZB, YB。
  2. 小数位控制:默认 2 位,可自定义。
  3. 标准选择:虽然默认通常是 1 KB = 1024 Bytes,但也有些标准(如磁盘厂商)使用 1000

默认

取整

使用

输入: 1048576

filesize()

1 MB

保留小数位

Flutter 组件

二、集成与用法详解

2.1 添加依赖

dependencies:filesize: ^2.0.1 

2.2 基础用法

import'package:filesize/filesize.dart';voidmain(){print(filesize(1024));// "1 KB"print(filesize(1024*1024));// "1 MB"print(filesize(123456));// "120.56 KB"// 指定小数位print(filesize(123456,0));// "121 KB" (四舍五入)}
在这里插入图片描述

三、OpenHarmony 适配实战:文件管理器

在鸿蒙上开发文件管理器或下载器时,这个库非常实用。

3.1 下载进度展示

假设我们使用 dio 下载文件。

import'package:dio/dio.dart';import'package:filesize/filesize.dart';voiddownloadFile(String url,String savePath)async{final dio =Dio();await dio.download( url, savePath, onReceiveProgress:(received, total){if(total !=-1){// 实时显示进度: "12.5 MB / 50.0 MB"final receivedStr =filesize(received);final totalStr =filesize(total);print('Progress: $receivedStr / $totalStr');}},);}
在这里插入图片描述

3.2 缓存清理

结合 path_provider (适配鸿蒙后) 和 dart:io 计算缓存目录大小。

import'dart:io';import'package:filesize/filesize.dart';Future<String>getCacheSize(Directory cacheDir)async{ int totalBytes =0;try{if(await cacheDir.exists()){awaitfor(var file in cacheDir.list(recursive:true, followLinks:false)){if(file isFile){ totalBytes +=await file.length();}}}}catch(e){print(e);}// 转换为易读格式returnfilesize(totalBytes);}
在这里插入图片描述

四、为什么不用手写?

你可以手写,但你会遇到:

  1. 代码重复:每个项目都要拷一遍 formatBytes 函数。
  2. 单位标准KiB (IEC标准,1024) 和 KB (SI标准,1000) 的区别。filesize 库虽然简单,但至少帮你统一了标准(目前该库主要按 1024 计算,显示常规后缀)。
  3. 极小体积:这个库非常小,几乎不增加包体积。

五、总结

filesize 是那种“麻雀虽小,五脏俱全”的库。

对于 OpenHarmony 开发者:

  • 统一体验:确保你的 App 中所有关于容量的显示格式一致。
  • 纯 Dart:无平台依赖,完全兼容。

在任何涉及 IO 或网络的鸿蒙 App 中,它都值得被加入 dependencies

最佳实践

  1. UI 对齐:由于转换后的字符串长度不固定(如 “1 B” vs “100.23 MB”),在列表显示时,建议使用 Monospaced (等宽) 字体或者右对齐,以保证视觉整齐。
  2. 国际化:注意该库输出是英文单位(KB, MB)。如果需要中文(“1.5 兆”),可能需要简单的 replace 或寻找支持 l10n 的库。

六、完整实战示例

import'package:filesize/filesize.dart';voidmain(){print('=== 基础用法 ===');print(filesize(1024));// "1 KB"print(filesize(123456789));// "117.74 MB"print('\n=== 中文本地化 ===');// 简单的本地化封装StringformatSizeCN(int bytes){String fs =filesize(bytes);return fs .replaceAll('KB','千字节').replaceAll('MB','兆字节').replaceAll('GB','吉字节');}// 模拟从鸿蒙文件系统获取的大小 int appCacheSize =1048576*5;// 5MBprint('当前缓存: ${formatSizeCN(appCacheSize)}');// "5 兆字节"print('\n=== 实际场景:下载进度 ==='); int total =50000000; int downloaded =25000000;print('下载进度: ${filesize(downloaded)} / ${filesize(total)}');// "23.84 MB / 47.68 MB"}
在这里插入图片描述

Read more

苹果最贵手机要来了!折叠屏iPhone将于9月亮相;部分高校严禁校内使用OpenClaw;黄仁勋预言:传统软件和APP或将消失 | 极客头条

苹果最贵手机要来了!折叠屏iPhone将于9月亮相;部分高校严禁校内使用OpenClaw;黄仁勋预言:传统软件和APP或将消失 | 极客头条

「极客头条」—— 技术人员的新闻圈! ZEEKLOG 的读者朋友们好,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。(投稿或寻求报道:[email protected]) 整理 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) 一分钟速览新闻点! * 多所高校要求警惕 OpenClaw 安全风险,部分严禁校内使用 * 荣耀 CEO 李健:荣耀机器人全栈自研,将聚焦消费市场 * 马化腾凌晨 2 点发声:还有一批龙虾系产品陆续赶来 * 前快手语言大模型中心负责人张富峥,已加入智源人工智能研究院,负责 LLM 方向 * 最新全球 AI 应用百强榜发布,豆包/DeepSeek/千问上榜 * 苹果折叠 iPhone 将于九月亮相,融合 iPhone 与 iPad 体验

By Ne0inhk
不止“996”!曝硅谷AI创业圈「极限工作制」:每天16小时、凌晨3点下班、周末也在写代码

不止“996”!曝硅谷AI创业圈「极限工作制」:每天16小时、凌晨3点下班、周末也在写代码

编译 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) “如果你周日去旧金山的咖啡馆,会发现几乎每个人都在工作。” 这是 AI 创业公司 Mythril 联合创始人 Sanju Lokuhitige 最近最直观的感受。去年 11 月,他特地搬到旧金山,只为了更接近 AI 创业浪潮的中心。但很快,他也被卷入了这股浪潮带来的另一面——一种越来越极端的工作文化。 Lokuhitige 坦言,他现在几乎每天工作 12 小时,每周 7 天。除了每周少数几场刻意安排的社交活动(主要是为了和创业者们建立联系),其余时间几乎都在写代码、做产品。 “有时候我整整一天都在编程,”他说,“我基本没有什么工作与生活的平衡。”而这样的生活,在如今的 AI 创业圈里并不算罕见。 旧金山 AI 创业圈的真实日常 一位在旧金山一家 AI

By Ne0inhk
黄仁勋公开发文:传统软件开发模式终结,参与AI不必非得拥有计算机博士学位

黄仁勋公开发文:传统软件开发模式终结,参与AI不必非得拥有计算机博士学位

AI 究竟是什么?在 NVIDIA CEO 黄仁勋看来,它早已不只是聊天机器人或某个大模型,而是一种正在迅速成形的“新型基础设施”。 近日,黄仁勋在英伟达官网发布了一篇长文,提出一个颇具形象的比喻——AI 就像一块“五层蛋糕”。从最底层的能源,到芯片、基础设施、模型,再到最上层的应用,人工智能正在形成一整套完整的产业技术栈,并像电力和互联网一样,逐渐成为现代社会的底层能力。 这也是黄仁勋自 2016 年以来公开发表的第七篇长文。在这篇文章中,他从计算机发展史与第一性原理出发,试图解释 AI 技术栈为何会演化成如今的形态,以及为什么全球正在掀起一场规模空前的 AI 基础设施建设。 在他看来,过去几十年的软件大多是预先编写好的程序:人类设计好算法,计算机按指令执行,数据被结构化存储在数据库中,通过精确查询调用。而 AI 的出现打破了这一模式——计算机开始能够理解图像、文本和声音,并根据上下文实时生成答案、推理结果甚至新的内容。 正因为智能不再是预先写好的代码,而是实时生成的能力,支撑它运行的整个计算体系也必须被重新设计。

By Ne0inhk
猛裁1.6万人后,网站再崩6小时、一周4次重大事故!官方“紧急复盘”:跟裁员无关,也不是AI写代码的锅

猛裁1.6万人后,网站再崩6小时、一周4次重大事故!官方“紧急复盘”:跟裁员无关,也不是AI写代码的锅

整理 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) 过去几年里,科技公司几乎都在同一件事上加速:让 AI 参与写代码。 从自动补全、自动生成函数,到直接修改系统配置,生成式 AI 已经逐渐走进真实生产环境。但最近发生在亚马逊的一连串事故,却给整个行业泼了一盆冷水——当 AI 开始真正参与生产环境开发时,事情可能远比想象复杂。 最近,多家媒体披露,本周二亚马逊内部紧急召开了一场工程“深度复盘(deep dive)”会议,专门讨论最近频繁出现的系统故障——其中,一个被反复提及的关键词是:AI 辅助代码。 一周 4 次严重事故,亚马逊内部紧急复盘 事情的起点,是最近一段时间亚马逊系统稳定性明显下降。 负责亚马逊网站技术架构的高级副总裁 Dave Treadwell 在一封内部邮件中坦言:“各位,正如大家可能已经知道的,最近网站及相关基础设施的可用性确实不太理想。” 为此,公司决定把原本每周例行举行的技术会议

By Ne0inhk