牡丹江市网站建设_网站建设公司_MySQL_seo优化
2025/12/17 12:23:14 网站建设 项目流程

继续移动端项目框架搭建,购买的材料预计今天可以送货,到货后搭建一个demo进行测试,之后进行电路图绘制和3d建模做盒子造型。

项目概述

MagicBox 是一个基于 Flutter 开发的跨平台移动端应用,用于管理智能设备的发现、配置和控制。该应用采用现代化的架构设计,支持 Android 和 iOS 双平台,实现了设备的本地发现、云端同步和远程控制功能。

技术栈选择

技术/框架版本用途选型理由
Flutter3.10.3跨平台应用开发一套代码运行在 Android 和 iOS 平台,开发效率高,性能接近原生
Dart3.10.3开发语言类型安全,JIT/AOT 编译,热重载提升开发效率
Riverpod2.6.1状态管理声明式状态管理,依赖注入,测试友好,支持异步操作
Dio5.8.0网络请求功能强大,支持拦截器、全局配置、FormData、文件上传下载等
shared_preferences2.5.3本地存储轻量级键值对存储,适合保存应用配置和用户偏好
flutter_secure_storage9.2.4安全存储用于保存敏感数据如认证令牌,支持 Android Keystore 和 iOS Keychain
multicast_dns0.3.2+8设备发现实现基于 mDNS 的本地设备发现功能
permission_handler12.0.1权限管理统一处理 Android 和 iOS 平台的权限请求

架构设计

整体架构图

MagicBox 应用架构
表现层
业务层
数据层
核心服务
• 页面组件
• 状态管理
• 路由管理
• 控制器
• 业务逻辑
• 事件处理
• 后端 API
• 本地存储
• 设备通信
• 网络请求
• 设备发现
• 权限管理

分层设计

MagicBox 应用采用了清晰的分层架构,各层职责明确,便于维护和扩展:

  1. 表现层

    • 由 Flutter Widget 组成,负责 UI 展示和用户交互
    • 状态通过 Riverpod 管理,实现 UI 与业务逻辑的分离
    • 主要包含:
      • 主页面组件(HomeShell)
      • 设备列表页面(DeviceTab)
      • 设备配网页面(ProvisioningScreen)
      • 云端服务页面(CloudTab)
      • 设置页面(SettingsTab)
  2. 业务层

    • 包含应用的核心业务逻辑
    • 负责处理用户请求、协调数据层和表现层
    • 主要包含:
      • 设备发现控制器(DeviceDiscoveryController)
      • 认证控制器(AuthController)
      • 设备控制器(BoxesController)
      • 设置控制器(SettingsController)
  3. 数据层

    • 负责数据的获取和持久化
    • 与后端 API 通信,处理本地存储
    • 主要包含:
      • 后端 API 客户端(BackendApi)
      • 本地存储服务(AppStorage)
      • 安全存储服务(SecureStore)
  4. 核心服务

    • 提供通用的基础服务
    • 被其他层调用,不依赖其他层
    • 主要包含:
      • 网络请求服务(DioFactory)
      • 设备发现服务(MdnsDiscoveryService)
      • 权限管理服务(PermissionHandler)
      • 多播锁服务(MulticastLock)

核心功能实现

1. 设备发现功能

设备发现是 MagicBox 应用的核心功能之一,采用 mDNS(Multicast DNS)协议实现本地设备的自动发现。

设备发现流程图
用户点击 添加设备 按钮
应用请求网络权限和位置权限Android
获取多播锁Android
启动 mDNS 客户端
发送 PTR 查询_http._tcp.local
解析 SRV 记录获取设备主机名和端口
解析 A 记录获取设备 IP 地址
过滤并提取 MagicBox 设备信息
展示设备列表给用户
释放多播锁并关闭 mDNS 客户端
关键代码实现

设备发现的核心逻辑在MdnsDiscoveryService类中实现:

