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

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

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

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

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

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

    rn 就不存在这个问题,每一部分都是原生组件,用 rn 写和套 native 没什么区别
    darkengine
        18
    darkengine  
       346 天前
    @murmur 嗯,官方给的例子也是把 Flutter Fragment 嵌入到现有的 native Android 项目。其实反过来想,还有个方案是其他 tab 嵌 Flutter ,IM 这个 tab 保持原生。不过维护起来可能会有很多坑 😂
    RightHand
        19
    RightHand  
       346 天前 via Android
    rn 官方都抛弃了
    zoharSoul
        20
    zoharSoul  
       346 天前
    @superedlimited #2 感觉 rn 在 Android 上的表现真的垃圾
    skenan
        21
    skenan  
       346 天前
    @RightHand 你这是造谣吧
    gitopen
        22
    gitopen  
       346 天前
    webview + react 不香吗 😃
    murmur
        23
    murmur  
       346 天前
    @gitopen webview 有个致命问题,就是 ios 的相机太 tm 占资源了,只要一拍照 webview 直接进程干死白屏,你还得用一堆代码去做错误恢复
    fox0001
        24
    fox0001  
       346 天前 via Android
    我觉得,尽早引入 provider 或者 getx ,开发思路接近 vue 。
    RightHand
        25
    RightHand  
       346 天前 via Android
    @skenan 现在是社区维护,还有大佬站台么?
    ac169
        26
    ac169  
       346 天前
    [ [**跨平台应用程序开发框架那家强?**]( https://www.v2ex.com/t/952470) ] 看来有不少团队有相同的困惑。个人也倾向 flutter 但是没有对比无法理性选择。
    SolidZORO
        27
    SolidZORO  
       346 天前 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  
       346 天前 via iPhone
    什么 react native ,flutter 啊。说不定还不如不折腾的原生呢
    daliusu
        29
    daliusu  
       346 天前
    如果你们全职移动端没有,最好的解决办法是 web 套壳,真别不信.... 不管移动端还是 pc ,这都是最省心省力的办法
    milukun
        30
    milukun  
       346 天前   ❤️ 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  
       346 天前
    @CodingIran

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

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

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

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

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

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

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

    至于 Flutter 这种轮子,就好像当年移动端用 Canvas 绘制页面一样,过段时间就没了
    jones2000
        64
    jones2000  
       346 天前
    能用 h5 搞的,就做成 h5 ,剩下的难搞的就上原生。
    跨平台就是为了省钱, 省钱就用 h5 套壳。 其他的什么框架都是鸡肋, 又没有 h5 这么便宜的开发成本,也没有原生的性能。
    Dynesshely
        65
    Dynesshely  
       346 天前
    其实是可以考虑使用 flutter 的
    你们是物联网项目, 那么必然涉及到一些底层调用, 你也提到有第三方 sdk 嵌入, flutter 通过 channel 提供了平台调用
    Poko
        66
    Poko  
       346 天前
    uni-app 一把梭
    cheman
        67
    cheman  
       345 天前
    真的很舒服,开发起来,3 个项目,3 年 Flutter 的开发人员
    jearbilove
        68
    jearbilove  
       345 天前
    flutter 作为渲染层框架,在样式一致性上比 rn 强多了。另外对接原生的一些功能,可以写 channel 去调啊,把 flutter 用在合适的地方很重要。rn 底层对接的是原生组件,如果遇到问题如果没有一点原生客户端经验的话也是不行的
    ciki
        69
    ciki  
       345 天前
    @x77 你的 app 应该不是啥功能复杂的 app
    ciki
        70
    ciki  
       345 天前
    最好的解决方案就是原生+H5+小程序框架
    ShrinkLynn
        71
    ShrinkLynn  
       345 天前
    RN 0.7.0+ 的更新真的还不错 ...
    怎么说呢,Flutter 复杂的开发还是要疯狂写 native view ,那还不如用 RN 了。
    要是你们项目比较简单,Flutter 也是可以的。
    Bijiabo
        72
    Bijiabo  
       345 天前
    楼主可以看看:国内做物联网应用的大厂,清一色采用 RN 方案,几乎看不到用 Flutter 的。
    w950888
        73
    w950888  
       345 天前
    @Bijiabo #72 哈啰单车算物联网吧,用了 flutter
    tutou
        74
    tutou  
       345 天前
    @owen800q 请教一下,你们这种方式怎么设计更新的
    milukun
        75
    milukun  
       345 天前
    @ben123321 #62 可以留意一下这个项目: https://github.com/leanflutter/.github/blob/main/profile/README-ZH.md
    有 flutter 群,我也在群里
    ykrank
        76
    ykrank  
       345 天前
    @x77 我是 19 年,20 年在创业公司做移动端 Leader ,选型 Flutter ,主力全职做 flutter ,还贡献了数个开源 pub 。可惜 Flutter 2.0 之前实在不给力,各种官方 bug 令人发指,新招的无经验员工要门槛也高,技术选型被屡屡质疑,最终无奈还是换技术栈为愚蠢的 uni-app ,毕竟门槛是真的低,随便拉个前端仔就可以做。当然问题也很明显,只要是原生 sdk ,要么自己封装,要么请人来开发中间件。
    x77
        77
    x77  
       345 天前
    @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  
       345 天前
    记住一点即可:公司项目不要用 getX
    awq14789
        79
    awq14789  
       345 天前
    @Cloudust @debuggerx 为什么不建议用 Getx 呢?我个人觉得挺好用的
    sunnysab
        80
    sunnysab  
       345 天前 via Android
    @FreshOldMan 搞过两天,因为当时没解决,弃坑了。。
    GTim
        81
    GTim  
       322 天前
    需要 Flutter 抖音/快手插件的可以找我,我有一套简单的
    GTim
        82
    GTim  
       322 天前
    需要 Flutter 抖音/快手插件的可以找我,我有一套简单的
    @ciki 开源小程序框架有什么好选的么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5023 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 01:18 · PVG 09:18 · LAX 18:18 · JFK 21:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.