flutter-getx-template
flutter-getx-template copied to clipboard
项目不错: 有几个建议
- 这个模板目录结构还可以.
- 不过不确定你有没有看过官方的 get_cli 生成的模板目录.
-
- get_cli 除了可以初始化目录, 还可以命令行添加 page/view/controller.
- 我看你基于一个 js 的工具, 做脚手架.
- 我早先也尝试自己定义一个目录, 不过试用官方的
get_cli
生成的目录. 还是决定用官方的目录了.
get_cli 支持的指令:
- 我不确定你有使用过这些指令麽.
- 这些指令已经足够好用. 我是建议你可以把这个 repo 里, 新增的特性, 提交给官方的脚手架.
get-create-project:
cmds:
- get create project:my_app
# 初始化 app 目录:
get-init:
cmds:
- get init
- task: mkdir
vars: {FOLDER: "lib/app/data/locales"}
# 代码格式化:
get-sort:
cmds:
- get sort
get-gen-locales:
desc: "generate multi language(i18n)"
cmds:
- get generate locales assets/locales on data/locales
get-add-page:
cmds:
- get create page:$PAGE_NAME # set from .env(check .env.local)
get-add-sub-page:
cmds:
- get create page:$PAGE_NAME on $PAGE_PATH
get-add-controller:
cmds:
- get create controller:$VIEW_NAME on $VIEW_PATH
get-add-view-only:
cmds:
- get create view:$VIEW_NAME on $VIEW_PATH
get-add-view:
cmds:
- task: get-add-view-only
- task: get-add-controller
get-provider:
cmds:
- get create provider:$PROVIDER_NAME on data
get-gen-model:
cmds:
#- get generate model with assets/models/wallet_address_asset_entity.json --skipProvider
- get generate model with $MODEL_JSON_FILE_PATH --skipProvider
几个优化点:
- 多语言: 官方的 get_cli 支持生成: 不需要手动管理
get generate locales assets/locales on data/locales
- 基于官方脚手架添加页面, 会自动更新 router.
- main 文件: Global.init().then() 是个好写法. 不过. 其实 Global 不需要这样定义.
- Get.put(), Get.lazyPut() 可以 put 任何东西, 包括全局变量集.
- 你可以后续使用 Get.find
() 方式, 在项目任意位置访问到. 其实间接实现全局变量的效果. - 这样会更方便.
Get.lazyPut<HomeController>(() => HomeController());
anyway:
- 不是来吵架的哈. 我是看到有同样喜欢 GetX 的开发者. 过来看一下. 😄
- 另外, 我创建了一个技术讨论组
gossipcoder
. 欢迎加入一起来讨论技术, flutter 或者其他. - https://github.com/hhstore/blog/issues/309
discord 讨论组:
- https://discord.gg/MnDA9pfWAW
- 删掉了 keybase 的讨论组, 迁移到 discord.
- 之前选择 keybase, 是觉得没被墙. 还是不够稳定
keybase是啥?discord不蛮好的么。。。
使用get_cli可能会方便一些,自己创建模板也没问题,个人习惯而已。
keybase是啥?discord不蛮好的么。。。
使用get_cli可能会方便一些,自己创建模板也没问题,个人习惯而已。
- keybase 是个小众 app, 决定弃用了(消息同步不稳定). 迁移到 discord. 如果你有使用 discord, 欢迎加群交流.
- https://discord.gg/MnDA9pfWAW
- 哈哈, 其实是建议项目作者, 把
这个模板
里重要的部分, PR 到 官方的 get_cli, 这样用起来也方便. 😄
还有一点是 官方的 get_cli 生成的模板结构. 总体是很好用的. 与官方保持一致, 后续更好维护, 毕竟以后会有更多的特性引入.
@hhstore 非常感谢你的支持与建议!
-
getx cli
我看过了,的确功能很多,更新得也及其快,我现在去看,已经比我当时看,多了很多特性。我这边后续的计划是,关注getx cli
的更新,会加入一些比较好的功能,我个人不太喜欢把工具做得太过复杂。 - 另外对于你说的
Global.init().then()
,我是知道“Get.put(), Get.lazyPut() 可以 put 任何东西”
这一点的,这个就看个人习惯了,我这里考虑的是,代码更加适应于新手,另外也得让这个template
尽可能的轻,所以才选择了这样的方式。 - 针对你说的
与官方保持一致, 后续更好维护, 毕竟以后会有更多的特性引入.
,这里其实我这套架构方式,是遵循了阿里的umi
的架构方式,偏前端,所以这套架构方式,可能会更适合前端接受😄 - 最后,如果有更好的建议,可以继续讨论!
写得真好,点🌟了
@hhstore 非常感谢你的支持与建议!
getx cli
我看过了,的确功能很多,更新得也及其快,我现在去看,已经比我当时看,多了很多特性。我这边后续的计划是,关注getx cli
的更新,会加入一些比较好的功能,我个人不太喜欢把工具做得太过复杂。- 另外对于你说的
Global.init().then()
,我是知道“Get.put(), Get.lazyPut() 可以 put 任何东西”
这一点的,这个就看个人习惯了,我这里考虑的是,代码更加适应于新手,另外也得让这个template
尽可能的轻,所以才选择了这样的方式。- 针对你说的
与官方保持一致, 后续更好维护, 毕竟以后会有更多的特性引入.
,这里其实我这套架构方式,是遵循了阿里的umi
的架构方式,偏前端,所以这套架构方式,可能会更适合前端接受😄- 最后,如果有更好的建议,可以继续讨论!
-
😄
-
getx cli
可用性蛮高了, 我开始折腾了一个项目模板结构, 后面还是放弃了. 🐶 -
关于 Get.put() 和 Get.find() 这种使用方式. 我最近有个新的实践收获:
- 基于 Get.put() 的方式, 控制好, 很容易对 Controller 层, 写单元测试.
- 这样按照 view -> controller -> service, 其实除了 view 的样式层. 其他 logic 部分. 都可以写单元测试了.
- 具体搭配 go 的 newClass() 的写法.
- 可供参考.
-
我认为写易于测试的代码, 对于保证质量和提高效率, 有帮助, 这样就不需要到 UI 交互才能测试.
-
io 对象层: new() 方法, 同时调用 Get.put() 存入全局 cache, 这样便于访问资源.
- io 读写层:
- service 功能层:
- 按照我这种写法. 除了 view 层(UI+样式), 其他各层, 都可以写单元测试覆盖.
- 单元测试里, 只需要调用 每层的 new() 方法. 利用 Get.find() 这个全局 cache 效果.
- 单元测试很好写.
- Get.put() 和 Get.find() 某种程度上, 实现了 new()/set() 和 get() 的解耦.
- 是一种异步思想(类似消息队列的效果)
- GetX 作者本人, 以前是写后端的. so, 这个模式, 后端很熟悉.
- GetX 里很多特性设计, 都是比较方便写单元测试的.
@hhstore
你的思路很棒,的确完全是后端的思路,可以将Global
抽象成全局services
然后用getx put
的方式注入。
学习了!
可以加你联系方式请教下么
可以加你联系方式请教下么
@huangcx708 可以email沟通
可以加你联系方式请教下么
https://discord.gg/MnDA9pfWAW
我这里有个 discord 的技术交流群. 可以来这里交流, 邀请了很多 flutter 的开发. 也有其他语言的开发者.
@xieyezi 也欢迎大佬加入. 切磋学习.
@hhstore 你的思路很棒,的确完全是后端的思路,可以将
Global
抽象成全局services
然后用getx put
的方式注入。 学习了!
- 是的. 我是看了 Get.put() 的源码. 以及 routes 相关的实现. 然后发现. Get.put<> 可以干很多事情.
- 你其实可以把他当个 redis 使用. 都是没问题的. 这样其实可以对 app 的启动性能, 做很多优化.
- GetX 的对性能优化的很多技巧, 都很符合后端常用讨论.
- 😄
Get.put()
和Get.find()
的确可以用来做很多事情,比如上面所说的全局cache,他放在了一个Map
结构来存储,但是如果被滥用了的话,内存很逐渐变大且无法释放。
Get.put() & Get.find()
一般可以正常的put/get Controller,因为Controller有lifecycle可以随着页面的销毁而释放,也可以自行释放。如果是作为put/get
全局services使用,建议结合GetRoute的Bindings
来使用,这样Get会自动为你管理内存。当然少量使用是没有问题,我这里说的是best practice。
Get.put()
和Get.find()
的确可以用来做很多事情,比如上面所说的全局cache,他放在了一个Map
结构来存储,但是如果被滥用了的话,内存很逐渐变大且无法释放。Get.put() & Get.find()
一般可以正常的put/get Controller,因为Controller有lifecycle可以随着页面的销毁而释放,也可以自行释放。如果是作为put/get
全局services使用,建议结合GetRoute的Bindings
来使用,这样Get会自动为你管理内存。当然少量使用是没有问题,我这里说的是best practice。
- 对的.
- 作为全局 cache 使用, 就不要 继承自
GetxController + permanent=true 参数
, 可以选择 GetxService.不过这样含义就有迷惑性. - 我是自定义一个类似 AppCache() 的类. 然后, Get.put<> +permanent=true 使用.
- 基于 GetX, 就不再需要单独引入 全局 cache 之类的工具包.
- 整体利用 GetX 全家桶. 倒是很方便的.
- hive 我也不用了, 类似 protobuf 的方式, 有点繁琐. GetStorage 基本够用.
- 我也尝试优化基于 GetX 的实践方式.
- 大家可以多探讨交流最佳实践的用法. 😄
关于 GetRoute的Bindings来使用:
- 我实践下来. 有点不喜欢 Get.toNamed() 这种路由方式. 虽然他自带 Bindings, 挺方便.
- 原因是:
- 代码跳转的时候, 会断掉. 找不到哪里在使用. 只能全局搜索. 有点不方便.
- 单元测试. 如果使用 Bindings, 对 Controller 写单元测试, 就有干扰. 有侵入性.
- 我一般除了1级页面. 用 Get.toNamed() 方式.
- 其他页面. 都尽量选择 Get.to(), 手动管理 Get.put<Controller>().
- 这样调试, 方便找代码. 灵活增/删 page/Controller. 不然要同步更新(增/删) GetRoute 的路由表.
- 当然. 这个只是个人喜好.