V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
chshapple
V2EX  ›  程序员

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

  •  
  •   chshapple · 2024-01-23 23:40:44 +08:00 · 4942 次点击
    这是一个创建于 372 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先放链接: 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

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

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

    关于跨平台,可以明确自己的 App ,偏向丰富的功能还是偏向精美 UI 交互。跨平台、功能、UI ,这就像三个圆形,人力不够的情况无法同时都覆盖。
    murmur
        3
    murmur  
       2024-01-24 08:43:39 +08:00
    ios 下就算 h5 都没多少性能问题
    oukichi
        4
    oukichi  
       2024-01-24 08:48:46 +08:00   ❤️ 1
    我反而比较关注的是。。你自己写 app 然后注册了一个公司。。是不是现在个人开发者已经无法上架应用了?
    liufish
        5
    liufish  
       2024-01-24 08:57:59 +08:00
    @oukichi 目前 App Store 应该还给个人开发者上架的
    tikazyq
        6
    tikazyq  
       2024-01-24 09:12:28 +08:00
    所以还是 RN 比较合适?
    19960623lyf
        7
    19960623lyf  
       2024-01-24 09:14:33 +08:00
    交互挺好的
    debuggerx
        8
    debuggerx  
       2024-01-24 09:35:38 +08:00
    “5. 各种代码生成器,json 序列化、riverpod 、retrofit 、路由等等。刚开始不懂,后来懂了,原来 dart 没有反射”—— 其实和反射关系不大,或者说并不是你理解的那个样子
    timelessg
        9
    timelessg  
       2024-01-24 09:42:39 +08:00 via Android
    dart 就是一坨💩
    murmur
        10
    murmur  
       2024-01-24 09:45:05 +08:00
    @tikazyq rn 版本号不提到 1.0 总感觉跟时代弃儿一样
    okakuyang
        11
    okakuyang  
       2024-01-24 09:53:27 +08:00 via iPhone
    @oukichi 个人开发者要把自己的大名挂在商店里你 app 旁边,你想一想那酸爽。
    chshapple
        12
    chshapple  
    OP
       2024-01-24 10:46:56 +08:00
    @flyun 感谢建议。其实有试听,每天 5 分钟,现在准备时间再加长。UI 问题后续会在多种屏幕尺寸的机型上再做下测试。
    chshapple
        13
    chshapple  
    OP
       2024-01-24 10:48:00 +08:00
    @oukichi 所有的开发都是我自己做的,不过还有合伙人,内容这块我是真不懂,有些还挺学术的
    HyperLuo
        14
    HyperLuo  
       2024-01-24 11:16:56 +08:00
    尝试使用 jsbridge 和 webview 了吗,感觉如何
    lwjlol
        15
    lwjlol  
       2024-01-24 11:28:32 +08:00
    可以默认关闭 material design 3 然后使用苹果风格前缀为 Cupertino 的组件,组件封装可以使用一个 类似 TextStyle 的 包装类作为参数,这样传入这个包装 Style 参数就行。
    lwjlol
        16
    lwjlol  
       2024-01-24 11:32:22 +08:00
    另外 swiftui 以及 jectpack compose 的成熟性都不如 flutter ,你上面提到的那些问题,对我来说都不是问题。
    lwjlol
        17
    lwjlol  
       2024-01-24 12:05:59 +08:00
    @lwjlol Android 上掉帧可能是部分国产机型帧率适配原因,https://pub.dev/packages/flutter_displaymode 用这个库初始化的时候手动提高一下帧率。其他部分如果发生掉帧,就 devtool 检查下哪部分代码导致的掉帧,ios 机器性能普遍较高,有问题但是被机器的性能掩盖掉了导致你以为只是在 android 掉帧。
    hahastudio
        18
    hahastudio  
       2024-01-24 12:12:23 +08:00
    样式这个我觉得是所有跨平台框架的问题,说着是一份代码到处执行,但其实可能真正能复用的只是客户端跟服务器之间的代码
    让应用体验够好的话,还得是不同的平台给不同的交互逻辑
    lwjlol
        19
    lwjlol  
       2024-01-24 12:13:11 +08:00
    lwjlol
        20
    lwjlol  
       2024-01-24 12:18:38 +08:00   ❤️ 1
    @lwjlol 而且这个官方的 showcase 是包括 desktop 平台的,这也是使用 flutter 的最大收益,简单的 app 仅仅只是一些 ui 的展示,完全没有必要每个端写一个原生 app ,为了所谓的原生交互体验(我说着难听直接一点就是技术能力不够,找借口是 flutter 卡)
    yaocf
        21
    yaocf  
       2024-01-24 12:23:06 +08:00 via Android
    dart 是有反射的,只是 flutter 没有,可能是谷歌被 java 时代的反射搞怕了,flutter 禁用 dart 之后,世界一下子就安静了。
    chshapple
        22
    chshapple  
    OP
       2024-01-24 12:24:03 +08:00
    @HyperLuo 没有用到哎,早期写 cordova 项目的时候全是这种东西。webview 适合一些大型 APP 做部分临时的脏业务,灵活性会非常高,像我们这种小东西就完全用不到。
    chshapple
        23
    chshapple  
    OP
       2024-01-24 12:42:17 +08:00
    @lwjlol 感谢你的建议,我确实研究过这个官方示例。高刷屏的 Android 机型在很多时候流畅度甚至超越 iOS ,只是会碰到一些小问题(例如动画方式的图片模糊会有明显卡顿),开发的时候我还是用的几年前的骁龙 888 平台的机子,可能再新一点的机型会有改善。
    lwjlol
        24
    lwjlol  
       2024-01-24 13:04:03 +08:00
    @chshapple 等待 android 的 impeller 正式版,可能会有改善,估计就最近几个版本。
    iOCZS
        25
    iOCZS  
       2024-01-24 13:26:50 +08:00
    反射会影响 tree shaking
    xieren58
        26
    xieren58  
       2024-01-24 13:43:23 +08:00
    jectpack compose 好用太多...
    dazuijuren004
        27
    dazuijuren004  
       2024-01-24 14:44:24 +08:00
    app 体验很好,👍
    magic3584
        28
    magic3584  
       2024-01-26 08:25:50 +08:00 via iPhone
    最近研究 iOS 原生的东西,比如在 shortcuts 调用 flutter ,快 2 周了还没好,要炸了,我太菜了。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   703 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:40 · PVG 05:40 · LAX 13:40 · JFK 16:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.