V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuxuxu123
V2EX  ›  程序员

求指导:公司现在需要开发 app,计划使用 flutter

  •  
  •   xuxuxu123 · 2023-07-01 23:17:29 +08:00 · 8187 次点击
    这是一个创建于 382 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司现在需要开发 app ,计划使用 flutter ;客户端涉及安卓以及 IOS ;
    求助各位大佬,讲一下 flutter 开发过程中需要注意的点,以及有没有好点的教程可以推荐一下;
    小弟在此感谢
    第 1 条附言  ·  2023-07-02 22:27:06 +08:00
    不一一回复了,感谢各位老哥的支持与帮助;
    关于提到的方案,我会认真参考;

    大家的疑问:
    是否涉及硬件及三方 sdk:app 类似于物联网设备管理,一定涉及硬件交互及三方 sdk 嵌入
    我的开发背景:本人以前为前端开发,搞过后端,对 app 开发有所了解

    再次表示忠诚的感谢
    82 条回复    2023-07-26 09:40:29 +08:00
    haha512
        1
    haha512  
       2023-07-01 23:22:09 +08:00
    https://book.flutterchina.club/
    superedlimited
        2
    superedlimited  
       2023-07-01 23:22:33 +08:00 via iPhone   ❤️ 4
    用 react native + expo ,坑会少很多。
    Bijiabo
        3
    Bijiabo  
       2023-07-02 00:22:23 +08:00
    如果考虑项目长期使用,建议不要选择 Flutter 方案
    x77
        4
    x77  
       2023-07-02 00:55:46 +08:00   ❤️ 4
    2021 年接触 Flutter 以来从未遇到让人失望的事情,只看官方文档
    estk
        5
    estk  
       2023-07-02 00:57:40 +08:00
    用 react native + expo ,坑会少很多。
    storypanda
        6
    storypanda  
       2023-07-02 07:00:40 +08:00
    debuggerx
        7
    debuggerx  
       2023-07-02 07:36:32 +08:00 via Android   ❤️ 2
    只看官方文档即可快速入门,少看官方以外的资料避免被误导走弯路,没事别瞎封装瞎架构,原生开发的很多习惯可能会是累赘,别用 getx ,多选官方和社区维护的高质量库。
    发展到现在,rn 和 flutter 已经没啥可比性了,只要不看垃圾教程或者自己瞎写走弯路,flutter 的坑实际比 rn 要少
    sSsSsSs
        8
    sSsSsSs  
       2023-07-02 08:52:15 +08:00
    如果你会写插件,Flutter 几乎没坑,大多数人遇到的坑,就是第三方插件有问题。
    shanghai1998
        9
    shanghai1998  
       2023-07-02 09:31:44 +08:00
    能接受 产品上线后,闲养 2 个 flutter 中高级工程师 就可以用
    pdog18
        10
    pdog18  
       2023-07-02 10:02:34 +08:00
    op 有移动端开发经验吗?什么背景介绍一下啊
    murmur
        11
    murmur  
       2023-07-02 10:10:01 +08:00   ❤️ 2
    我们也在纠结这个问题,我有点偏向 rn 了,rn 因为渲染的本身就是 native ,当和 fragment 集成的时候更有优势,有的 sdk 给的是 fragment ,直接作为页面的一部分,注意是一部分不是整个页面是可以做到的
    nikenidage1
        12
    nikenidage1  
       2023-07-02 10:25:20 +08:00
    有 rn 和 flutter 的比较吗?
    darkengine
        13
    darkengine  
       2023-07-02 10:41:39 +08:00
    @debuggerx 感觉官方文档有点到即止,看#1 提到的 https://book.flutterchina.club/ 解答了很多疑问。
    CodingIran
        14
    CodingIran  
       2023-07-02 10:44:41 +08:00   ❤️ 1
    @x77 我现在的公司从去年开始将技术栈从原生 --> Flutter ,肠子都悔青了,各种插件水平参差不齐,已经 fork 了很多插件修改源码才勉强运行(内购插件、Auth2 登录、自动更新、日志埋点...) 期间造轮子的时间和成本一言难尽...
    强烈建议只把 Flutter 做一个 UI 框架引入到原生项目,如果你的 App 有大量与原生平台底层交互的场景,谨慎 All in Flutter !
    darkengine
        15
    darkengine  
       2023-07-02 10:45:09 +08:00
    @murmur 不知道 Flutter 的 AndroidView 能不能解决这个问题: 用 Flutter 的 Widget 包这个 AndroidView ,在 AndroidView 初始化的时候把需要 Fragment 加上。
    CodingIran
        16
    CodingIran  
       2023-07-02 10:49:13 +08:00
    @CodingIran 另外补充一点,如果你的 App 对流畅度(要求动画丝滑、转场流畅)和性能(内存占用、启动速度、交互响应)要求很高的话,也要慎重考虑 Flutter 。
    ps: 同一个项目,切换到 Flutter 之前,冷启动后 iOS 原生内存占用 50~80M ; Flutter iOS 版内存占用 150M +,执行动画时会飙升 200M +(很简单的动画)
    murmur
        17
    murmur  
       2023-07-02 10:52:40 +08:00
    @darkengine 需求其实就是 IM SDK 集成,通讯录界面、消息列表都是对方提供,作为 app 的一个 tab 页

    网上的思路都是相反的,native 做这部分,其余的业务用 flutter 做

    rn 就不存在这个问题,每一部分都是原生组件,用 rn 写和套 native 没什么区别
    darkengine
        18
    darkengine  
       2023-07-02 11:04:03 +08:00
    @murmur 嗯,官方给的例子也是把 Flutter Fragment 嵌入到现有的 native Android 项目。其实反过来想,还有个方案是其他 tab 嵌 Flutter ,IM 这个 tab 保持原生。不过维护起来可能会有很多坑 😂
    RightHand
        19
    RightHand  
       2023-07-02 11:17:45 +08:00 via Android
    rn 官方都抛弃了
    zoharSoul
        20
    zoharSoul  
       2023-07-02 11:21:19 +08:00
    @superedlimited #2 感觉 rn 在 Android 上的表现真的垃圾
    skenan
        21
    skenan  
       2023-07-02 11:23:27 +08:00
    @RightHand 你这是造谣吧
    gitopen
        22
    gitopen  
       2023-07-02 11:27:05 +08:00
    webview + react 不香吗 😃
    murmur
        23
    murmur  
       2023-07-02 11:28:12 +08:00
    @gitopen webview 有个致命问题,就是 ios 的相机太 tm 占资源了,只要一拍照 webview 直接进程干死白屏,你还得用一堆代码去做错误恢复
    fox0001
        24
    fox0001  
       2023-07-02 11:30:19 +08:00 via Android
    我觉得,尽早引入 provider 或者 getx ,开发思路接近 vue 。
    RightHand
        25
    RightHand  
       2023-07-02 11:34:48 +08:00 via Android
    @skenan 现在是社区维护,还有大佬站台么?
    ac169
        26
    ac169  
       2023-07-02 11:39:17 +08:00
    [ [**跨平台应用程序开发框架那家强?**]( https://www.v2ex.com/t/952470) ] 看来有不少团队有相同的困惑。个人也倾向 flutter 但是没有对比无法理性选择。
    SolidZORO
        27
    SolidZORO  
       2023-07-02 11:41:52 +08:00 via iPhone
    @RightHand 本来不想说的但是你这的确是造谣啊。

    官方一直在维护,rn 现在出到 0.72 了。而且 yoga css 都 2.0 在 alpha 了。expo 那边也到了 sdk49 ,一直更新中,而且越来越多 lib 都包含 for rn-web 版本了。

    rn 生态也算是很好的。因为封装一个 lib 太容易了。android 和 iOS 各找一个对应功能,极少代码量就可以完成封装。

    不过我现在要选肯定 rn + webview ,实在太方便了,web 真的是未来。
    putaozhenhaochi
        28
    putaozhenhaochi  
       2023-07-02 12:19:31 +08:00 via iPhone
    什么 react native ,flutter 啊。说不定还不如不折腾的原生呢
    daliusu
        29
    daliusu  
       2023-07-02 12:27:00 +08:00
    如果你们全职移动端没有,最好的解决办法是 web 套壳,真别不信.... 不管移动端还是 pc ,这都是最省心省力的办法
    milukun
        30
    milukun  
       2023-07-02 12:32:45 +08:00   ❤️ 1
    1 、确定应用大方向的需求,确认是否适合 flutter 开发,以下并不适合

    ( 1 )完全是小组件应用,如万能小组件
    ( 2 )手表应用
    ( 3 )强文本编辑交互类,例如“纯纯写作”,应用基本完全基于用户输入、写笔记方面。因为富文本处理比较差,虽然很比较好的开源,但是 fl 对文本的支持一直都差点意思

    2 、尽快确定状态管理和路由使用什么,整个团队达成共识

    GetX 简单但是比较有争议,主要在于有些开发者觉得 GetX 封装了太多东西,简单的代价是社区不维护的话就有风险

    3 、多逛逛 pub.dev 搜索第三方包,很多东西可以不必亲自实现,也可以借鉴
    也可以用 pubdev.top 以动图的方式浏览第三方包

    4 、flutter 的开发体验真的非常愉快,实际上手试试就知道了,学习的话可以跟随 google 官方课程:
    https://codelabs.developers.google.com/?text=flutter

    5 、推荐一个 Flutter 开源的项目,已经上架 app store 和 goole play

    App store: https://apps.apple.com/cn/app/wonderous/id1612491897
    git: https://github.com/gskinnerTeam/flutter-wonderous-app

    另外补充,有人对 flutter 有偏见说 app store 不喜欢第三方的框架,会在上架时又困难,其实并没有这个说法。flutter 开发的 APP 一样可以上苹果编辑推荐(我只上过一次周推荐
    x77
        31
    x77  
       2023-07-02 12:38:13 +08:00
    @CodingIran

    插件的确是这样,水平参差不起。

    我觉得一方面是因为(欠缺原生开发能力的)前端开发人员提供的插件较多,实现的插件 Native 代码还处于“能跑就行”的状态,性能、可靠性、兼容性、可维护等方面都较差。

    另外一方面,Google Flutter 的“选用”策略似乎也没了以前 Google 生态建设的智慧,一些高 Like 的 Package 竟然各种问题,很无语。

    要驾驭 Flutter 门槛还是蛮高的,前端、原生能力都要具备,虽然前端背景容易入手,但是想驾驭原生跨平台框架还是远远不够。但是 Flutter 对于有经验的开发者还是很不错的选择,毕竟框架本身做的还是很好。
    owen800q
        32
    owen800q  
       2023-07-02 13:17:47 +08:00
    @SolidZORO 我司最近两年的移动端项目都是 RN + webview
    原生交汇用 RN 写,UI 用 vant 写的,体验上和原生一样丝滑
    tpkxywxd
        33
    tpkxywxd  
       2023-07-02 13:40:30 +08:00
    flutter 适合应用不依赖太多原生功能,大部分内容是纯 UI ,同时你们团队想要追求更好的移动端使用体验,但又缺少移动端开发人员的场景下使用。

    同意 #7 楼的看法,只看官方文档就够了,尽量使用官方提供的或者社区长期维护的库,以简单实用为主,一个 package 只做一件事,别用功能大而全,从其它开源项目那里拷贝、七拼八凑起来的库。现在选择 flutter 其实相比 2021 年以前已经没什么坑了,但是如果想要针对 web 端和桌面端开发,就还是有不少坑的。
    ben123321
        34
    ben123321  
       2023-07-02 13:47:18 +08:00
    @milukun 大佬,想问下有开发过小组件吗?有个问题想请教下。
    qweruiop
        35
    qweruiop  
       2023-07-02 14:13:57 +08:00
    已经从 2 年的 flutter 起坑,转 rn+expo 了,心情无比好。特别是 android ,非常非常的不顺滑,再也不需要听研发说都是三方插件惹的祸了。
    meteor957
        36
    meteor957  
       2023-07-02 15:16:52 +08:00 via Android
    @RightHand 纯属造谣
    zerosrat
        37
    zerosrat  
       2023-07-02 15:22:19 +08:00
    @murmur 不用 webview 用 rn 的话,需要客户端投入很多。后者一样有坑的,比如 crash 率涨上去需要客户端来解。团队前端比较多的话,webview 和 rn 的学习成本小于 flutter ,
    roundgis
        38
    roundgis  
       2023-07-02 15:24:22 +08:00 via Android
    @owen800q vant 是用 vue 寫的那個?
    owen800q
        39
    owen800q  
       2023-07-02 15:27:54 +08:00
    sunnysab
        40
    sunnysab  
       2023-07-02 15:46:30 +08:00
    个人感觉比 RN 好,发请求到第三方服务器没有跨域问题。
    flutter 令我头疼的一点是库依赖的版本,比如某基础库 A 3.0 -> 4.0,你想用上,同时 B 依赖了 A (3.0),那么只要 B 不升依赖,你就没法升,也算是很多语言(的包管理器)有这个问题吧。

    跑个题,Rust 的 Cargo 会把两个版本的包 A ( 3.0,4.0 )都编译进进入最终程序,不会出现依赖冲突,所以我在 flutter 上遇到这个问题有点难受。
    rsyjjsn
        41
    rsyjjsn  
       2023-07-02 15:54:24 +08:00
    我情愿前期多花时间写 flutter ,也不愿意后期被业主指着改这个样式咋不统一的 rn
    roundgis
        42
    roundgis  
       2023-07-02 16:01:37 +08:00 via Android
    @owen800q 所以你們用 rn 跑一個 web server 然後把 vant 掛在上面用?還是直接用 webview 打開?
    owen800q
        43
    owen800q  
       2023-07-02 16:39:44 +08:00
    @roundgis
    rn 跑一個 web server 然後把 vant 掛在上面用, webview 訪問 localhost
    hsfzxjy
        44
    hsfzxjy  
       2023-07-02 16:46:36 +08:00 via Android
    话说 jetpack compose 怎么样
    Hanggi
        45
    Hanggi  
       2023-07-02 16:51:43 +08:00
    Flutter 没啥问题的,可以放心使用
    djxiaoyun
        46
    djxiaoyun  
       2023-07-02 16:56:27 +08:00 via iPhone
    @qweruiop 请教大佬,rn 的长列表会不会卡顿了?
    roundgis
        47
    roundgis  
       2023-07-02 17:01:08 +08:00
    @owen800q rn web server 有什么推荐?
    johnwood
        48
    johnwood  
       2023-07-02 17:05:22 +08:00 via iPhone
    @djxiaoyun 不会的,支持虚拟化,可以看看 flashlist
    johnwood
        49
    johnwood  
       2023-07-02 17:06:09 +08:00 via iPhone
    @roundgis 可以配合 nextjs 使用,推荐看下 solito 库
    milukun
        50
    milukun  
       2023-07-02 18:40:46 +08:00 via iPhone
    @ben123321 小组件部分是原生的,是有做过,不过也是跟随教程来的。通信的话 pub 上有插件
    murmur
        51
    murmur  
       2023-07-02 18:46:52 +08:00
    @zerosrat webview 肯定要用,以前的 app 有 100 多个 vue 的页面,全重写根本工作量扛不住
    FreshOldMan
        52
    FreshOldMan  
       2023-07-02 18:59:40 +08:00
    @sunnysab #40 rn 本质网络走的 native ,也没跨域问题,你们到底开发过没。。。就胡说
    FreshOldMan
        53
    FreshOldMan  
       2023-07-02 19:00:55 +08:00
    @RightHand #25 什么逻辑大佬站台,Facebook 官方一直在维护,美团,携程一直在用这个,张嘴就来
    FreshOldMan
        54
    FreshOldMan  
       2023-07-02 19:03:28 +08:00
    @gitopen #22 又卡又慢你自己用不用,自己不用不要推荐别人用
    jlkm2010
        55
    jlkm2010  
       2023-07-02 19:13:36 +08:00
    dw2693734d
        56
    dw2693734d  
       2023-07-02 19:40:45 +08:00
    既然要跨平台,为啥不直接用网页了呢🤔️
    Samuel021
        57
    Samuel021  
       2023-07-02 20:11:04 +08:00
    要不要考虑小程序的方式?比如我司的 FinClip
    xuxuxu123
        58
    xuxuxu123  
    OP
       2023-07-02 22:27:48 +08:00
    @Samuel021 这个不行的,有做过了解;

    @dw2693734d 涉及原生能力,业务上需要 app
    xuxuxu123
        59
    xuxuxu123  
    OP
       2023-07-02 22:28:48 +08:00
    @shanghai1998 这个不是我需要考虑的,公司去决定;
    @sSsSsSs 这个目前已知是一个问题
    xuxuxu123
        60
    xuxuxu123  
    OP
       2023-07-02 22:29:43 +08:00
    @milukun 非常感谢,这些建议非常有用
    xuxuxu123
        61
    xuxuxu123  
    OP
       2023-07-02 22:30:18 +08:00
    @superedlimited
    @estk
    我这边去看看,向上级提提建议
    ben123321
        62
    ben123321  
       2023-07-02 23:06:33 +08:00
    @milukun 大佬,方便我加您一个微信请教下吗?
    Bijiabo
        63
    Bijiabo  
       2023-07-02 23:21:43 +08:00
    说 RN 卡的...大多是自己水平不行。RN 遇到问题,就算菜还有希望用原生优化。

    至于 Flutter 这种轮子,就好像当年移动端用 Canvas 绘制页面一样,过段时间就没了
    jones2000
        64
    jones2000  
       2023-07-03 00:00:26 +08:00
    能用 h5 搞的,就做成 h5 ,剩下的难搞的就上原生。
    跨平台就是为了省钱, 省钱就用 h5 套壳。 其他的什么框架都是鸡肋, 又没有 h5 这么便宜的开发成本,也没有原生的性能。
    Dynesshely
        65
    Dynesshely  
       2023-07-03 06:05:19 +08:00
    其实是可以考虑使用 flutter 的
    你们是物联网项目, 那么必然涉及到一些底层调用, 你也提到有第三方 sdk 嵌入, flutter 通过 channel 提供了平台调用
    Poko
        66
    Poko  
       2023-07-03 08:33:41 +08:00
    uni-app 一把梭
    cheman
        67
    cheman  
       2023-07-03 09:48:24 +08:00
    真的很舒服,开发起来,3 个项目,3 年 Flutter 的开发人员
    jearbilove
        68
    jearbilove  
       2023-07-03 10:29:28 +08:00
    flutter 作为渲染层框架,在样式一致性上比 rn 强多了。另外对接原生的一些功能,可以写 channel 去调啊,把 flutter 用在合适的地方很重要。rn 底层对接的是原生组件,如果遇到问题如果没有一点原生客户端经验的话也是不行的
    ciki
        69
    ciki  
       2023-07-03 10:31:46 +08:00
    @x77 你的 app 应该不是啥功能复杂的 app
    ciki
        70
    ciki  
       2023-07-03 10:37:07 +08:00
    最好的解决方案就是原生+H5+小程序框架
    ShrinkLynn
        71
    ShrinkLynn  
       2023-07-03 11:01:45 +08:00
    RN 0.7.0+ 的更新真的还不错 ...
    怎么说呢,Flutter 复杂的开发还是要疯狂写 native view ,那还不如用 RN 了。
    要是你们项目比较简单,Flutter 也是可以的。
    Bijiabo
        72
    Bijiabo  
       2023-07-03 12:19:22 +08:00
    楼主可以看看:国内做物联网应用的大厂,清一色采用 RN 方案,几乎看不到用 Flutter 的。
    w950888
        73
    w950888  
       2023-07-03 12:50:22 +08:00
    @Bijiabo #72 哈啰单车算物联网吧,用了 flutter
    tutou
        74
    tutou  
       2023-07-03 13:53:08 +08:00
    @owen800q 请教一下,你们这种方式怎么设计更新的
    milukun
        75
    milukun  
       2023-07-03 14:11:30 +08:00
    @ben123321 #62 可以留意一下这个项目: https://github.com/leanflutter/.github/blob/main/profile/README-ZH.md
    有 flutter 群,我也在群里
    ykrank
        76
    ykrank  
       2023-07-03 15:37:58 +08:00
    @x77 我是 19 年,20 年在创业公司做移动端 Leader ,选型 Flutter ,主力全职做 flutter ,还贡献了数个开源 pub 。可惜 Flutter 2.0 之前实在不给力,各种官方 bug 令人发指,新招的无经验员工要门槛也高,技术选型被屡屡质疑,最终无奈还是换技术栈为愚蠢的 uni-app ,毕竟门槛是真的低,随便拉个前端仔就可以做。当然问题也很明显,只要是原生 sdk ,要么自己封装,要么请人来开发中间件。
    x77
        77
    x77  
       2023-07-03 16:03:21 +08:00
    @ykrank

    在开发两个(练手的) App ( https://github.com/xinlake/privch-client-flutter )时我也顺便抽象了一些几个插件发布到 pub.dev ,没什么人用我就把它们都下线了,App 我也暂时把它们从 Google Play 下架了,有空整理好再上架。

    现在,我的网站、新开发的应用(如 https://xinlake.dev/#/app-azure-tts )基本都上 Flutter 了,顺手,Hold 住。前不久好像看到 Google Cloud 的 Function 也支持 Flutter 。

    我比较看好 Flutter 这类框架,跨平台、UI 有非常好的表现力。有一个框架把从 Native 实现,到操作系统平台的开发,再到统一跨平台的人机交互,都有效的组织起来,多棒的工具。
    Cloudust
        78
    Cloudust  
       2023-07-03 16:54:13 +08:00
    记住一点即可:公司项目不要用 getX
    awq14789
        79
    awq14789  
       2023-07-03 18:11:09 +08:00
    @Cloudust @debuggerx 为什么不建议用 Getx 呢?我个人觉得挺好用的
    sunnysab
        80
    sunnysab  
       2023-07-03 22:14:53 +08:00 via Android
    @FreshOldMan 搞过两天,因为当时没解决,弃坑了。。
    GTim
        81
    GTim  
       357 天前
    需要 Flutter 抖音/快手插件的可以找我,我有一套简单的
    GTim
        82
    GTim  
       357 天前
    需要 Flutter 抖音/快手插件的可以找我,我有一套简单的
    @ciki 开源小程序框架有什么好选的么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 20:35 · PVG 04:35 · LAX 13:35 · JFK 16:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.