2 个月时间写了个小项目,谈谈写 flutter 的一点感受吧

2024-01-23 23:40:44 +08:00
 chshapple

先放链接: https://apps.apple.com/cn/app/%E5%8D%9A%E7%89%A9%E6%97%85%E4%BA%BA/id6466980576

之前服务端和前端都做,最近 flutter 边学边写,合伙搞了个 app 出来,谈谈感受吧

  1. 出厂自带的 md3 对国内的设计习惯非常不友好,有大量时间在做样式覆盖。可能以前中台 web 做习惯了,antd 一把梭,从来都不考虑样式。
  2. 并没有遇到严重的地狱嵌套问题,提高代码可读性的方法有很多,包括但不限于组件的分离、使用 mixin 、使用 extension ,以及合理使用逗号。
  3. 在 iOS 上基本没有遇到性能问题。Android 上掉帧就比较多了,一些动画根本不敢用,打开 impeller 开关后更是一堆 bug 。
  4. 组件封装的书写挺难受的。一些轮子组件,动辄 2 、30 个 named parameter 。封装自定义组件的时候,这些参数我又得再写一遍,然后传给轮子。幸好有 copilot ,不然得疯。
  5. 各种代码生成器,json 序列化、riverpod 、retrofit 、路由等等。刚开始不懂,后来懂了,原来 dart 没有反射

就想到了这么多吧,结论就是:下次还是写原生吧,即使是小作坊。还挺想试试 jetpack 写 android

4991 次点击
所在节点    程序员
28 条回复
AItsuki
2024-01-24 01:01:47 +08:00
jetpack 还不如 flutter ,无论从性能还是易用性上…… 不过确实值得试试。
flyun
2024-01-24 07:45:12 +08:00
1.因为 flutter 本身就是对标 Android 设计风格,而国内 App 大部分是 iOS 风格。
2.嵌套确实是一个问题,但是可以采取编码风格来避免。
3.flutter 在 iOS 因为硬件单一官方容易适配,Android 硬件碎片化,现在看到官方还在适配中,加上 Android 屏幕刷新普遍达到 120hz ,问题更明显。

关于 App ,如果有时间修改,建议城市包,可以提供用户试用,比如试听几分钟。一上来就付费,心里很难有底。另外可以在 iOS 模拟器多适配几个机型,在用户协议与隐私条例-同意并登录按钮文字出现折行,同意并登录时,应该改变下面协议为选中状态。

关于跨平台,可以明确自己的 App ,偏向丰富的功能还是偏向精美 UI 交互。跨平台、功能、UI ,这就像三个圆形,人力不够的情况无法同时都覆盖。
murmur
2024-01-24 08:43:39 +08:00
ios 下就算 h5 都没多少性能问题
oukichi
2024-01-24 08:48:46 +08:00
我反而比较关注的是。。你自己写 app 然后注册了一个公司。。是不是现在个人开发者已经无法上架应用了?
liufish
2024-01-24 08:57:59 +08:00
@oukichi 目前 App Store 应该还给个人开发者上架的
tikazyq
2024-01-24 09:12:28 +08:00
所以还是 RN 比较合适?
19960623lyf
2024-01-24 09:14:33 +08:00
交互挺好的
debuggerx
2024-01-24 09:35:38 +08:00
“5. 各种代码生成器,json 序列化、riverpod 、retrofit 、路由等等。刚开始不懂,后来懂了,原来 dart 没有反射”—— 其实和反射关系不大,或者说并不是你理解的那个样子
timelessg
2024-01-24 09:42:39 +08:00
dart 就是一坨💩
murmur
2024-01-24 09:45:05 +08:00
@tikazyq rn 版本号不提到 1.0 总感觉跟时代弃儿一样
okakuyang
2024-01-24 09:53:27 +08:00
@oukichi 个人开发者要把自己的大名挂在商店里你 app 旁边,你想一想那酸爽。
chshapple
2024-01-24 10:46:56 +08:00
@flyun 感谢建议。其实有试听,每天 5 分钟,现在准备时间再加长。UI 问题后续会在多种屏幕尺寸的机型上再做下测试。
chshapple
2024-01-24 10:48:00 +08:00
@oukichi 所有的开发都是我自己做的,不过还有合伙人,内容这块我是真不懂,有些还挺学术的
HyperLuo
2024-01-24 11:16:56 +08:00
尝试使用 jsbridge 和 webview 了吗,感觉如何
lwjlol
2024-01-24 11:28:32 +08:00
可以默认关闭 material design 3 然后使用苹果风格前缀为 Cupertino 的组件,组件封装可以使用一个 类似 TextStyle 的 包装类作为参数,这样传入这个包装 Style 参数就行。
lwjlol
2024-01-24 11:32:22 +08:00
另外 swiftui 以及 jectpack compose 的成熟性都不如 flutter ,你上面提到的那些问题,对我来说都不是问题。
lwjlol
2024-01-24 12:05:59 +08:00
@lwjlol Android 上掉帧可能是部分国产机型帧率适配原因,https://pub.dev/packages/flutter_displaymode 用这个库初始化的时候手动提高一下帧率。其他部分如果发生掉帧,就 devtool 检查下哪部分代码导致的掉帧,ios 机器性能普遍较高,有问题但是被机器的性能掩盖掉了导致你以为只是在 android 掉帧。
hahastudio
2024-01-24 12:12:23 +08:00
样式这个我觉得是所有跨平台框架的问题,说着是一份代码到处执行,但其实可能真正能复用的只是客户端跟服务器之间的代码
让应用体验够好的话,还得是不同的平台给不同的交互逻辑
lwjlol
2024-01-24 12:13:11 +08:00
lwjlol
2024-01-24 12:18:38 +08:00
@lwjlol 而且这个官方的 showcase 是包括 desktop 平台的,这也是使用 flutter 的最大收益,简单的 app 仅仅只是一些 ui 的展示,完全没有必要每个端写一个原生 app ,为了所谓的原生交互体验(我说着难听直接一点就是技术能力不够,找借口是 flutter 卡)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1011033

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX