开源鸿蒙跨平台Flutter开发:手机清理小助手应用
摘要: 手机清理小助手是一款基于Flutter开发的跨平台应用,专为鸿蒙OS设计,提供一键清理、存储分析、应用管理等功能。应用采用Material Design 3规范,支持快速清理、深度清理和自定义清理模式,智能识别垃圾文件(如缓存、残留文件等)和存储类型(应用、图片等)。通过可视化图表展示存储空间分布,帮助用户高效管理手机存储。技术栈包括Dart语言、Flutter框架及文件操作相关插件,项目
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图





1.1 应用简介
手机清理小助手是一款实用工具类应用,专门用于清理手机垃圾文件、缓存,分析存储空间使用情况,让手机运行更流畅。应用以清新的蓝色为主色调,象征清洁与高效。涵盖一键清理、存储分析、应用管理、设置四大模块,帮助用户轻松管理手机存储空间,提升设备性能。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 一键清理 | 快速清理垃圾文件和缓存 | 自动扫描 |
| 存储分析 | 分析存储空间使用情况 | 可视化展示 |
| 应用管理 | 管理应用程序,清理应用缓存 | 列表展示 |
| 深度清理 | 清理大文件、重复文件 | 智能分析 |
| 定时清理 | 设置定时自动清理 | 后台任务 |
| 清理报告 | 清理结果统计报告 | 数据展示 |
1.3 垃圾文件类型定义
| 序号 | 类型名称 | Emoji | 描述 |
|---|---|---|---|
| 1 | 应用缓存 | 📱 | 应用生成的临时文件 |
| 2 | 系统缓存 | 🖥️ | 系统生成的临时文件 |
| 3 | 残留文件 | 🗑️ | 应用卸载后残留的文件 |
| 4 | 大文件 | 📁 | 占用空间较大的文件 |
| 5 | 重复文件 | 🔄 | 内容相同的重复文件 |
| 6 | 无用文件 | 📄 | 长期未使用的文件 |
1.4 存储类型定义
| 序号 | 类型名称 | Emoji | 描述 |
|---|---|---|---|
| 1 | 应用 | 📱 | 应用程序占用空间 |
| 2 | 图片 | 📷 | 照片和图片文件 |
| 3 | 视频 | 📹 | 视频文件 |
| 4 | 音频 | 🎵 | 音乐和音频文件 |
| 5 | 文档 | 📄 | 文档和其他文件 |
| 6 | 系统 | 🖥️ | 系统文件和缓存 |
1.5 清理模式定义
| 序号 | 模式名称 | Emoji | 描述 |
|---|---|---|---|
| 1 | 快速清理 | ⚡ | 清理常见垃圾文件 |
| 2 | 深度清理 | 🧹 | 深度扫描和清理 |
| 3 | 自定义清理 | ⚙️ | 自定义清理选项 |
1.6 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 存储分析 | path_provider | - |
| 文件操作 | dart:io | - |
| 权限管理 | permission_handler | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
1.7 项目结构
lib/
└── main_phone_cleaner.dart
├── PhoneCleanerApp # 应用入口
├── GarbageType # 垃圾文件类型枚举
├── StorageType # 存储类型枚举
├── CleanMode # 清理模式枚举
├── GarbageFile # 垃圾文件模型
├── StorageInfo # 存储信息模型
├── AppInfo # 应用信息模型
├── PhoneCleanerHomePage # 主页面(底部导航)
├── _buildCleanPage # 清理页面
├── _buildStoragePage # 存储分析页面
├── _buildAppPage # 应用管理页面
├── _buildSettingsPage # 设置页面
├── CleanCard # 清理卡片组件
├── StorageChart # 存储分析图表组件
└── AppList # 应用列表组件
二、系统架构
2.1 整体架构图
2.2 类图设计
2.3 页面导航流程
2.4 清理流程
三、核心模块设计
3.1 数据模型设计
3.1.1 垃圾文件类型枚举 (GarbageType)
enum GarbageType {
appCache(label: '应用缓存', emoji: '📱', description: '应用生成的临时文件'),
systemCache(label: '系统缓存', emoji: '🖥️', description: '系统生成的临时文件'),
residual(label: '残留文件', emoji: '🗑️', description: '应用卸载后残留的文件'),
largeFile(label: '大文件', emoji: '📁', description: '占用空间较大的文件'),
duplicate(label: '重复文件', emoji: '🔄', description: '内容相同的重复文件'),
useless(label: '无用文件', emoji: '📄', description: '长期未使用的文件');
final String label;
final String emoji;
final String description;
}
3.1.2 存储类型枚举 (StorageType)
enum StorageType {
app(label: '应用', emoji: '📱', color: '#4CAF50'),
image(label: '图片', emoji: '📷', color: '#2196F3'),
video(label: '视频', emoji: '📹', color: '#FFC107'),
audio(label: '音频', emoji: '🎵', color: '#9C27B0'),
document(label: '文档', emoji: '📄', color: '#FF5722'),
system(label: '系统', emoji: '🖥️', color: '#607D8B');
final String label;
final String emoji;
final String color;
}
3.1.3 垃圾文件模型 (GarbageFile)
class GarbageFile {
final String id; // 文件ID
final String path; // 文件路径
final String name; // 文件名称
final int size; // 文件大小(字节)
final GarbageType type; // 垃圾类型
final DateTime lastModified; // 最后修改时间
}
3.1.4 存储信息模型 (StorageInfo)
class StorageInfo {
final String id; // 存储ID
final StorageType type; // 存储类型
final int size; // 占用大小(字节)
final int percentage; // 占总存储的百分比
final String color; // 显示颜色
}
3.1.5 存储分布
3.2 页面结构设计
3.2.1 主页面布局
3.2.2 清理页结构
3.2.3 存储分析页结构
3.2.4 应用管理页结构
3.3 清理逻辑
3.4 存储分析逻辑
四、UI设计规范
4.1 配色方案
应用以清新的蓝色为主色调,象征清洁与高效:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主色 | #2196F3 (Blue) | 导航、主题元素 |
| 辅助色 | #42A5F5 | 清理页面 |
| 第三色 | #64B5F6 | 存储分析页面 |
| 强调色 | #90CAF9 | 应用管理页面 |
| 背景色 | #FAFAFA | 页面背景 |
| 卡片背景 | #FFFFFF | 清理卡片 |
| 成功色 | #4CAF50 | 清理完成 |
| 警告色 | #FF9800 | 空间不足 |
4.2 存储类型颜色定义
| 存储类型 | 色值 | 视觉效果 |
|---|---|---|
| 应用 | #4CAF50 | 绿色,应用程序 |
| 图片 | #2196F3 | 蓝色,照片图片 |
| 视频 | #FFC107 | 黄色,视频文件 |
| 音频 | #9C27B0 | 紫色,音频文件 |
| 文档 | #FF5722 | 橙色,文档文件 |
| 系统 | #607D8B | 灰色,系统文件 |
4.3 字体规范
| 元素 | 字号 | 字重 | 颜色 |
|---|---|---|---|
| 页面标题 | 24px | Bold | 主色 |
| 清理选项 | 16px | Bold | #000000 |
| 存储信息 | 14px | Regular | 灰色 |
| 统计数字 | 20px | Bold | 白色 |
| 按钮文字 | 16px | Medium | 白色 |
4.4 组件规范
4.4.1 清理卡片
┌─────────────────────────────────────┐
│ 📱 应用缓存 │
│ │
│ 256 MB │
│ 应用生成的临时文件 │
│ │
│ [清理] │
└─────────────────────────────────────┘
4.4.2 存储概览
┌─────────────────────────────────────┐
│ 存储概览 │
│ │
│ ┌─────────────────────────────┐ │
│ │ │ │
│ │ 📊 存储使用情况 │ │
│ │ 已用: 12.5GB / 32GB │ │
│ │ 可用: 19.5GB │ │
│ └─────────────────────────────┘ │
│ │
│ [查看详情] │
└─────────────────────────────────────┘
4.4.3 应用卡片
┌─────────────────────────────────────┐
│ ┌──────┐ │
│ │ │ 微信 │
│ │ 📱 │ 占用: 1.2GB │
│ └──────┘ 缓存: 512MB │
│ │
│ [清理缓存] [详情] │
└─────────────────────────────────────┘
4.4.4 清理结果
┌─────────────────────────────────────┐
│ 🎉 清理完成 │
│ │
│ 已清理: 1.2GB │
│ 释放空间: 1.2GB │
│ 清理文件数: 125个 │
│ │
│ [查看详情] [返回] │
└─────────────────────────────────────┘
4.4.5 扫描进度
┌─────────────────────────────────────┐
│ 正在扫描... │
│ │
│ ███████████░░░░░░░░ 60% │
│ │
│ 发现垃圾: 856MB │
└─────────────────────────────────────┘
五、核心功能实现
5.1 清理页面实现
class CleanPage extends StatefulWidget {
State<CleanPage> createState() => _CleanPageState();
}
class _CleanPageState extends State<CleanPage> {
bool _isScanning = false;
int _totalGarbage = 0;
List<GarbageFile> _garbageFiles = [];
Widget build(BuildContext context) {
return CustomScrollView(
slivers: [
SliverAppBar(
title: Text('清理'),
actions: [
IconButton(
icon: Icon(Icons.settings),
onPressed: () {},
),
],
),
SliverToBoxAdapter(
child: _buildQuickStats(),
),
SliverToBoxAdapter(
child: _buildCleanOptions(),
),
SliverToBoxAdapter(
child: _buildCleanHistory(),
),
],
);
}
void _startQuickClean() {
setState(() {
_isScanning = true;
});
// 模拟扫描过程
Future.delayed(const Duration(seconds: 3), () {
setState(() {
_isScanning = false;
_totalGarbage = 1256000000; // 1.2GB
});
_showCleanDialog();
});
}
void _showCleanDialog() {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('发现垃圾文件'),
content: Text('扫描完成,发现 ${_formatSize(_totalGarbage)} 垃圾文件'),
actions: [
TextButton(
onPressed: () => Navigator.pop(context),
child: Text('取消'),
),
FilledButton(
onPressed: () {
Navigator.pop(context);
_performClean();
},
child: Text('清理'),
),
],
),
);
}
void _performClean() {
// 模拟清理过程
Future.delayed(const Duration(seconds: 2), () {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('清理完成,释放了 ${_formatSize(_totalGarbage)} 空间'),
),
);
});
}
}
5.2 存储分析页面实现
class StoragePage extends StatefulWidget {
State<StoragePage> createState() => _StoragePageState();
}
class _StoragePageState extends State<StoragePage> {
List<StorageInfo> _storageInfo = [];
int _totalStorage = 32 * 1024 * 1024 * 1024; // 32GB
int _usedStorage = 12 * 1024 * 1024 * 1024; // 12GB
void initState() {
super.initState();
_loadStorageInfo();
}
void _loadStorageInfo() {
_storageInfo = [
StorageInfo(
id: '1',
type: StorageType.app,
size: 3800000000, // 3.8GB
percentage: 30,
color: StorageType.app.color,
),
StorageInfo(
id: '2',
type: StorageType.image,
size: 3200000000, // 3.2GB
percentage: 25,
color: StorageType.image.color,
),
StorageInfo(
id: '3',
type: StorageType.video,
size: 2500000000, // 2.5GB
percentage: 20,
color: StorageType.video.color,
),
StorageInfo(
id: '4',
type: StorageType.audio,
size: 1200000000, // 1.2GB
percentage: 10,
color: StorageType.audio.color,
),
StorageInfo(
id: '5',
type: StorageType.document,
size: 1000000000, // 1GB
percentage: 8,
color: StorageType.document.color,
),
StorageInfo(
id: '6',
type: StorageType.system,
size: 800000000, // 0.8GB
percentage: 7,
color: StorageType.system.color,
),
];
}
Widget build(BuildContext context) {
return CustomScrollView(
slivers: [
SliverAppBar(
title: Text('存储分析'),
),
SliverToBoxAdapter(
child: _buildStorageOverview(),
),
SliverToBoxAdapter(
child: _buildStorageChart(),
),
SliverToBoxAdapter(
child: _buildStorageList(),
),
],
);
}
}
5.3 应用管理页面实现
class AppPage extends StatefulWidget {
State<AppPage> createState() => _AppPageState();
}
class _AppPageState extends State<AppPage> {
List<AppInfo> _apps = [];
void initState() {
super.initState();
_loadApps();
}
void _loadApps() {
_apps = [
AppInfo(
id: '1',
name: '微信',
packageName: 'com.tencent.mm',
size: 1200000000, // 1.2GB
cacheSize: 512000000, // 512MB
iconPath: 'wechat',
isSystemApp: false,
),
AppInfo(
id: '2',
name: '支付宝',
packageName: 'com.eg.android.AlipayGphone',
size: 800000000, // 800MB
cacheSize: 300000000, // 300MB
iconPath: 'alipay',
isSystemApp: false,
),
AppInfo(
id: '3',
name: '抖音',
packageName: 'com.ss.android.ugc.aweme',
size: 1500000000, // 1.5GB
cacheSize: 800000000, // 800MB
iconPath: 'douyin',
isSystemApp: false,
),
];
}
Widget build(BuildContext context) {
return CustomScrollView(
slivers: [
SliverAppBar(
title: Text('应用管理'),
),
SliverToBoxAdapter(
child: _buildAppStats(),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => AppCard(app: _apps[index]),
childCount: _apps.length,
),
),
],
);
}
}
5.4 清理管理器实现
class CleanManager {
static Future<List<GarbageFile>> scanGarbage() async {
// 模拟扫描垃圾文件
await Future.delayed(const Duration(seconds: 3));
return [
GarbageFile(
id: '1',
path: '/cache/app_cache',
name: 'app_cache',
size: 256000000, // 256MB
type: GarbageType.appCache,
lastModified: DateTime.now().subtract(Duration(days: 7)),
),
GarbageFile(
id: '2',
path: '/cache/system_cache',
name: 'system_cache',
size: 150000000, // 150MB
type: GarbageType.systemCache,
lastModified: DateTime.now().subtract(Duration(days: 30)),
),
GarbageFile(
id: '3',
path: '/data/residual',
name: 'residual',
size: 800000000, // 800MB
type: GarbageType.residual,
lastModified: DateTime.now().subtract(Duration(days: 60)),
),
];
}
static Future<int> cleanGarbage(List<GarbageFile> files) async {
// 模拟清理过程
await Future.delayed(const Duration(seconds: 2));
return files.fold(0, (sum, file) => sum + file.size);
}
static String formatSize(int bytes) {
if (bytes < 1024) return '$bytes B';
else if (bytes < 1024 * 1024) return '${(bytes / 1024).toStringAsFixed(1)} KB';
else if (bytes < 1024 * 1024 * 1024) return '${(bytes / (1024 * 1024)).toStringAsFixed(1)} MB';
else return '${(bytes / (1024 * 1024 * 1024)).toStringAsFixed(1)} GB';
}
}
5.5 存储分析器实现
class StorageAnalyzer {
static Future<Map<String, dynamic>> analyzeStorage() async {
// 模拟存储分析
await Future.delayed(const Duration(seconds: 2));
return {
'total': 32 * 1024 * 1024 * 1024, // 32GB
'used': 12 * 1024 * 1024 * 1024, // 12GB
'available': 20 * 1024 * 1024 * 1024, // 20GB
'categories': [
{
'type': 'app',
'size': 3800000000, // 3.8GB
'percentage': 30,
},
{
'type': 'image',
'size': 3200000000, // 3.2GB
'percentage': 25,
},
{
'type': 'video',
'size': 2500000000, // 2.5GB
'percentage': 20,
},
{
'type': 'audio',
'size': 1200000000, // 1.2GB
'percentage': 10,
},
{
'type': 'document',
'size': 1000000000, // 1GB
'percentage': 8,
},
{
'type': 'system',
'size': 800000000, // 0.8GB
'percentage': 7,
},
],
};
}
}
六、交互设计
6.1 清理流程
6.2 存储分析流程
6.3 应用管理流程
七、扩展功能规划
7.1 后续版本规划
7.2 功能扩展建议
7.2.1 智能清理
智能功能:
- 智能识别无用文件
- 基于使用习惯的清理建议
- 自动清理策略
- 垃圾文件分类优化
7.2.2 大文件管理
大文件功能:
- 大文件扫描和分析
- 大文件预览
- 大文件批量管理
- 大文件压缩
7.2.3 重复文件清理
重复文件功能:
- 重复文件扫描
- 重复文件预览
- 智能去重
- 安全删除
八、注意事项
8.1 开发注意事项
-
权限管理:需要申请存储权限,确保用户授权
-
文件操作:文件删除操作需谨慎,避免误删重要文件
-
性能优化:扫描过程需优化,避免卡顿
-
用户体验:清理过程需显示进度,提升用户体验
-
数据安全:清理前需确认,防止误操作
8.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 扫描速度慢 | 文件数量多 | 优化扫描算法 |
| 清理不彻底 | 权限不足 | 引导用户授权 |
| 误删文件 | 识别错误 | 增加文件类型判断 |
| 应用崩溃 | 内存不足 | 优化内存使用 |
| 清理后空间未释放 | 系统缓存 | 重启设备 |
8.3 使用技巧
📱 手机清理使用技巧 📱
清理建议
- 定期进行一键清理(建议每周一次)
- 深度清理每月一次
- 应用缓存及时清理
- 大文件定期检查
空间管理
- 及时删除不需要的照片和视频
- 清理应用缓存
- 卸载不常用的应用
- 转移大文件到云存储
性能优化
- 关闭后台应用
- 定期重启设备
- 清理系统缓存
- 保持系统更新
安全提示
- 清理前确认重要文件
- 不要清理系统文件
- 定期备份重要数据
- 使用正规清理工具
九、运行说明
9.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
| Web浏览器 | Chrome 90+ |
| 存储权限 | 读写权限 |
9.2 运行命令
# 查看可用设备
flutter devices
# 运行到Web服务器
flutter run -d web-server -t lib/main_phone_cleaner.dart --web-port 8145
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_phone_cleaner.dart
# 代码分析
flutter analyze lib/main_phone_cleaner.dart
十、总结
手机清理小助手应用通过清理、存储分析、应用管理、设置四大模块,为用户提供了一个便捷的手机存储空间管理工具。应用支持一键清理、深度清理、存储分析、应用缓存清理等功能,帮助用户释放存储空间,提升设备性能。
核心功能涵盖垃圾文件清理、存储空间分析、应用管理、定时清理四大模块。垃圾文件清理支持快速清理和深度清理;存储空间分析通过可视化图表展示存储使用情况;应用管理支持清理应用缓存;定时清理功能可自动执行清理任务。
应用采用 Material Design 3 设计规范,以清新的蓝色为主色调,象征清洁与高效。通过本应用,希望能够帮助用户轻松管理手机存储空间,让手机运行更流畅,提升用户的使用体验。
手机清理小助手——让手机更流畅
更多推荐




所有评论(0)