FLUTTER ECOSYSTEM

seasonZhu/GetXStudy

GetX का उपयोग करके Flutter संस्करण के wanandroid क्लाइंट को पुनर्गठित किया

GetXStudy प्रोजेक्ट कवर
Stars
111
Forks
17
अंतिम पुश (UTC)
20 मार्च 2026
प्रोजेक्ट स्थिति
सक्रिय
seasonZhu GitHub avatar
GITHUB User

seasonZhu ↗

An iOS farmer,like Swift more than OC. I also program Flutter, ArkTS and Python.

भाषाएँDartHTMLPythonC++CMakeSwiftRubyCShellKotlinObjective-C

तकनीकी विषय

उपयोग की गई निर्भरताएँ

निर्भरता सूची 37 आइटम

रैंकिंग

मूल README

यह अंग्रेज़ी मूल स्नैपशॉट है। नवीनतम सामग्री GitHub पर देखें।

README खोलें / बंद करें

使用GetX编写Flutter的wanandroid客户端

前言

在编写完RxSwift的wanandroid客户端之后,我一直都在犹豫是否需要将Flutter的wanandroid客户端进行重构。

我早在19年的时候就开始接触Flutter,但是还停留在CV与照葫芦画瓢。比较系统的学习Flutter应该在20年的疫情期间,之后我通过网上的例子编写了这个项目——FlutterPlayAndroid

刚开始的时候学习Flutter,基本上都是很粗暴的使用setState进行页面刷新,UI与逻辑也是乱七八糟,不尽人意。

关于这个项目

这个项目我主要是通过GetX框架进行搭建,通过WanAndroid开放API制作。

https://raw.githubusercontent.com/seasonZhu/GetXStudy/HEAD/ScreenShots/9.PNG

本次重构,很多代码部分还是沿用之前的Flutter项目的逻辑,同时因为有RxSwift的使用经验,使得我在本次开发中对于响应式理解更加轻车熟路。

注意,本项目目前只在iOS侧编译运行成功,Android端的情况目前还在调试,如果有问题,还欢迎大家指点一二。

界面截图

Cupertino风格

https://raw.githubusercontent.com/seasonZhu/GetXStudy/HEAD/ScreenShots/1.PNG https://raw.githubusercontent.com/seasonZhu/GetXStudy/HEAD/ScreenShots/2.PNG https://raw.githubusercontent.com/seasonZhu/GetXStudy/HEAD/ScreenShots/3.PNG https://raw.githubusercontent.com/seasonZhu/GetXStudy/HEAD/ScreenShots/4.PNG

Material风格

https://raw.githubusercontent.com/seasonZhu/GetXStudy/HEAD/ScreenShots/5.PNG https://raw.githubusercontent.com/seasonZhu/GetXStudy/HEAD/ScreenShots/6.PNG https://raw.githubusercontent.com/seasonZhu/GetXStudy/HEAD/ScreenShots/7.PNG https://raw.githubusercontent.com/seasonZhu/GetXStudy/HEAD/ScreenShots/8.PNG
功能说明
  • 首页、项目、体系、我的,四大模块
  • 登录注册功能
  • 搜索功能:热门搜索、输入搜索
  • 文章列表
  • Tab切换功能
  • 自动轮播图
  • 下拉刷新,上拉加载更多
  • dio的使用,pretty_dio_logger进行漂亮的网络请求打印
  • GetX的响应式编程,GetXController统和逻辑,Bindings进行统一注入
  • Material和Cupertino两种风格切换,切换分支main与develop_cupertino即可
