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

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

  •  
  •   guguji5 · 2023-07-07 14:28:36 +08:00 · 9552 次点击
    这是一个创建于 534 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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

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

    现在 native app 感觉都是独立开发者在干了😆
    arnosolo
        38
    arnosolo  
       2023-07-07 17:34:32 +08:00
    Ionic 人表示做应用开发想要达到高级原生开发是一定要学的.
    okakuyang
        39
    okakuyang  
       2023-07-07 17:35:39 +08:00 via iPhone
    根本不需要学任何一门,推送独立 ,app 点进去是 webview ,现实网页。原生代码不超过 200 行。
    guguji5
        40
    guguji5  
    OP
       2023-07-07 17:53:31 +08:00
    @okakuyang 不需要一个壳吗? js 能直接推到手机的消息栏?
    ciki
        41
    ciki  
       2023-07-07 18:43:40 +08:00
    @guguji5 用到的时候再学效率高
    putaozhenhaochi
        42
    putaozhenhaochi  
       2023-07-07 18:47:44 +08:00 via iPhone
    做小程序
    dode
        43
    dode  
       2023-07-07 18:55:34 +08:00
    微信的消息推送多好呀,客户不用安装 app
    iOCZ
        44
    iOCZ  
       2023-07-07 19:55:45 +08:00
    当然是做网页
    anjingdexiaocai
        45
    anjingdexiaocai  
       2023-07-07 20:43:55 +08:00 via Android
    不要做原生,你的需求 webview 完全够了,没必要折腾。
    dwzrlp
        46
    dwzrlp  
       2023-07-07 21:11:11 +08:00
    功能简单,需求简单,直接 flutter 就好了,省时间省钱
    zhcode
        47
    zhcode  
       2023-07-07 21:13:20 +08:00
    前端上手 flutter 比较快,dart 跟 js 语法有很多相像的地方
    99s
        48
    99s  
       2023-07-07 22:00:12 +08:00
    flutter 曾经花了一个月时间学习,后来还是实在受不了层层嵌套的写法放弃了。如果要选的话还是选 RN 舒服。
    meteor957
        49
    meteor957  
       2023-07-07 22:02:59 +08:00
    dart 不如 js ,flutter 不如 rn
    owen800q
        50
    owen800q  
       2023-07-07 22:06:12 +08:00
    @anjingdexiaocai IOS app 純 webview 沒有任何一個原生介面可以上架 app store?
    neutrino
        51
    neutrino  
       2023-07-07 22:06:33 +08:00
    @guguji5 不用的,可以直接推送
    xiaoshan5733
        52
    xiaoshan5733  
       2023-07-07 23:57:00 +08:00
    op 不想考虑 react native 是不是因为 op 印象中的 react native 很不好,建议 op 了解下 expo ,结合 APP 功能和 op 目前的技术栈我还是极力推荐 react native
    gyt95
        53
    gyt95  
       2023-07-07 23:59:59 +08:00
    非要选还是原生好,最后你的出路会是原生壳套 webview
    gyt95
        54
    gyt95  
       2023-07-08 00:02:34 +08:00
    @99s 真的!我学完写个 todo list 就吐了……那个嵌套,我都无法想象大项目这会嵌套成什么样子……
    bunny189
        55
    bunny189  
       2023-07-08 00:08:12 +08:00
    flutter 就行,嵌套就拆分。
    Bijiabo
        56
    Bijiabo  
       2023-07-08 00:26:29 +08:00 via iPhone
    远离 Flutter
    AvilCore
        57
    AvilCore  
       2023-07-08 01:28:22 +08:00 via Android
    React 团队不用 react native 是为啥,除了 UI 库这俩一模一样根本分不出来,一点点学习都不用
    既然很简单就拿 react-native-webview 一套,这不就是半天的事儿
    changwei
        58
    changwei  
       2023-07-08 03:36:23 +08:00   ❤️ 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
       2023-07-08 08:43:29 +08:00
    @changwei 哇,感谢分享,我之前写过 RN ,几年前了吧,也没涉及到原生的知识就完成了,想学点不一样的。而且当时我就搞了几个页面,加调用摄像头,打包就 100M 了,不想用了,想看看 flutter 和原生的,听说也不太复杂
    guguji5
        60
    guguji5  
    OP
       2023-07-08 08:47:41 +08:00
    @xiaoshan5733 楼下也有一个详细的评论推荐 expo ,我先简单吧 flutter 浏览一遍,就像第一楼说的,都学一下!才知道哪个更合适。其实现在就我目前的需求,无脑选一个都能搞定。
    silvernoo
        61
    silvernoo  
       2023-07-08 08:49:19 +08:00   ❤️ 2
    flutter 足够,你不会有多少机会接触原生代码的,原生任何一端都是庞大体系,学完就废
    xiaoshan5733
        62
    xiaoshan5733  
       2023-07-08 10:45:11 +08:00
    https://github.com/wengqianshan/WuKongIMReactNative 这是一个用 react native + expo 开发的聊天 app ,op 可以本地运行一下试试,不需要安装原生环境,只要手机上安装 expo go 扫码即可预览调试
    sunbreak
        63
    sunbreak  
       2023-07-08 10:46:57 +08:00
    @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  
       2023-07-08 11:22:45 +08:00
    @guguji5 #59 打包 100M 是不是没有打 release 包导致的啊,我们的应用业务挺多的,也没超过 100 。。
    我觉得楼上 #63 的推荐很合理,可以试试。
    其实如果只是为了推送,接入微信也是可以的,或者 PWA 应该是最简单的了吧,看楼主需要什么了。
    andyxic
        65
    andyxic  
       2023-07-08 14:15:34 +08:00
    本人也是 react 前端,刚做完一个 flutter 项目,现在正在用 swiftui 撸 ios 端。从我个人经验来看。flutter 我刷了一遍文档加几个 demo 就上手了,不会就 chatgpt ,完全无压力。如果你只有 js 的语言经验的话, swiftUi 建议后上。
    guguji5
        66
    guguji5  
    OP
       2023-07-08 17:27:32 +08:00
    expo 的定价好 tm 复杂啊,刚开始我还是得做个 demo 出来,然后才能跟公司讲,并且继续推动。expo 这得先让我自己垫不少钱啊。我决定先搞 flutter 了 🆒
    @changwei
    guguji5
        67
    guguji5  
    OP
       2023-07-08 17:31:44 +08:00
    @sunbreak 感谢来自专家的建议,今天我弄了下 flutter ,内嵌 h5 打包 apk 已经成功了,只有 6M 。但是我没弄签名,后边研究一下 1 、推送 2 、签名 3 、ios 打包。RN 就不看了,想探索点不一样的,拓展一下技术面
    guguji5
        68
    guguji5  
    OP
       2023-07-08 17:33:47 +08:00
    @andyxic 一天! flutter 内嵌 h5 打包好了没签名的 apk 。根据 63 楼大佬的建议,我就不碰原生了先。
    debuggeeker
        69
    debuggeeker  
       2023-07-09 13:53:46 +08:00
    推送,直接原生!
    changwei
        70
    changwei  
       2023-07-09 17:40:07 +08:00 via Android
    @guguji5 expo 开发我从头到尾没花过一分钱啊,你是什么地方需要花钱呢?
    GreatAuk
        71
    GreatAuk  
       2023-07-09 22:54:47 +08:00
    @guguji5 #27 第一次听人说 React Native low 的,哈哈
    abc12334
        72
    abc12334  
       2023-07-10 08:55:30 +08:00
    本人前端,我从今年年初开始写 flutter ,首先说 dart ,可以负责任的说 js 玩的不差的选手,熟练使用 dart 也就 1-3 天(那些高级的语言特性另说,直说简单使用),flutter 的使用 简直是和 react 一毛一样,如果项目不涉及和 native 平台交互,比如:蓝牙 ,相机,视频剪辑啥的,,真是可以无脑使用
    guguji5
        73
    guguji5  
    OP
       2023-07-10 10:27:24 +08:00
    @abc12334 推送呢?可以无脑吗
    guguji5
        74
    guguji5  
    OP
       2023-07-10 10:31:18 +08:00
    @changwei 是吗? 我只是粗略的浏览了 https://expo.dev/pricing 。没仔细研究。学到了,感谢
    guguji5
        75
    guguji5  
    OP
       2023-07-10 10:37:37 +08:00
    @debuggeeker 我不知道我的认知对不对哈。要推送消息,必须先上架不同厂商的应用市场(华为、小米等等),然后通过他们才可以推送
    aahao
        76
    aahao  
       2023-07-10 11:43:00 +08:00
    看起来你对移动开发很感兴趣,那推荐你学 Flutter ,学的过程自然会接触很多原生的东西。
    我是原生开发+Flutter ,不了解 RN ,但如果我是你我会选 RN 。首先你 RN 就是前端的人搞的,让写前端的可以写移动端,其次 Flutter 虽然是现在最强势的跨平台框架但是还不能完全替代 RN ,热更新依然是很多团队选择 RN 的原因。
    guguji5
        77
    guguji5  
    OP
       2023-07-10 15:20:53 +08:00   ❤️ 1
    1. 我这里边内嵌的 h5 ,热更新似乎对我没啥价值。
    2. 然后这是一个完全由我兴趣发起的水下项目,从公司层面还没时间卡点,所以我想选一个新鲜一点的东西接触一下
    3. 我是这样想的,无论我用 flutter 还是 RN ,改的文件都会涉及到原生的(哪怕只是个 gradle ),既然这样我为何不去直接看原生的呢,本来我想直接去看 kotlin 呢,被本贴的热心群众劝住了
    4. 最后,感谢你的回复,flutter 已经打包成功了,接下来我该研究下签名、上架、push 了 @aahao
    abc12334
        78
    abc12334  
       2023-07-15 08:35:37 +08:00
    @guguji5 因为我们现在是海外项目推送用的 firebase ,因为有之前代码为基础我也没怎么研究,发现原来的拷过来就能用,国内的极光什么的平台肯定也有类似的功能
    guguji5
        79
    guguji5  
    OP
       2023-07-15 10:22:35 +08:00
    @abc12334 对,我就在研究极光推送,但是好像还得上架才能使用推送功能,所以我又研究起了上架。
    zybzzc
        80
    zybzzc  
       307 天前
    @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  
       304 天前
    @zybzzc 现在陷入了差不多的纠结之中。
    guguji5
        82
    guguji5  
    OP
       304 天前
    @kelvinji2009 我是用 flutter ,感觉挺有意思的,但是这玩意要是还原到 css 那种精美程度,好像很困难。只能是凑合用
    sunbreak
        83
    sunbreak  
       304 天前
    @zybzzc 旅游类的,肯定要用地图,你海外地图怎么解决?

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

    uniapp 不熟悉
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2408 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:50 · PVG 23:50 · LAX 07:50 · JFK 10:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.