有没有办法在 Flutter(Dart)中用类 JSX 语法编写代码?

2023-09-07 20:07:22 +08:00
 Leon6868

本人以前用 React Native ,JSX 代码结构简单明了,可读性强,学习难度低,简直不要太舒服。

现在切换到 Flutter , 其他都好说,就是这 UI 代码真让人头大,一个在 React Native 上十几行就能搞定的功能在 Flutter 中可能要几十行甚至上百行,代码结构也异常混乱。

回首编写 React Native 的时光,真是怀念啊……因此突发奇想,如果能在 Flutter ( Dart )中使用类似 JSX 的语法编写 UI 该多好……

请教各位大神,如果想要实现这个功能,需要从哪些方面入手呢?

1277 次点击
所在节点    Flutter
6 条回复
w568w
2023-09-07 20:12:26 +08:00
> 本人以前用 React Native ,JSX 代码结构简单明了,可读性强,学习难度低,简直不要太舒服。

出于什么考虑换 Flutter ?

> 一个在 React Native 上十几行就能搞定的功能在 Flutter 中可能要几十行甚至上百行,代码结构也异常混乱

结构混乱更可能是把所有东西都内联在 build() 里了,建议抽取子控件和方法(例如 onTap 等回调)。


> 如果想要实现这个功能,需要从哪些方面入手呢?

据我所知,Dart 不支持 DSL…
witcat
2023-09-07 20:30:29 +08:00
是公司要用的吧。
其实 flutter 不是压倒性的比 RN 方案更好,不知道为什么很多公司逃跑似的都不用 RN 了。
Leon6868
2023-09-07 20:33:31 +08:00
@w568w 感谢回复!

> 出于什么考虑换 Flutter ?

第一点是工作原因,这也是感受到“代码结构异常混乱”的直接原因 :(

第二点是看重 Flutter 真正的全端兼容能力,这点比 React Native Windows 好太多,至少 Flutter 编译出来的是真正的 Win32

> 结构混乱更可能是把所有东西都内联在 build() 里了

是这样的,我自己写 Flutter 也会通过这些方法减少复杂性,可惜有很多同事就硬写,真的很难受,硬写就算了,children 还放在一堆参数中间 :( 看着这参差不齐的两三百行代码简直是折磨

有这些痛苦的经历,所以我才会怀念 JSX

> Dart 不支持 DSL

那有没有其他方式的实现方法呢?比如在编译过程中加入一个 filter 把 xml 格式的代码转换成 dart 的代码?

据我所知 flutter 社区对于这个问题也挺分裂的……
Leon6868
2023-09-07 20:36:41 +08:00
@witcat 我们公司看重 flutter 主要是因为它确实有很多代码能在生产环境多端复用,这对小公司是非常友好的,如果使用 React Native 那桌面端还要专门分一组人来做 win32 ,而 flutter 大部分时候只要 UI 上改改就能用,核心功能几乎不用动
mxT52CRuqR6o5
2023-09-07 20:38:41 +08:00
flutter 没有框架级别统一的 children 抽象,没法在不引入 breaking change 的情况下设计出 jsx 这样的东西
Leon6868
2023-09-07 20:41:42 +08:00
@mxT52CRuqR6o5 你是指 children 和 child 吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/971838

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX