欢迎加入开源鸿蒙跨平台社区:
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 整体架构图
Data Layer
Business Layer
Presentation Layer
主页面
PhoneCleanerHomePage
清理页
存储分析页
应用管理页
设置页
一键清理
深度清理
清理报告
存储分析
空间趋势
文件分类
应用列表
应用详情
应用缓存清理
清理设置
定时清理
关于应用
清理管理器
CleanManager
存储分析器
StorageAnalyzer
应用管理器
AppManager
GarbageFile
垃圾文件
StorageInfo
存储信息
AppInfo
应用信息
2.2 类图设计
has
has
PhoneCleanerApp
+Widget build()
<<enumeration>>
GarbageType
+String label
+String emoji
+String description
+appCache()
+systemCache()
+residual()
+largeFile()
+duplicate()
+useless()
<<enumeration>>
StorageType
+String label
+String emoji
+String color
+app()
+image()
+video()
+audio()
+document()
+system()
<<enumeration>>
CleanMode
+String label
+String emoji
+String description
+quick()
+deep()
+custom()
GarbageFile
+String id
+String path
+String name
+int size
+GarbageType type
+DateTime lastModified
StorageInfo
+String id
+StorageType type
+int size
+int percentage
+String color
AppInfo
+String id
+String name
+String packageName
+int size
+int cacheSize
+String iconPath
+bool isSystemApp
PhoneCleanerHomePage
+Widget build()
2.3 页面导航流程
清理
存储分析
应用管理
设置
应用启动
清理页
底部导航
一键清理
存储分析
应用管理
设置
扫描垃圾
显示结果
确认清理
清理完成
分析存储
显示图表
查看详情
应用列表
应用详情
清理缓存
清理设置
定时清理
2.4 清理流程
存储分析器 清理管理器 清理页 用户 存储分析器 清理管理器 清理页 用户 点击一键清理 开始扫描 分析存储 返回存储信息 扫描垃圾文件 返回扫描结果 确认清理 执行清理 返回清理结果 显示清理完成
三、核心模块设计
3.1 数据模型设计
3.1.1 垃圾文件类型枚举 (GarbageType)
dart
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)
dart
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)
dart
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)
dart
class StorageInfo {
final String id; // 存储ID
final StorageType type; // 存储类型
final int size; // 占用大小(字节)
final int percentage; // 占总存储的百分比
final String color; // 显示颜色
}
3.1.5 存储分布
30% 25% 20% 10% 8% 7% 存储空间分布示例 应用 图片 视频 音频 文档 系统
3.2 页面结构设计
3.2.1 主页面布局
PhoneCleanerHomePage
IndexedStack
清理页
存储分析页
应用管理页
设置页
NavigationBar
清理 Tab
存储分析 Tab
应用管理 Tab
设置 Tab
3.2.2 清理页结构
清理页
SliverAppBar
快速统计
清理选项
清理报告
标题
总垃圾大小
垃圾类型统计
一键清理
深度清理
自定义清理
最近清理记录
3.2.3 存储分析页结构
存储分析页
SliverAppBar
存储概览
存储图表
文件分类
标题
总存储信息
已用空间
可用空间
饼图
趋势图
文件类型列表
3.2.4 应用管理页结构
应用管理页
SliverAppBar
应用统计
应用列表
标题
应用总数
系统应用
用户应用
应用卡片
应用图标
应用名称
占用空间
清理按钮
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 清理页面实现
dart
class CleanPage extends StatefulWidget {
@override
State<CleanPage> createState() => _CleanPageState();
}
class _CleanPageState extends State<CleanPage> {
bool _isScanning = false;
int _totalGarbage = 0;
List<GarbageFile> _garbageFiles = [];
@override
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 存储分析页面实现
dart
class StoragePage extends StatefulWidget {
@override
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
@override
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,
),
];
}
@override
Widget build(BuildContext context) {
return CustomScrollView(
slivers: [
SliverAppBar(
title: Text('存储分析'),
),
SliverToBoxAdapter(
child: _buildStorageOverview(),
),
SliverToBoxAdapter(
child: _buildStorageChart(),
),
SliverToBoxAdapter(
child: _buildStorageList(),
),
],
);
}
}
5.3 应用管理页面实现
dart
class AppPage extends StatefulWidget {
@override
State<AppPage> createState() => _AppPageState();
}
class _AppPageState extends State<AppPage> {
List<AppInfo> _apps = [];
@override
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,
),
];
}
@override
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 清理管理器实现
dart
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 存储分析器实现
dart
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 后续版本规划
2024-01-07 2024-01-14 2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 2024-03-17 2024-03-24 2024-03-31 2024-04-07 基础UI框架 一键清理功能 存储分析功能 应用管理功能 深度清理功能 定时清理功能 智能清理 大文件管理 重复文件清理 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 手机清理小助手应用开发计划
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 运行命令
bash
# 查看可用设备
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 设计规范,以清新的蓝色为主色调,象征清洁与高效。通过本应用,希望能够帮助用户轻松管理手机存储空间,让手机运行更流畅,提升用户的使用体验。
手机清理小助手------让手机更流畅