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

Flutter 的开发体验真的是很好

  •  1
     
  •   opentrade · 2020-11-20 14:43:40 +08:00 · 11345 次点击
    这是一个创建于 1224 天前的主题,其中的信息可能已经有所发展或是发生改变。

    虽然需要一点时间适应,FFI, Provider, 完整的界面库,完整的开发环境,连 dart 语言都是那么的可爱,原来不适应嵌套,用习惯了也觉得设计很完美。想起以前搞 React Native 那个痛苦,Flutter 简直就是颠覆。

    第 1 条附言  ·  2020-12-01 00:26:53 +08:00
    的确遇到一些坑,比如 showDialog,让我不得不在某些场景下放弃使用 AlertDialog,不过整体而言,开发效率比其他还是好很多。尤其是 FFI 支持,省去了很多代码迁移的麻烦。
    69 条回复    2021-07-17 21:42:59 +08:00
    huruwo
        1
    huruwo  
       2020-11-20 14:50:42 +08:00   ❤️ 7
    其他的都行 不过 dart 他真的不可爱
    richzhu
        2
    richzhu  
       2020-11-20 14:52:47 +08:00
    我擦 react native 痛苦完全同意,但是 dart 真的可爱嘛?
    dying4death
        3
    dying4death  
       2020-11-20 14:55:23 +08:00
    dart 真的可以,比 java 好用多了。异步编程比 kotlin 协程还方便
    zzzzzzggggggg
        4
    zzzzzzggggggg  
       2020-11-20 14:58:57 +08:00
    +1
    opentrade
        5
    opentrade  
    OP
       2020-11-20 15:04:15 +08:00
    不可爱吗?

    class PureStatic {
    PureStatic ._();
    }

    class Singleton {
    ...
    factory Singleton() => _instance;
    }
    KuroNekoFan
        6
    KuroNekoFan  
       2020-11-20 15:04:42 +08:00
    好奇 react native 为啥痛苦
    janxin
        7
    janxin  
       2020-11-20 15:13:57 +08:00
    开启了 null safty 之后体验进一步上升,不过也没那么好,有一些槽点
    debuggerx
        8
    debuggerx  
       2020-11-20 15:15:06 +08:00   ❤️ 4
    其实,现在的体验已经没有一开始好了……
    我是 18 年初开始玩的 Flutter,那会还是 alpha 版,开发体验爽得不行,爽主要体现在:
    1. sdk 源码很简洁,结构很清晰,虽然有些 bug,但是很容易追源码,有问题的地方可以自己改
    2. dart 语法简洁,多数场景下都有几乎唯一的写法,很少骚操作
    3. 代码提示逆天,当时的 dartlang server 代码提示效果极好,多数情况下即使是没用过的组件和 api,单靠代码提示就能写得下去

    而发展到现在,Flutter 确实修复了很多 bug, 增加了很多特性,生态和资料也多了很多,但是日常开发过程给我的体验反而是退步的,与上面逐一对比:
    1. sdk 代码量膨胀,增加了很多组件,官方文档却跟不上,有时难以找到需要的组件,有些组件代码很混乱难以使用调试
    2. dart 语法迭代,增加了不少新的语法糖,虽然确实在某些场景解决了一些问题,但也导致了一些情况下写法的不一致,增加了出错的概率和理解的难度
    3. 目前 flutter 的代码提示几乎是废的……参考这个 issue [https://github.com/dart-lang/sdk/issues/43657#issuecomment-724590463]( https://github.com/dart-lang/sdk/issues/43657#issuecomment-724590463) ,他们想实现"更好的"自动导包,所以对 dartlang 的 lsp server 进行了大改,结果破坏了原本的智能提示类型排名,现在提示出来的类型列表几乎总是无关的东西排在最上面,甚至连 String 这样的基本类型都要一个一个字母全部打完,提示都还在找各种包里所有包含 "string" 这个字符串的定义,可以说是非常难用了
    huobazi
        9
    huobazi  
       2020-11-20 15:17:35 +08:00
    Flutter 是真不错,期待更好!
    janxin
        10
    janxin  
       2020-11-20 15:19:16 +08:00
    @debuggerx 1 、3 槽点非常同意,现在我都是跟着看 Widget of the week 看看有没有什么好用的 widget

    2 其实语法糖可以人为限制使用,其实我还需要更多语法糖 2333
    lwlizhe
        11
    lwlizhe  
       2020-11-20 15:27:25 +08:00
    泼点冷水

    这都多长时间了……issue 数量还是没降低……

    另外有些功能缺失确实好难受啊,比如说嵌套滑动这块……

    年初的时候就发现了问题,搞了半天也没发现完美的解决方案,目前我这只能做到最多有两个子滑动 Widget 的嵌套滑动;
    前段时间发现有人在掘金上尝试解决这个问题,结果还是那样…………问题还是一样在快速滑动的情况下……

    Flutter 要走的路感觉还蛮长的
    HuHui
        12
    HuHui  
       2020-11-20 15:27:47 +08:00
    @debuggerx 我说呢,最近重拾 flutter,我还以为是 ide 不兼容
    debuggerx
        13
    debuggerx  
       2020-11-20 15:27:52 +08:00
    @janxin 是的,Widget of the week 我也看,官方出品质量保证。
    再推荐一个博客,经常能看到最新最炫的东西:
    https://flutterweekly.dev/archives/
    个人感觉, 学 flutter 最好的时间一个是 18 年底,一个就是现在,否则可以预见等到它继续发展进化下去,早晚也会变成像现在 android 生态一样的一大坨,大量的学习精力都要浪费在走弯路上
    debuggerx
        14
    debuggerx  
       2020-11-20 15:32:25 +08:00   ❤️ 1
    @HuHui 不用怀疑,是 flutter/dart-lang 的锅。。。
    最近他们的开发团队真的拉跨,不知道是不是 PM 的 KPI 问题导致,新功能加了不少,基础设施和功能各种崩,先是代码提示废,然后是 as4.1 更新后 flutter 环境不识别, 还有一次语法更新 '@required' 变更为 'required',结果语法检查就不通过了……
    lujie2012
        15
    lujie2012  
       2020-11-20 15:35:11 +08:00
    现在进行 Flutter 线上项目迁移,开发了 Flutter 入门到现在两个多月,我只想说以后开发 APP 只使用 Flutter 开发。当然 swift 我也是精通的,什么 APP 随便搞。Dart 没有 swift 灵活,比较呆呆的,和 object-c 一样的,但是好歹算是面向对象,万事万物 object 。
    我只想说,能坚持 Native 开发到现在,Flutter 解救了我。让我现在变成了两端开发,而且将来变成所有平台的开发。

    SwiftUI 的目的,就算让 iOS 开发变成手机,MAC 一体化的开发,不在割裂,本质就算 Flutter 做事情,把 GUI 变成前端化。

    所以新手入门移动端开发,SwiftUI 一定是未来,而 Flutter 是有野心的人的未来。
    lujie2012
        16
    lujie2012  
       2020-11-20 15:40:18 +08:00
    关于 Flutter 学习成本,可以说现在是最小的,最好的使用,好比到了 Swift5 的阶段了。不在担心版本割裂问题,Google 的文档那是最吊的东西和教程。我的公众号记录了现在的 Flutter 学习历程,英语及 iOS 移动端编程学习笔记,老是说我打广告,我想说,没有广告,只有真实的加班和自我学习记录。麻烦看看在喷。
    lujie2012
        17
    lujie2012  
       2020-11-20 15:44:41 +08:00
    dart 目前的 feature 确实跟上不 Flutter 节奏了哈哈,比如隐私声明 ?,var name ?还支持的不好,哈哈。。。。还有类转换安全问题,这个 optional 还是要和 swift 学一学
    cxknmsl
        18
    cxknmsl  
       2020-11-20 15:58:38 +08:00
    相比于 rn,我觉得 flutter 相当可以了,rn 简直是一坨屎
    murmur
        19
    murmur  
       2020-11-20 16:01:08 +08:00   ❤️ 1
    rn 的特点是我已经学了 web 前端,再学一点技巧和 api 就可以开发 app
    flutter 是你学了 app 开发,等 web 前端你还得回来学 react 或者 vue ng
    iFlicker
        20
    iFlicker  
       2020-11-20 16:10:43 +08:00
    @lujie2012 你是以 iOS 的角度来看的对吧,作为 Android 开发 这两年 java kotlin dart 都得会,有点冲
    debuggerx
        21
    debuggerx  
       2020-11-20 16:12:43 +08:00
    @murmur 个人体验是,原生 app 开发学 react 会一脸懵逼,入门门槛很高;
    学 Flutter 门槛稍低,既可以复用一部分原生的知识和思想,也得以有机会了解前端的思想;
    已经会了 Flutter 再学现代化前端,就是看下文档熟悉几个 api 的事儿,毫无难度。
    murmur
        22
    murmur  
       2020-11-20 16:15:35 +08:00   ❤️ 1
    @debuggerx 前端的啥东西学不是一脸懵逼,问题是 h5+native 是个很成熟而且有效的方式,非得想办法抛弃 h5 部分才离谱
    lujie2012
        23
    lujie2012  
       2020-11-20 16:16:44 +08:00
    @murmur Flutter 给是 Native 开发的宝贝,是 native 开发者的转型武器。前端同学来搞 Flutter 环境配置,证书,除非你真的是素质和基础很好。前端搞 Flutter,只有在环境和项目已经成熟,之后页面和业务开发来搞那时候是没有问题的。

    另外 Flutter 写好,性能等等,目前现状,还是需要很多移动端开发的理解和经验。
    lujie2012
        24
    lujie2012  
       2020-11-20 16:17:55 +08:00
    @iFlicker IOS 端不苦逼啊,Object-c 到 swift 到 swiftUI 不需要学习吗?但是有了 Flutter 我才不去学 SwiftUI 了,哈哈哈
    swift + Flutter 全平台了!!!!
    whypool
        25
    whypool  
       2020-11-20 16:19:38 +08:00 via Android
    嵌套太傻逼了,如果缩进用 4 空格…
    lujie2012
        26
    lujie2012  
       2020-11-20 16:27:50 +08:00
    @murmur Flutter 不是抛弃 H5,H5 什么平台都离不开的,Flutter 的本质需要好好学看看,颠覆了什么东西。
    murmur
        27
    murmur  
       2020-11-20 16:30:57 +08:00   ❤️ 1
    @lujie2012 flutter 的思路是用游戏引擎的方式,解决跨平台和渲染动画的性能问题,这是再 native 开发者眼中需要的东西,但是对于前端开发者,我是因为学不会 native 才被迫用 cordova rn 这些东西,而且我需要的是一个承诺,一个你帮我解决 native plugin 的承诺,而不是你的引擎多牛逼,生态全给社区。何况,现在的手机,就算是 h5 也不会太慢,所谓的动画,也停留在 os 、ui 层面,一进 app 全员拉跨没几个认真做的。

    从这个角度来看,微信小程序做到了,虽然是 h5,但是他用微信的体量为 native plugin 背书。
    hoyixi
        28
    hoyixi  
       2020-11-20 16:36:10 +08:00
    快速开发还不是不错的,尤其 UI
    不过 G 家的东东,风格都有点奇特,感觉就是:功能犀利,但是长相奇葩,耍起来总有点别扭,不飘逸不优美。
    debuggerx
        29
    debuggerx  
       2020-11-20 16:41:06 +08:00
    @murmur 不是很懂你的逻辑,Flutter 又不是要替代 h5 的,我现在给公司写的 app 就是主体部分 Flutter, 动态部分 webview,h5 用的技术栈是 Next.js + ts + Material-UI 。前端技术栈里我最推崇的就是 react,但是在移动端跨平台这个场景下,rn 确实和 Flutter 没法比。
    对我个人来说,哪怕需求就是只做移动端单端(android/ios),我也更愿意用 Flutter 而不是原生,就在于它的开发体验和开发效率比原生好太多。
    我觉得应该在合适的场景用合适的技术,而不是各种场景都想着用自己熟悉的技术。比如以前 java 开发用 jsp 写页面,比如 php 开发用 php 写运维脚本,比如用 css 写桌面环境……
    lujie2012
        30
    lujie2012  
       2020-11-20 16:51:51 +08:00
    @murmur H5 在各自平台上面始终需要中层去帮它做事情。对于 Flutter 第一个改变是 界面开发的改革,不是是学习各种平台的 SDK 你想想看要精通每个平台的 UI SDK 到多少经历,光 IOS 都有 UIKIt,APPKit,多少年了十年了,苹果都不愿意做到两个平台 SDK 一样。现在 SwiftUI 出来就算解决这个问题。而 Flutter 就算解决全部平台的问题,以后开发 window 不需要学 C++,学.net , 后端给数据,前端一套 SDK 解决了。

    这就算 QT 做的事情,但是 QT 没有实现移动端的发展,但是 google 是 android 爸爸,flutter 至少在 android 端没有问题。就算 apple 将来封杀 Flutter 那也是不少因为技术的原因,而是因为阻碍技术的原因,抵抗自然规律。

    Flutter 更靠近底层,有直接和平台交互的能力,和 Java 一样,一套代码只有有 Java SDK 就没有问题。

    H5 有些东西,是没有办法实现的,比如音频,视频处理,比如相机,比如 AR,这些 Flutter 更容易活动平台的能力,本来就算在 Xcode 上面编译,Xcode 有的它都能用,android 有的也能用。 离不开他们,所以还是要学习 android 和 IOS 开发。
    你看看 Flutter 关于 page storage,crash 崩溃,还不是依赖本书 android 自身的 API 和能力。H5 没有这样的解决方案,没有性能更好的潜力了。也就是 H5 的性能和解决方案潜力已经到此为止,而 flutter 是目前的潜力就这样,未来更可期待。

    另外 dart 还可以开发后端,那就更丰富了开发者的能力,无法弄一个 tomact 一样的容器,实现 severlet 容器。和 nodejs 一样,全栈也可以期待。


    因此,Flutter 的收益,你溢出的。。。。而前端,你看看 Nodejs 的发展情况。。。。
    murmur
        31
    murmur  
       2020-11-20 17:04:08 +08:00
    @debuggerx 大公司和小公司对技术的理解不一样,大公司有足够的团队,有玩票的能力,他可以把一个程序的一个页面改一个架构,然后宣称自己多么多么样,小公司直接整个 app 一个技术栈就扎进去了

    所以对于小公司来说,h5 (小程序)、rn 、flutter 就是三选一,说替代没什么问题

    也可以这么说,你对 flutter 的看法,是对 native 的补充,还是为学不会 native 的人提供的一个带有取舍的解决方案,会很大程度影响你对 flutter 的评价
    lovecy
        32
    lovecy  
       2020-11-20 17:19:59 +08:00
    @murmur 纯前端没 APP 开发经验的话,搞 RN 也难受。之前搞过,稍微偏底层机器一点的问题都焦头烂额。
    yaphets666
        33
    yaphets666  
       2020-11-20 17:35:08 +08:00
    @lwlizhe 这种一套代码多端运行的东西就是小公司 凑合事用的 这种东西也不可能完美 除非是大量的时间做兼容+手机版本不更新了.
    dikey
        34
    dikey  
       2020-11-20 17:35:28 +08:00   ❤️ 2
    只有我一个人觉得 flutter 的一些控件滑动时候页面虚无缥缈吗……

    阻尼很不舒服
    yaphets666
        35
    yaphets666  
       2020-11-20 17:36:28 +08:00   ❤️ 2
    我的观点就是.类似这种的东西都是小公司凑合事用的.有追求的公司都得搞 native 原生开发.
    WenhaoWu
        36
    WenhaoWu  
       2020-11-20 18:09:37 +08:00 via iPhone
    我们公司打算 web 也用 flutter 了,三端统一统一 code base 简直起飞
    TomVista
        37
    TomVista  
       2020-11-20 18:35:13 +08:00
    flutter 的布局更新机制,状态机制是真的屎,

    写了 3 个月 flutter,感觉布局更新机制,状态机制就是两个字:诡异
    matatabi
        38
    matatabi  
       2020-11-20 19:08:41 +08:00 via iPhone
    Flutter 强无敌
    luwies
        39
    luwies  
       2020-11-20 19:13:17 +08:00
    android 原生开发,写过半年 RN,当时就觉得 RN 兼容性不好,UI 在不同端表现效果可能会不一样。现在用 flutter 没遇到过这种问题,应该也不会有问题。

    现在回过头看 RN,5 年过去了,1.0 版本都还没出来。。。。感觉再过 5 年也不一定能出来,对 RN 已经失去了信心。

    以后做 App 肯定是首选 Flutter 的了
    shanghai1998
        40
    shanghai1998  
       2020-11-20 19:34:03 +08:00
    正在用 flutter 写 app,比 uniapp 写的爽,目前来说写 app 最爽的技术
    loginbygoogle
        41
    loginbygoogle  
       2020-11-20 19:46:13 +08:00
    Dart 的泛型功能还不太好用
    PopeyeLau
        42
    PopeyeLau  
       2020-11-20 19:57:28 +08:00 via iPhone
    @loginbygoogle +1 想写个范型的 Response 解析 真是蛋疼……
    IGJacklove
        43
    IGJacklove  
       2020-11-20 21:37:15 +08:00 via Android
    @KuroNekoFan rn 很多效果都不好做,flutter 上线比 rn 高很多,custom paint 基本可以让你为所欲为。
    IGJacklove
        44
    IGJacklove  
       2020-11-20 21:43:14 +08:00 via Android   ❤️ 1
    @TomVista 建议看看源码,很简单的。。。flutter 的 state 和 react 的 state 是两回事,flutter 的 setstate 只是把当前 widget 标记为脏组件,下次屏幕刷新的时候就会触发更新。它修改的数据只是普通变量。
    jtsai
        45
    jtsai  
       2020-11-20 22:08:45 +08:00 via iPhone
    uniapp 别吵了
    lujie2012
        46
    lujie2012  
       2020-11-20 22:45:06 +08:00
    @IGJacklove 你又说到一个优点,动画,交互,物理,色彩,为所欲为,想怎么搞,怎么搞。这是其他快端无法实现的。完全可以 android APP 做出 iOS 交互,IOS 做出 android 交互,无缝切换。就算多了一个虚拟机给你玩。
    dahhd
        47
    dahhd  
       2020-11-20 23:36:55 +08:00 via iPhone   ❤️ 2
    太年轻,一看就是没踩过坑的,现在夸,后来就要骂了。
    Bijiabo
        48
    Bijiabo  
       2020-11-21 00:03:38 +08:00
    再等等
    efsg
        49
    efsg  
       2020-11-21 00:07:13 +08:00 via Android
    用户 mmp,性能太差
    xrr2016
        50
    xrr2016  
       2020-11-21 10:32:38 +08:00
    哈哈哈,跟以前比 Flutter 的接受程度越来越高了?
    BigDogWang
        51
    BigDogWang  
       2020-11-21 10:41:56 +08:00
    感觉没有 SwiftUI 体验好
    20151024
        52
    20151024  
       2020-11-21 11:20:24 +08:00
    小程序出现,原生岗位数量暴跌;
    中小企业倒闭,原生岗位数量暴跌;
    RN/Flutter 出现,原生岗位数量暴跌;
    。。。
    iOSer 做错了什么?
    你可以说不学习就要被淘汰,可是岗位越来越少,总有人要被淘汰,被淘汰的人又做错了什么?
    所以你这种狂赞 Flutter 的帖子,我并不建议发,被老板 /CTO 看到了,又有人要失业了。
    年底了,失业是很痛苦的。
    azh7138m
        53
    azh7138m  
       2020-11-21 12:55:55 +08:00
    @lujie2012
    > H5 有些东西,是没有办法实现的,比如音频,视频处理,比如相机,比如 AR

    音视频也都有接口,只是做复杂的处理 js 性能可能跟不上
    MediaDevices 也暴露了很多东西出来,摄像头也是可以用的
    WebXR 虽然进展缓慢,但是 chrome 上也已经可以体验相关 API
    CBS
        54
    CBS  
       2020-11-21 13:57:12 +08:00   ❤️ 1
    dart 臭烘烘,其他同意……
    WildCat
        55
    WildCat  
       2020-11-21 14:05:19 +08:00   ❤️ 1
    给你泼个冷水,作为一个曾经的 Flutter 粉:
    宜家中国、咸鱼 都是重度使用 Flutter,你可以很容易进入奇怪的行为,并且很容易闪退。
    lujie2012
        56
    lujie2012  
       2020-11-21 16:10:43 +08:00
    哈哈,对于 iOSer 失业,天花板。我也是如此经历,但是我更多觉得是自己的原因。Flutter 的出现,不是革谁的命。比较不恰当的比喻,中药可以救人几千年如此,但是青霉素,X 光机,新技术的出现不是那些旧的得利者固守城池的理由。
    今后还有更多的新人进入移动端领域,他们会学习 swift,swiftUI,flutter 这样的先进西医技术。他们学习完 flutter 之后,不会在局限与 iOS 一个方向,而会进入全平台领域,或者拿 dart 写服务端+sql 数据可以一套语言实现很多服务。
    Flutter 不是屁股来占坑的,是科学的解决方案和效率及解救时间和成本的利器。这样后面的新人视野和技术接触范围就会更广阔,不在说你 iOS 开发或者 H5,或者 android,而会说你是大前端开发,各个平台都可以发布应用。

    对于 Flutter 现在的 bug 和 issue 还有效果和基础设施,已经是 1.0 release 版本,就算稀烂,这也是正确和最后的解决方案。
    希望移动端开发者不在局限在界面开发的泥潭,局限在现有 SDK 的泥潭,我们需要更多时间去接触更多的技术和平台范围。又这样机会,又何乐不为?
    lujie2012
        57
    lujie2012  
       2020-11-21 21:21:32 +08:00
    @PopeyeLau dymanic 可以拿来当成范型使用
    KuroNekoFan
        58
    KuroNekoFan  
       2020-11-22 11:24:23 +08:00
    @IGJacklove 这个我理解,但是即使是 web,要做一些精细的,定制化的 UI 效果也肯定是脱离了 react 本身在 dom 的层面上去做的啊,这个也不能用‘痛苦’来形容吧
    over140
        59
    over140  
       2020-12-08 15:46:17 +08:00
    回帖还挺多,想招 Flutter 大佬开发桌面端,支持全职远程办公,有大佬回复的话我写个详细的招聘帖子 😂
    bloodish
        60
    bloodish  
       2020-12-09 09:20:06 +08:00
    今年用 Flutter + 闲鱼的 Fish Redux 框架做了个企业 App,现学现买的,好用的很.看好 Flutter 的未来.
    opentrade
        61
    opentrade  
    OP
       2020-12-09 14:11:04 +08:00
    @over140 兼职考虑不?
    over140
        62
    over140  
       2020-12-09 14:51:05 +08:00
    @opentrade 兼职不考虑,需要全职,很适合奶爸大神,在家办公
    fescover
        63
    fescover  
       2020-12-15 10:02:03 +08:00
    如果 flutter 用 ts,绝不是今天这个发展速度。
    sewer
        64
    sewer  
       2020-12-24 23:39:02 +08:00 via iPhone
    那要看 开发什么应用了
    Michelangelono
        65
    Michelangelono  
       2021-04-09 13:56:17 +08:00
    主要 dart 这个语言太难用了,flutter 本身还不错。
    fatelight
        66
    fatelight  
       2021-04-22 18:19:14 +08:00
    还是结合实际场景吧,反正这个东西在 Android 上体验一言难尽
    1219178163
        67
    1219178163  
       2021-06-04 16:51:36 +08:00
    flutter 最大的缺点不是 dart 选型,是没有反射,runtime ;好多代码捷径没法走。一行一行敲本该一个动态方法实现的功能室特别崩溃。
    sunbreak
        68
    sunbreak  
       2021-06-12 00:01:25 +08:00
    @over140 好奇问下什么业务方向?
    over140
        69
    over140  
       2021-07-17 21:42:59 +08:00
    @sunbreak Flutter 桌面端主要是做端对端加密聊天
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   951 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 21:21 · PVG 05:21 · LAX 14:21 · JFK 17:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.