一、项目背景与阶段目标
1.1 项目迭代说明
本阶段是在昨日完成的 GitCode 口袋工具基础之上进行的第二轮开发。当前已实现核心功能中的搜索模块与仓库列表展示,并成功对接 GitCode OpenAPI 接口服务。本轮迭代重点聚焦于用户体验优化及界面组件的模块化设计,提升整体可维护性与扩展能力。
二、技术选型与核心资源
2.1 第三方依赖引入
为增强交互体验,在项目中新增以下关键依赖:
dependencies: http: ^1.2.2 pull_to_refresh_flutter3: ^2.0.2
pubspec.yaml
上述库提供了强大的刷新控件支持,包括:
组件:用于实现下拉刷新操作;SmartRefresher
组件:支持上拉加载更多数据;RefreshController
同时内置多种状态提示机制,如加载中、无数据、错误提示等,便于快速构建流畅的列表交互体验。
pull_to_refresh_flutter3
2.3 数据结构设计与模型封装
Repository 模型:定义仓库的核心数据结构,包含 id、名称、描述、编程语言、Star 数量、Fork 数量、更新时间等字段。此外,还封装了若干计算属性以简化视图层逻辑处理:
formattedUpdatedAtdisplayName
UserSummary 模型:用于搜索结果中的用户条目展示,主要包含用户唯一标识 id、登录名 login、头像地址 avatar 及个人主页链接 profile 等信息。
三、功能实现细节
3.1 API 服务层优化
在
lib/services/api_service.dart 文件中对网络请求进行了统一封装,采用 GET 方法并配置通用请求头,提升代码复用度与安全性:
static Map<String, String> get _headers => <String, String>{
'Authorization': 'Bearer $token',
'Accept': 'application/json',
};
static Future<http.Response> _get(Uri url) {
return http.get(url, headers: _headers);
}
针对不同业务接口返回不同类型的数据模型:
:适配searchUsers
和page
接口,根据实际响应结构生成对应的per_page
对象;UserSearchResult
:专用于“我的仓库”页面的分页数据获取,返回结果为getUserRepositories
类型。List<Repository>
通过 Future 结合 try/catch 异常捕获机制,向上层传递详细的错误信息(含状态码与响应体),便于问题排查与用户提示。
3.2 自定义仓库卡片组件开发
设计独立的仓库信息展示组件(
lib/widgets/repository_card.dart),实现多场景复用:
- 头部区域:集成
显示仓库所有者头像,若头像缺失则自动渲染用户名首字母占位符;CircleAvatar - 主体内容:清晰展示仓库名称、作者信息及项目简介;
- 底部信息栏:使用
布局集合呈现 Star 数、Fork 数、开发语言和最后更新时间。Chip
该组件广泛应用于搜索结果页与个人仓库列表页,有效减少重复代码,提升 UI 一致性。
四、最终运行效果



雷达卡


京公网安备 11010802022788号







