从零复刻 Mango:手把手教你用 Kotlin + MVP 写一个 Dribbble 客户端

从零复刻 Mango:手把手教你用 Kotlin + MVP 写一个 Dribbble 客户端 从零复刻 Mango手把手教你用 Kotlin MVP 写一个 Dribbble 客户端【免费下载链接】Mango An Android app for dribbble.com项目地址: https://gitcode.com/gh_mirrors/mango13/MangoDribbble 是设计师圈最知名的作品分享社区而 Mango 正是一款用 Kotlin 完整打造的 Android 端 Dribbble 客户端。这篇教程将带你从零理解 Mango 的架构设计手把手拆解它的网络层、数据层与 MVP 界面层即使你是新手也能照着思路用 Kotlin 独立写出一款属于自己的 Dribbble 客户端。作为开源项目Mango 全部代码都基于 Kotlin MVP 架构代码清晰、模块划分合理非常适合作为进阶练手项目。Mango 是什么纯 Kotlin 实现的 Dribbble 客户端Mango 是一个完全使用 Kotlin 编写的 Android 应用用于浏览 Dribbble 网站上的设计师作品Shot、关注创作者、点赞和评论互动。它的设计灵感来自 Resplash、Plaid 等知名开源客户端在 Material Design 风格下把 Dribbble API 的常用能力都做成了可用的界面。它自带这些亮点功能✨作品流浏览热门、关注、最近、首次发布四类内容切换作品详情大图展示、点赞、浏览量、评论数一目了然用户资料页关注/粉丝数、个人作品集、获赞列表完整 OAuth 登录流程支持点赞、评论等写操作深链Deep Link支持、Android 7.1 应用快捷方式技术选型打造 Dribbble 客户端的完整技术栈Mango 的技术栈非常主流几乎囊括了当时 Android 开发的黄金组合新手学习价值极高用途技术说明语言Kotlin RxKotlin全项目 100% Kotlin架构MVPView / Presenter / Contract 分层网络Retrofit OkHttp Gson基于 Dribbble v1 API响应式RxJava 2异步回调与数据流本地存储RoomToken 与用户信息持久化图片加载Glide列表缩略图与头像布局FlexboxLayout作品标签的弹性布局网络层搭建Retrofit 封装与 Dribbble API 对接写 Dribbble 客户端的第一步是搞定网络层。Mango 用RetrofitClient统一管理请求它会在启动时初始化缓存并通过 OkHttp 拦截器自动往每个请求头里注入Authorization: Bearer token这样所有接口都无需重复处理鉴权。val requestBuilder original.newBuilder() .header(Accept, application/json) .header(Authorization, Bearer mLastToken)核心实现见 RetrofitClient.kt而接口定义则集中在 ShotsService.kt作品列表、点赞、评论等 RESTful 接口一目了然GET(/v1/shots/{shot_id}) fun getShot(Path(shot_id) shotId: Long): ObservableResponseShot数据模型设计用 data class 映射 Dribbble 返回的 JSONDribbble API 返回的 Shot 字段非常多Mango 用 Kotlin 的data class配合 Gson 的SerializedName注解一一映射例如views_count、likes_count、images、user、tags等字段都做了精确对应见 Shot.kt。得益于 Kotlin 的空安全设计可空字段如description直接声明为String?彻底规避了空指针问题。MVP 架构落地一个页面的标准三层写法MVP 是 Mango 的核心骨架。以首页作品流为例它拆成了三个文件职责非常清晰Contract约定 View 与 Presenter 的接口见 ShotsPageContract.ktPresenter负责拉数据、处理业务逻辑通过listShots()与listMoreShots()实现加载更多View / Fragment只做 UI 展示调用showResults()、setLoadingIndicator()等方法更新界面这样写的好处是界面与逻辑解耦测试时可以直接 mock Presenter这也是很多公司面试必问的架构题。登录鉴权OAuth 流程与 Token 本地持久化Dribbble 客户端需要 OAuth 授权才能代表用户操作。Mango 的授权常量集中在 ApiConstants.kt包括授权地址、回调 URI、scope 等。登录成功后AccessToken 会通过 Room 数据库持久化见 AppDatabase.kt并在启动时由 AccessTokenManager.kt 读取实现登录一次永久免登录。页面拆解作品流、详情、评论与点赞除了首页Mango 的每个功能模块都值得单独学习作品详情展示大图、标签与互动数据悬浮点赞按钮见 ui/shot/评论列表分页加载评论支持发表新评论见 ui/shot/comments/点赞用户列表查看谁赞过作品见 ui/shot/likes/用户资料作品集网格 获赞切换见 ui/user/这些页面统一复用CommentsAdapter、LikesAdapter等适配器体现了良好的复用设计。三步跑通项目从 clone 到运行想亲手运行 Mango 体验效果跟着下面三步走克隆代码git clone https://gitcode.com/gh_mirrors/mango13/Mango配置 OAuth 密钥在 Dribbble 开发者中心注册应用创建mango.properties文件填入CLIENT_ID、CLIENT_SECRET、VERIFICATION_TOKEN编译运行用 Android Studio 打开项目执行./gradlew build即可注意mango.properties默认不提交到仓库需要你手动创建回调地址则需在 ApiConstants.kt 中同步修改。总结复刻 Mango 的三个核心收获通过阅读 Mango 源码你能一次性收获Kotlin 实战经验data class、空安全、伴生对象等特性的真实用法MVP 架构思维如何合理拆分 Contract、Presenter 与 View完整网络链路Retrofit OkHttp 拦截器 RxJava Room 的协同配合无论是想学习 Kotlin、研究 MVP 架构还是想做一个自己的 Dribbble 客户端Mango 都是不可多得的优质开源范本。动手 clone 下来跟着模块逐个阅读很快你也能写出属于自己的作品流应用了 【免费下载链接】Mango An Android app for dribbble.com项目地址: https://gitcode.com/gh_mirrors/mango13/Mango创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考