引入的第三库
  # iOS风格图标
  cupertino_icons: ^1.0.5
  # GetX框架,用于状态管理、路由、依赖注入等
  get: ^4.6.5
  # 网络请求库
  dio: ^5.2.0+1
  # Dio请求日志打印美化
  pretty_dio_logger: ^1.3.1
  # Dio的原生平台适配器
  native_dio_adapter: ^1.0.0+1
  # 网络图片缓存加载组件
  cached_network_image: ^3.2.3
  # 本地轻量级数据存储
  shared_preferences: ^2.1.1
  # 全局加载中提示组件
  flutter_easyloading: ^3.0.5
  # 下拉刷新和上拉加载更多组件
  pull_to_refresh: ^2.0.0
  # 轮播图组件
  card_swiper: ^3.0.1
  # WebView组件,用于加载网页
  webview_flutter: ^4.2.2
  # 滑动操作组件(如侧滑删除)
  flutter_slidable: ^4.0.3
  # 汉字转拼音工具
  lpinyin: ^2.0.3
  # 跑马灯文本组件
  marqueer: ^2.3.1
  # 分享功能插件
  share_plus: ^12.0.1
  # 响应式编程库,提供Stream相关工具
  rxdart: ^0.28.0
  # 图片选择器(从相册/相机获取图片)
  image_picker: ^1.0.1
  # URL启动器(打开链接、拨打电话等)
  url_launcher: ^6.1.5
  # 文件路径获取(获取应用沙盒路径等)
  path_provider: ^2.0.11
  # 事件总线,用于组件间通信
  event_bus: ^2.0.0
  # 文件打开工具
  open_file: ^3.2.1
  # 组件可见性检测
  visibility_detector: ^0.4.0+2
  # 权限请求处理(如相机、存储权限)
  permission_handler: ^12.0.1
  # 日志打印工具
  logger: ^2.6.2
  # 设备信息获取(如型号、系统版本)
  device_info_plus: ^12.3.0
  # API接口生成工具(基于Retrofit风格)
  retrofit: '>=4.0.0 <5.0.0'
  # JSON序列化注解
  json_annotation: ^4.8.1
  # 应用包信息获取(版本号、包名等)
  package_info_plus: ^8.3.0
  # 原生启动屏设置
  flutter_native_splash: ^2.4.7

GetX的感受

在Flutter端,我入门的时候根本不懂状态管理为何物,用的最多的是StatefullWidget,setState进行页面的刷新,但是随着不断的深入,我渐渐理解了Provider以及BLoc这些框架的意义与目的。

伴随着响应式在我编程中的深入,我也开始接触GetX。

其实Flutter中有RxDart,但是并没有与之对应的RxFlutter,你可以用响应式搭建逻辑,但是如何与UI进行绑定又是一个问题。

GetX很好的完成了任务,GetX其实更像一个全家桶,里面不仅仅有响应式,还有网络、路由、状态管理,以及一些常用工具。

当然使用GetX里面也有很多奇奇怪怪的坑,我遇到最多的就是GetXController要么没有创建,有么没有找到,但是GetX的好用也是显而易见的,它让你摆脱了context。

总之,GetX是一个有点不太符合Flutter风格的插件,摒弃了自顶而下的管理思路(需要注意的是,自顶而下这种思路其实普遍见于前端),通过Map形式保存Widget与对应的GetXController,其实并不算太新颖的思路,但是它的好处就是,即便你Flutter使用的不够溜,用GetX写逻辑很快就会找到熟悉的感觉,Get.put与Get.find简直就是召之即来挥之即去,使用是简单了,同时也需要小心翼翼,理解背后的原理。

说实话,Provider我觉得其实还是挺不错的,但是如BLoc、Redux,在我看来有的时候真的是异常复杂,理解不难,写起来贼费劲。

所以如果你还在入门Flutter,我觉得,从StatefullWidget到Provider,这才是一个正常的循序渐进的过程,响应式固然好,但是也是需要一步一个台阶向上的。

最后,你再来学习GetX,才会懂的其中的精妙。

所谓一通百通,我也通过RxSwift与Vue尝试写了wanandroid客户端,也欢迎大家一起学习。

2023年8月15日更新

最近这一个月GetXStudy更新的比较频繁,别人的项目都是越写越复杂,我这个项目嘛,删除了不少模块,比如项目和公众号模块完全就被tree模块复用了,也让我在思考同一个controller如何在不同业务页面实施的问题,理顺对应的tag,如何正确的获取到对应的controller。

RefreshStateView和StateView也只保留了一个,我太过自信的认为Dart的泛型会和Swift的泛型一样会智能推断,才导致了之前有两个差不多的Widget。

尽量将Page层从StatefullWidget转到StatelessWidget,TabListPage就是一个生动的例子。

对于响应式、RxDart、GetX以及Stream多了那么一点理解。

使用了Dart版本的Retrofit,真香,目前正在考虑是否将网络请求层进行替换。

将MyController的业务拆分的更为细化。

对于Mixin的使用也有了更多理解,感觉更像Swift中Protocol的Extension,同时可以mixin不仅可以增加方法,而且可以定义属性,同时如果申明是基于某个类的mixin,甚至可以对某个类的方法与属性都能操作,灵活度非常的大。

明明最近大半年都没有怎么写Flutter,结果折腾起来的都是大刀阔斧的进行,可能因为都是表层Api吧。

其实很想把AccountManager的逻辑写到AccountController里面去,不过看了一下逻辑和操作,本质上面没有变化就算了。

已经将AccountManager抽到了AccountService层了。

2025年12月26日更新

其他版本的wanandroid客户端

Swift版wanandroid客户端 Flutter版wanandroid客户端 HarmonyOS版wanandroid客户端 uni-app版wanandroid客户端

我的掘金主页

我的主页