Future<List<MagicBoxDevice>>discover({Duration timeout=constDuration(seconds:5)})async{await_multicastLock.acquire();finalclient=MDnsClient(rawDatagramSocketFactory:_safeBind);finalMap<String,MagicBoxDevice>devices=<String,MagicBoxDevice>{};try{awaitclient.start();// 查找 PTR 记录awaitfor(finalptrinclient.lookup<PtrResourceRecord>(ResourceRecordQuery.serverPointer('_http._tcp.local'))){// 解析 SRV 记录获取设备信息finalsrv=await_firstOrNull<SrvResourceRecord>(client.lookup<SrvResourceRecord>(ResourceRecordQuery.service(ptr.domainName)),constDuration(seconds:2),);// 解析 A 记录获取 IP 地址finalip=await_firstOrNull<IPAddressResourceRecord>(client.lookup<IPAddressResourceRecord>(ResourceRecordQuery.addressIPv4(host)),constDuration(seconds:2),);// 创建设备对象并添加到列表devices[deviceId]=MagicBoxDevice(deviceId:deviceId,host:host,ip:ip.address.address,port:srv.port,);}}finally{client.stop();await_multicastLock.release();}returndevices.values.toList()..sort((a,b)=>a.deviceId.compareTo(b.deviceId));}

2. 应用状态管理

MagicBox 应用采用 Riverpod 进行状态管理,实现了声明式的状态管理方式,便于测试和维护。

Riverpod 架构图
Riverpod 状态管理
Widgets
Providers
Services
Models
• 消费状态
• 触发事件
• 展示 UI
• 状态提供者
• 依赖注入
• 缓存机制
• 业务逻辑
• API 调用
• 数据处理
• 数据模型
状态管理实现

应用启动时初始化 Riverpod ProviderScope:

classAppBootstrapextendsStatelessWidget{constAppBootstrap({super.key,requiredthis.storage});finalAppStorage storage;@overrideWidgetbuild(BuildContext context){returnProviderScope(overrides:<Override>[appStorageProvider.overrideWithValue(storage),],child:constMagicBoxApp(),);}}

核心 Provider 定义:

// 应用存储 ProviderfinalappStorageProvider=Provider<AppStorage>((_)=>throwUnimplementedError());// 安全存储 ProviderfinalsecureStoreProvider=Provider<SecureStore>((_)=>SecureStore());// 设备发现服务 ProviderfinalmdnsDiscoveryServiceProvider=Provider<MdnsDiscoveryService>((ref){finalmulticastLock=MulticastLock();returnMdnsDiscoveryService(multicastLock:multicastLock);});// 设备发现控制器 ProviderfinaldeviceDiscoveryControllerProvider=NotifierProvider<DeviceDiscoveryController,DeviceDiscoveryState>(()=>DeviceDiscoveryController(),);

3. 设备配网功能

设备配网功能允许用户将 MagicBox 设备连接到 Wi-Fi 网络,实现远程控制和管理。

设备配网流程图
用户选择要配网的设备
应用连接到设备的临时 Wi-Fi 热点
用户输入家庭 Wi-Fi 名称和密码
应用将 Wi-Fi 信息发送到设备
设备尝试连接到家庭 Wi-Fi
设备连接成功后重新启动并广播 mDNS 服务
应用重新扫描设备并验证配网成功
用户完成配网流程

4. 云端同步功能

云端同步功能允许用户将设备信息同步到云端,实现远程控制和多设备管理。

云端同步架构图
云端同步架构
移动应用
云端 API
数据库
设备
• 设备列表
• 远程控制
• 数据同步
• 状态监控
• 认证服务
• 设备管理
• 命令下发
• 状态同步
• 用户表
• 设备表
• 命令表
• 状态表
• 状态上报
• 命令执行
• 事件通知

开发流程和经验总结

1. 开发环境搭建

  • Flutter SDK:安装最新稳定版 Flutter SDK(3.10.3)
  • IDE:使用 VS Code 或 Android Studio,配置 Flutter 和 Dart 插件
  • 模拟器/真机:使用 Android 模拟器、iOS 模拟器或真机进行测试
  • 依赖管理:使用pubspec.yaml管理依赖,定期更新依赖版本

2. 代码组织最佳实践

  • 模块化设计:按照功能模块组织代码,便于维护和扩展
  • 清晰的命名规范:使用有意义的类名、方法名和变量名
  • 代码注释:关键代码添加注释,说明功能和实现逻辑
  • 测试驱动开发:编写单元测试和 widget 测试,确保代码质量
  • 持续集成:配置 CI/CD 流程,自动运行测试和构建

3. 跨平台开发注意事项

  • 平台差异处理:针对 Android 和 iOS 平台的差异进行特殊处理
  • 权限管理:不同平台的权限请求方式不同,需要分别处理
  • UI 适配:考虑不同屏幕尺寸和分辨率的适配
  • 性能优化:注意 Flutter 应用的性能优化,避免不必要的重建和重绘
  • 资源管理:合理管理图片、字体等资源,避免应用体积过大

4. 性能优化策略

  • 减少 Widget 重建:使用const构造函数、constWidget 和Memoized等方式
  • 合理使用状态管理:避免不必要的状态更新和 Widget 重建
  • 异步操作优化:使用FutureBuilderStreamBuilder等组件处理异步操作
  • 列表性能优化:使用ListView.builderListView.separated构建长列表
  • 图片优化:使用合适的图片格式和尺寸,考虑使用CachedNetworkImage等库

未来规划

  1. 功能扩展

    • 添加设备控制功能,支持远程控制设备
    • 实现设备状态监控和历史数据查询
    • 添加设备固件升级功能
    • 支持多用户管理和设备共享
  2. 性能优化

    • 优化设备发现速度和稳定性
    • 减少应用启动时间
    • 优化内存使用
    • 提高电池续航能力
  3. 用户体验提升

    • 优化 UI 设计,提高用户体验
    • 添加引导教程,帮助新用户快速上手
    • 支持深色模式
    • 添加多语言支持
  4. 技术升级

    • 升级 Flutter 和依赖库到最新版本
    • 考虑使用更先进的状态管理方案(如 Riverpod 3.0)
    • 实现应用模块化,支持动态功能加载
    • 考虑使用 Flutter Web 扩展到 Web 平台

界面展示



总结

MagicBox 移动端应用采用了现代化的架构设计和技术栈,实现了设备发现、配网、云端同步等核心功能。通过清晰的分层架构和良好的代码组织,应用具有良好的可维护性和扩展性。

在开发过程中,我们积累了丰富的 Flutter 开发经验,包括跨平台开发、状态管理、性能优化等方面。未来,我们将继续完善应用功能,优化用户体验,提升应用性能,为用户提供更好的智能设备管理体验。

MagicBox 应用的开发是一个不断学习和进步的过程,我们将继续关注 Flutter 技术的发展,不断改进和完善应用,为用户提供更好的产品和服务。

项目开源地址:https://gitcode.com/zhangerhao/magicBoxApp

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询