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

2023 年了,应该学 flutter 还是原生 Swift kotlin(本人前端)

  •  
  •   guguji5 · 295 天前 · 8400 次点击
    这是一个创建于 295 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:我们公司是做运维监控,需要接受报警(需要推送消息),目前公司只有前端团队。没有安卓和 ios 开发团队

    作为一个 React 前端团队,在 2023 年中这个节点

    1. 是学 flutter ,一下可以打包出来 andriod ios 两端呢?
    2. 还是学习 Swift ,直接上原生呢?(我在 twitter 上看到从习惯了 react 写 swift 挺自然的)当日安卓还得学另一套

    我个人粗浅的理解,flutter 用 dart 写的,会不会上手难度比 swift 难度更大一些呢,会有些不同环境需要兼容的地方。有没有熟悉移动端开发的老铁指点一二。

    第 1 条附言  ·  294 天前
    我们的内容相对很简单,就展示一下报警的列表和详情即可。(或者直接嵌入个 webview 就行,有现成的 h5 )但是希望有个壳,让用户在手机上也能查看,并且希望有推送功能。
    83 条回复    2024-02-22 15:18:25 +08:00
    findex
        1
    findex  
       295 天前
    建议都学,就知道区别了
    guguji5
        2
    guguji5  
    OP
       295 天前
    @findex 哪个先?
    AuYuHui
        3
    AuYuHui  
       295 天前
    flutter
    KC35
        4
    KC35  
       295 天前
    flutter 就行
    daijiePro
        5
    daijiePro  
       295 天前
    如果你学 flutter 的话,其实都要学
    estk
        6
    estk  
       295 天前
    怎么不考虑 Rteac Native ?
    ryan4290
        7
    ryan4290  
       295 天前
    火速转后端,别问,已死
    divilbs
        8
    divilbs  
       295 天前
    对啊 Rteac 团队为什么不直接 Rteac Native ?
    guguji5
        9
    guguji5  
    OP
       295 天前
    @ryan4290 是工作需要啊,我想学!后端刚开始学也就是写 API ,配合 redis kafka 进行数据库 curd ,没啥意思
    guguji5
        10
    guguji5  
    OP
       294 天前
    @daijiePro 我也看到相似的论点( https://www.zhihu.com/question/365367503 ),就是学 flutter 原生的东西是绕不开的,如果我一点都不会,碰到就会一脸懵逼,所以是不是先学 swift 和 kotlin 更合适( native )一点呢?
    x2420390517
        11
    x2420390517  
       294 天前
    运维监控,移动端顶多就是一些报警通知和一些基本的查看,主要还是靠网页。这个时候,有一个 App 能用就行,我觉得确实像大家说的,干嘛不 React Native
    bryce
        12
    bryce  
       294 天前
    看你们业务场景,选 flutter
    murmur
        13
    murmur  
       294 天前
    react native 因为处处 native 可以做到 rn 和 native 混写,直接把 native 界面当组件用,这个对于 sdk 开发者很友好
    ciki
        14
    ciki  
       294 天前
    flutter 也离不开对原生框架的理解,迟早都要接触
    x77
        15
    x77  
       294 天前
    Flutter ,对于前端来说 Dart 上手不难。

    Flutter 打包平台应用时需要调用平台应用的构建程序,对于 Android 、iOS 端,你还需要搭建 Android 、iOS 的开发环境才能打包出它们的应用。
    i979491586
        16
    i979491586  
       294 天前
    都有 react 前端团队了,为什么不考虑 RN 呢?
    fresco
        17
    fresco  
       294 天前
    学原生开发,还是一下学两端,任重而道远
    ytll21
        18
    ytll21  
       294 天前
    看 APP 的复杂度,除非对性能要求高,或者有什么奇葩需求,或者高难度的 UI 要求,否则 Flutter 够了。
    a132811
        19
    a132811  
       294 天前
    可考虑 PWA ,更简单,不用换技术栈。只是国内网络下,需要用代理或第三方推送
    https://juejin.cn/post/6844903856007020557#heading-29
    a132811
        20
    a132811  
       294 天前
    @a132811 没审好题,pwa 在 ios 下支持并不好
    omgr
        21
    omgr  
       294 天前
    直接 webview 不就行了…… 手机上小程序之类的做了吧,为啥辛苦去做 native 的 App…… 如果是个人兴趣,推荐 swift ,如果是公司需求,还让你一人两端都上 native ,建议跳槽
    dcsuibian
        22
    dcsuibian  
       294 天前
    可以肯定的是,目前就算大公司也撑不起多套代码的成本了,native 可以选,做起来优先否定了吧
    dcsuibian
        23
    dcsuibian  
       294 天前
    @dcsuibian native 可以学
    hahastudio
        24
    hahastudio  
       294 天前
    需求:接受报警
    发短信或者邮件不行么,或者接微信钉钉之类的?
    wa143825
        25
    wa143825  
       294 天前
    都学,先 flutter ,学会布局和基本功能开发,然后学插件开发,开发插件的时候顺便学学 kotlin 和 Swift ,语言没什么难的,主要就是不同的平台不同的 api 。
    guguji5
        26
    guguji5  
    OP
       294 天前
    @ciki 问题是先接触,还是后接触?

    我个人偏向于先接触,之前弄过 RN ,搞着搞着弄到安卓的包,就很懵逼了。不如先学些 kotlin
    guguji5
        27
    guguji5  
    OP
       294 天前
    @murmur RN 太 low 了,就打包的体积我就看不上
    guguji5
        28
    guguji5  
    OP
       294 天前
    @omgr 我们是报警聚合的 saad , 因为想要接收推送啊,所以希望弄个 app ,我先调研
    guguji5
        29
    guguji5  
    OP
       294 天前
    @dcsuibian 我们的内容相对很简单,或者直接嵌入个 webview 就行,有现成的 h5 ,但是希望有个壳,并且希望有推送功能。
    milukun
        30
    milukun  
       294 天前
    就开发体验来说,flutter 是更爽一点的。热更新直接在手机、模拟器上预览,不需要等待构建。虽然 swiftUI 也有预览,但是那个是模拟出来的,不是实际运行,而且局限很大。

    而且 flutter 和 swiftUI 在界面开发方面,其实没有哪个更难哪个更简单,这种声明式 UI 其实都差不多。

    个人建议 flutter 开始,我看前面有人说学 flutter 就要学 swift ,其实并不准确。

    例如你要做一个 todo 、记账等,完全纯 flutter 开发上架安卓和 ios 了,除非你要额外添加小组件,这个在 ios 和安卓端都是需要单独原生开发的。

    我觉得你还是先评估一下你要做什么,然后再选框架。
    guguji5
        31
    guguji5  
    OP
       294 天前
    @milukun 就是
    1. 嵌入 webview
    2.推送
    3. 如果有了新版本希望能自动更新
    4.然后希望能上架。(上不了,就先放安卓,让用户自己下载)

    您帮看看,先学 kotlin ,还是 flutter
    saviourdog
        32
    saviourdog  
       294 天前
    flutter!95%场景下都不会到写原生代码地步,除了原生的一些配置文件要改下
    lululau
        33
    lululau  
       294 天前
    跨平台框架只是用来提升效率的,任何一个款平台框架都不能 100% 覆盖原生功能,所以都要学
    superchijinpeng
        34
    superchijinpeng  
       294 天前
    都学
    coolmint
        35
    coolmint  
       294 天前
    有兴趣就都学,如果只是想快点开始解决一下手头的问题就 flutter
    suyulingxm
        36
    suyulingxm  
       294 天前
    flutter
    chiaf
        37
    chiaf  
       294 天前
    @guguji5 RN 可以看看 expo ,简化了很多东西,包体积应该小了

    现在 native app 感觉都是独立开发者在干了😆
    arnosolo
        38
    arnosolo  
       294 天前
    Ionic 人表示做应用开发想要达到高级原生开发是一定要学的.
    okakuyang
        39
    okakuyang  
       294 天前 via iPhone
    根本不需要学任何一门,推送独立 ,app 点进去是 webview ,现实网页。原生代码不超过 200 行。
    guguji5
        40
    guguji5  
    OP
       294 天前
    @okakuyang 不需要一个壳吗? js 能直接推到手机的消息栏?
    ciki
        41
    ciki  
       294 天前
    @guguji5 用到的时候再学效率高
    putaozhenhaochi
        42
    putaozhenhaochi  
       294 天前 via iPhone
    做小程序
    dode
        43
    dode  
       294 天前
    微信的消息推送多好呀,客户不用安装 app
    iOCZ
        44
    iOCZ  
       294 天前
    当然是做网页
    anjingdexiaocai
        45
    anjingdexiaocai  
       294 天前 via Android
    不要做原生,你的需求 webview 完全够了,没必要折腾。
    dwzrlp
        46
    dwzrlp  
       294 天前
    功能简单,需求简单,直接 flutter 就好了,省时间省钱
    zhcode
        47
    zhcode  
       294 天前
    前端上手 flutter 比较快,dart 跟 js 语法有很多相像的地方
    99s
        48
    99s  
       294 天前
    flutter 曾经花了一个月时间学习,后来还是实在受不了层层嵌套的写法放弃了。如果要选的话还是选 RN 舒服。
    meteor957
        49
    meteor957  
       294 天前
    dart 不如 js ,flutter 不如 rn
    owen800q
        50
    owen800q  
       294 天前
    @anjingdexiaocai IOS app 純 webview 沒有任何一個原生介面可以上架 app store?
    neutrino
        51
    neutrino  
       294 天前
    @guguji5 不用的,可以直接推送
    xiaoshan5733
        52
    xiaoshan5733  
       294 天前
    op 不想考虑 react native 是不是因为 op 印象中的 react native 很不好,建议 op 了解下 expo ,结合 APP 功能和 op 目前的技术栈我还是极力推荐 react native
    gyt95
        53
    gyt95  
       294 天前
    非要选还是原生好,最后你的出路会是原生壳套 webview
    gyt95
        54
    gyt95  
       294 天前
    @99s 真的!我学完写个 todo list 就吐了……那个嵌套,我都无法想象大项目这会嵌套成什么样子……
    bunny189
        55
    bunny189  
       294 天前
    flutter 就行,嵌套就拆分。
    Bijiabo
        56
    Bijiabo  
       294 天前 via iPhone
    远离 Flutter
    AvilCore
        57
    AvilCore  
       294 天前 via Android
    React 团队不用 react native 是为啥,除了 UI 库这俩一模一样根本分不出来,一点点学习都不用
    既然很简单就拿 react-native-webview 一套,这不就是半天的事儿
    changwei
        58
    changwei  
       294 天前   ❤️ 1
    如果是 react 前端团队并且没有任何原生 app 开发经验建议直接使用 react native + expo 这套方案,几乎不需要任何原生开发经验就能开发跨平台完整 app ,expo 的编译流程也是在其官方的 CI 平台上进行,构建产物传送到应用商店也是 expo 全自动进行,只是送审需要你自己填写版本号和更新记录等等,意味着你本地甚至不需要配置任何 Android SDK 或者 iOS xcode 开发环境,也不需要阅读太多原生 APP 开发文档,非常方便友好。

    下面这个 APP 就是我用 react-native 0.71 + expo 48 开发的,里面有原生 View 实现主要界面,也有套 react-native-webview ,也有用 react-native-render-html 直接把 html 渲染到 View 中,也有 expo-linking 直接在内置 chrome 浏览器打开网页等等各种渲染方式,目前除了 react-native-render-html 这套方案可能需要对一些特殊 html 标签进行一些微调和转换以外都没发现太大问题,性能问题暂时没发现(可能是因为我用的都是小米旗舰),最近几个版本的 rn 官方也有更新 JS 引擎以及把 react 升级到 18.2 版本,理论上性能也有一定提升,你可以直接打开下面的链接下载亲自试用一下就知道。

    https://play.google.com/store/apps/details?id=tw.edu.ntust.library.app
    https://apps.apple.com/app/id6444852934
    guguji5
        59
    guguji5  
    OP
       294 天前
    @changwei 哇,感谢分享,我之前写过 RN ,几年前了吧,也没涉及到原生的知识就完成了,想学点不一样的。而且当时我就搞了几个页面,加调用摄像头,打包就 100M 了,不想用了,想看看 flutter 和原生的,听说也不太复杂
    guguji5
        60
    guguji5  
    OP
       294 天前
    @xiaoshan5733 楼下也有一个详细的评论推荐 expo ,我先简单吧 flutter 浏览一遍,就像第一楼说的,都学一下!才知道哪个更合适。其实现在就我目前的需求,无脑选一个都能搞定。
    silvernoo
        61
    silvernoo  
       294 天前   ❤️ 1
    flutter 足够,你不会有多少机会接触原生代码的,原生任何一端都是庞大体系,学完就废
    xiaoshan5733
        62
    xiaoshan5733  
       294 天前
    https://github.com/wengqianshan/WuKongIMReactNative 这是一个用 react native + expo 开发的聊天 app ,op 可以本地运行一下试试,不需要安装原生环境,只要手机上安装 expo go 扫码即可预览调试
    sunbreak
        63
    sunbreak  
       294 天前
    @guguji5 没有银弹,看团队、看项目、看框架发展潜力

    1. 有 React 、JS/TS 团队,首选 ReactNative (其实还有 Ionic ,不过国内太小众)
    2. 有客户端开发经验,首选 Flutter
    3. SwiftUI 和 Kotlin/MMP (或者 Compose )目前都不成熟,长期发展不明,除非资深客户端开发,否则强烈不推荐

    你目前的情况 RN 最好,如果你喜欢学习新的知识,选 Flutter 也行(长远看跨平台更容易):
    1. 你这个项目简单,两个框架包体积、性能差距不大( Fabric 之后 RN 可以媲美 Flutter )
    2. 多少都会需要一些客户端的知识(打包、bridge 代码、plugin 组件),GPT 搞定就行(我们日常 Shell 脚本也不会特地去学习)

    利益相关:原 MIUI 开发,现跨端技术专家,Flutter 和 RN committer
    raykle
        64
    raykle  
       294 天前
    @guguji5 #59 打包 100M 是不是没有打 release 包导致的啊,我们的应用业务挺多的,也没超过 100 。。
    我觉得楼上 #63 的推荐很合理,可以试试。
    其实如果只是为了推送,接入微信也是可以的,或者 PWA 应该是最简单的了吧,看楼主需要什么了。
    andyxic
        65
    andyxic  
       294 天前
    本人也是 react 前端,刚做完一个 flutter 项目,现在正在用 swiftui 撸 ios 端。从我个人经验来看。flutter 我刷了一遍文档加几个 demo 就上手了,不会就 chatgpt ,完全无压力。如果你只有 js 的语言经验的话, swiftUi 建议后上。
    guguji5
        66
    guguji5  
    OP
       293 天前
    expo 的定价好 tm 复杂啊,刚开始我还是得做个 demo 出来,然后才能跟公司讲,并且继续推动。expo 这得先让我自己垫不少钱啊。我决定先搞 flutter 了 🆒
    @changwei
    guguji5
        67
    guguji5  
    OP
       293 天前
    @sunbreak 感谢来自专家的建议,今天我弄了下 flutter ,内嵌 h5 打包 apk 已经成功了,只有 6M 。但是我没弄签名,后边研究一下 1 、推送 2 、签名 3 、ios 打包。RN 就不看了,想探索点不一样的,拓展一下技术面
    guguji5
        68
    guguji5  
    OP
       293 天前
    @andyxic 一天! flutter 内嵌 h5 打包好了没签名的 apk 。根据 63 楼大佬的建议,我就不碰原生了先。
    debuggeeker
        69
    debuggeeker  
       293 天前
    推送,直接原生!
    changwei
        70
    changwei  
       292 天前 via Android
    @guguji5 expo 开发我从头到尾没花过一分钱啊,你是什么地方需要花钱呢?
    GreatAuk
        71
    GreatAuk  
       292 天前
    @guguji5 #27 第一次听人说 React Native low 的,哈哈
    abc12334
        72
    abc12334  
       292 天前
    本人前端,我从今年年初开始写 flutter ,首先说 dart ,可以负责任的说 js 玩的不差的选手,熟练使用 dart 也就 1-3 天(那些高级的语言特性另说,直说简单使用),flutter 的使用 简直是和 react 一毛一样,如果项目不涉及和 native 平台交互,比如:蓝牙 ,相机,视频剪辑啥的,,真是可以无脑使用
    guguji5
        73
    guguji5  
    OP
       292 天前
    @abc12334 推送呢?可以无脑吗
    guguji5
        74
    guguji5  
    OP
       292 天前
    @changwei 是吗? 我只是粗略的浏览了 https://expo.dev/pricing 。没仔细研究。学到了,感谢
    guguji5
        75
    guguji5  
    OP
       292 天前
    @debuggeeker 我不知道我的认知对不对哈。要推送消息,必须先上架不同厂商的应用市场(华为、小米等等),然后通过他们才可以推送
    aahao
        76
    aahao  
       292 天前
    看起来你对移动开发很感兴趣,那推荐你学 Flutter ,学的过程自然会接触很多原生的东西。
    我是原生开发+Flutter ,不了解 RN ,但如果我是你我会选 RN 。首先你 RN 就是前端的人搞的,让写前端的可以写移动端,其次 Flutter 虽然是现在最强势的跨平台框架但是还不能完全替代 RN ,热更新依然是很多团队选择 RN 的原因。
    guguji5
        77
    guguji5  
    OP
       291 天前   ❤️ 1
    1. 我这里边内嵌的 h5 ,热更新似乎对我没啥价值。
    2. 然后这是一个完全由我兴趣发起的水下项目,从公司层面还没时间卡点,所以我想选一个新鲜一点的东西接触一下
    3. 我是这样想的,无论我用 flutter 还是 RN ,改的文件都会涉及到原生的(哪怕只是个 gradle ),既然这样我为何不去直接看原生的呢,本来我想直接去看 kotlin 呢,被本贴的热心群众劝住了
    4. 最后,感谢你的回复,flutter 已经打包成功了,接下来我该研究下签名、上架、push 了 @aahao
    abc12334
        78
    abc12334  
       287 天前
    @guguji5 因为我们现在是海外项目推送用的 firebase ,因为有之前代码为基础我也没怎么研究,发现原来的拷过来就能用,国内的极光什么的平台肯定也有类似的功能
    guguji5
        79
    guguji5  
    OP
       287 天前
    @abc12334 对,我就在研究极光推送,但是好像还得上架才能使用推送功能,所以我又研究起了上架。
    zybzzc
        80
    zybzzc  
       67 天前
    @sunbreak
    如果要同时支持 native/web/小程序,应该怎么选技术方案呢?
    应用类型就是普通的海外旅游电商应用,但是会有地图/导航/相机这些需求。
    (不一定是同一个 app 同时要求 3 个端,大多数时候都是 1 到 2 个端,但是只想投入一种技术路线)

    我目前了解到的有:
    1. uniapp 一把梭。优点是开发速度快,生态相对要丰富,缺点就是开发体验不好,uniapp 黑盒以及貌似 uniapp 在站内的风评也不好(这算吗?都说坑多,但是却少有人说具体的坑)。至于性能,我认为对我们的应用而言应该问题不大。
    2. Taro + React Native 。优点是开发体验不错,而且透明。缺点是说坑的人也不少,以及开发速度比 uniapp 慢(我猜的)
    3. Flutter + MPFlutter2.0 。优点是开发体验完全一致,应用表现也一致,bug 更少(我猜的)。缺点是上手难度高,团队也不好扩充,另外就是这个 MPFlutter2.0 虽说能商用,但是我还得对它的质量保持怀疑。

    这是我简单了解过后得出的结论,不一定准确,可能也还有其它的我未知的方案,希望大佬指点一下。
    kelvinji2009
        81
    kelvinji2009  
       65 天前
    @zybzzc 现在陷入了差不多的纠结之中。
    guguji5
        82
    guguji5  
    OP
       65 天前
    @kelvinji2009 我是用 flutter ,感觉挺有意思的,但是这玩意要是还原到 css 那种精美程度,好像很困难。只能是凑合用
    sunbreak
        83
    sunbreak  
       64 天前
    @zybzzc 旅游类的,肯定要用地图,你海外地图怎么解决?

    1. 如果用国内方案,推荐 Taro ,我知道的 Taro 不少大厂都有用的
    2. 如果用国外方案,推荐 Flutter ,对接 Google Map 比较方便

    uniapp 不熟悉
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2849 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 06:54 · PVG 14:54 · LAX 23:54 · JFK 02:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.