张功茂 / 开发履历
← 返回全部 11 个项目

PROJECT 08 / 11

Flutter / Java 全栈

逸佳智能跟单系统

Flutter + Java 若依全栈开发工程师2024.02 — 2024.08

面向服饰制造行业交付生产协同应用,覆盖登录鉴权、订单、供应商与用户信息管理。

FlutterSpring BootJWTRedis

核心技术栈

Flutter 端

UI 框架:Flutter(Material 3),沉浸式状态栏 + 全屏 Edge-to-Edge 布局网络层:基于 dio 包(第三方 SDK)封装的统一 DioRequest 单例,内置 InterceptorsWrapper 拦截器实现自动 Bearer Token 注入、结构化日志打印与超时控制持久化:基于 shared_preferences 包(第三方SDK)封装的 AuthSession 单例,管理 Token 本地存储、记住登录与 Token 有效性验证路由:Flutter 原生 Navigator + MaterialPageRoute 页面跳转状态管理:原生 StatefulWidget + setState,局部状态精准刷新文件上传:dio 包的 FormData + MultipartFile.fromFile 实现 multipart/form-data 头像上传UI 适配:MediaQuery 屏幕尺寸动态自适应、SafeArea 安全区处理

Java / 若依后端

框架:Spring Boot + Spring Security(含若依 SysLoginService)鉴权:JWT Token(TokenService 生成与刷新)+ Spring Security 权限注解接口层:若依 @RestController + AjaxResult 统一响应包装安全工具:若依 SecurityUtils.getLoginUser() 从 SecurityContext 获取当前用户缓存:若依框架内置 Redis 缓存(TokenService 内部在 Redis 中存储 LoginUser 对象,实现 Token 刷新和注销)数据访问:MyBatis 持久化 + ISysUserService、ISysDeptService、ISysConfigService Service 层调用

具体项目经历

Flutter 端

1. 会话鉴权架构:基于 shared_preferences 封装 AuthSession 单例,实现 Token 本地持久化、记住登录和启动时自动校验 Session 有效性。

2. 网络层统一封装:基于 dio 封装 DioRequest 单例,通过 InterceptorsWrapper 实现 Bearer Token 自动注入、请求/响应结构化日志与全局超时管控。

3. 手机号登录流程:使用封装的 dioRequest.post 完成登录,解析若依 code/token/msg 响应,驱动 Navigator.pushReplacement 完成页面切换。

4. 头像上传链路:Flutter 端使用 dio 的 FormData.fromMap + MultipartFile.fromFile 构建文件上传请求体;后端的若依 SysProfileController#avatar 接口用 @RequestParam 接收 MultipartFile,再经若依封装的 FileUploadUtils.upload 落盘并更新数据库头像字段,返回新头像相对路径。

5. 订单管理看板:使用 ListView.separated + BouncingScrollPhysics 搭建订单列表,实现货期剩余天数实时计算、进度条渲染与 showModalBottomSheet 多级筛选排序。

6. 供应商详情编辑:showModalBottomSheet + isScrollControlled 实现高度自适应编辑面板,键盘 AnimatedPadding 联动,DropdownButtonFormField 选项式下拉编辑,结果经 setState 局部刷新页面。

7. 启动鉴权路由:FutureBuilder 异步等待 AuthSession.restoreAndValidateSession() 结果,自动路由至主页或登录页,实现无闪烁的冷启动鉴权体验。

8. 沉浸式 UI 适配:通过 SystemChrome.setEnabledSystemUIMode(edgeToEdge) 与 setSystemUIOverlayStyle 实现状态栏/导航栏透明沉浸,配合 SafeArea 防止内容遮挡。

Java / 若依后端

1. 手机号登录扩展:在若依 SysLoginController#login 中扩展 LoginBody,支持 phonenumber 字段,调用 ISysUserService.selectUserByPhonenumber 查库反查 username,再交给若依 SysLoginService.login 完成标准鉴权并返回 JWT Token。

2. 自定义 APP 用户信息接口:新建 AppMeController,调用若依 SecurityUtils.getLoginUser() 获取当前用户,组装头像绝对地址(ServerConfig.getUrl 拼接)、角色名(ISysUserService.selectUserRoleGroup)、公司名(ISysConfigService.selectConfigByKey优先),支持 scene 参数按需裁剪响应字段。

3. Redis Token 缓存机制:基于若依 TokenService,JWT Token 生成时将 LoginUser 写入 Redis(redisCache.setCacheObject),/getInfo 接口触发 Token 刷新(tokenService.refreshToken)延长 Redis key 过期时间,实现"活跃用户免重登"效果。

4. 统一鉴权与响应规范:所有 App 接口复用若依 Spring Security 过滤链,401/403 由框架自动拦截返回;业务层统一用 AjaxResult.success() / AjaxResult.error() 包装,前端直接读 code + msg字段处理提示。