046b254a创建于 2025年10月21日历史提交

uniapp 与 Flutter 的差异

Flutter

Flutter 是一个由 Google 推出的移动应用开发框架,使用 Dart 语言编写。Flutter 具有高度的可定制性和丰富的 UI 组件,它使用自有的渲染引擎和框架,可以在多个平台上实现快速、高效的应用程序开发。

Flutter鸿蒙化的优点:

  • 快速迭代和发布:Flutter 的热重载功能允许开发人员在进行更改后即时看到结果,这大大缩短了开发时间。
  • 丰富的 UI 库:Flutter 内置了许多美观且高性能的 UI 组件,允许开发人员轻松创建复杂的用户界面。
  • 卓越的性能:Flutter 通过自有的渲染引擎,可以在多个平台上实现高性能的应用程序。
  • 目前提供了3.22和3.7版本的支持,三方库也适配了蛮多,即使没有适配大家也可以根据适配指导自己适配。

Flutter鸿蒙化 缺点:

  • 需要学习新的编程语言:使用 Flutter 开发应用程序需要学习 Dart 编程语言,这可能需要一些额外的时间和资源。
  • 相对较小的开发社区:相对于 uniapp,Flutter 的开发社区相对较小,但是现在有了ai的帮助,开发者们遇到问题,也可以用ai,快速定位。

uniapp

uniapp 是一个由 DCloud 推出的基于 Vue.js 开发的跨平台应用程序开发框架,可以同时支持 Android 和 iOS ,鸿蒙等多种平台。uniapp 通过使用原生组件,提供了与原生应用程序相似的用户体验。

uniapp 优点:

  • 易于使用:开发人员可以使用熟悉的 Vue.js 框架来构建应用程序,这使得学习和使用 UniApp 相对容易。
  • 基于原生组件:uniapp 使用原生组件来实现应用程序的功能,这使得应用程序具有更好的性能和用户体验。
  • 适用于小型应用程序:uniapp 适用于构建小型应用程序,小程序等。
  • 目前uniapp和uniapp-x都支持开发鸿蒙

uniapp 缺点:

  • 缺乏扩展性:uniapp 的功能相对较少,如果需要添加一些高级功能,可能需要自己编写原生代码。
  • 目前uniapp和uniapp-x虽然都支持开发鸿蒙,但是生态没有鸿蒙版flutter完善。

学习成本的对比感悟

1. 开发语言的不同

Flutter,要求开发者学习dart,了解dart和flutter的API,最好还会写点原生~而uni-app只需要学Vue.js,没有附加专有技术。所以从学习一个框架来看,很明显uni-app的学习成本很低。

2. 第三方插件&社区氛围

截至目前2025.4月,flutter在github上有170K的star,uni-app有着40K的star。从star的数量也可以看出一个框架的热度,很明显,flutter是远高于uni-app的。对于第三方插件呢Flutter有着pub.dev,uni-app有插件市场,但相比Flutter还是有出入的。

3. 开发工具的使用

Flutter可以选择vscode或者android studio等来进行开发,uni-app可以选择HBuilderX,当然也可以使用vscode,用什么开发工具其实大差不差。

编码实现对比

1. 布局区别

  • 代码整体结构:Flutter使用Widget层级嵌套来构建用户界面,也是被很多人所不喜欢的嵌套地狱。 uni-app 使用 Vue.js 的组件化布局方式,templatestylescripttemplate 定义了组件的 HTML 结构,style 定义了组件的样式,script 定义了组件的行为。
  • 布局原理区别:Flutter 中的布局是基于约束的,可以使用Constraints来控制小部件的最大和最小尺寸,并根据父级小部件的约束来确定自身的尺寸。uni-app则是,可以使用类似于 CSS 中 Flex 弹性布局的方式来控制组件的排列和布局。通过设置组件的样式属性,如 display: flexflexjustify-content 等,可以实现垂直和水平方向上的灵活布局。当然flutter也有和flex差不多的rowcolumn
  • 自定义布局:Flutter支持自定义布局,可以通过继承 SingleChildLayoutDelegateMultiChildLayoutDelegate 来实现自定义布局,而uni-app目前并没有直接提供类似的专门用于自定义布局的机制,不过uni-app常见的做法是创建一个自定义组件,并在该组件的 template 中使用各种布局方式、样式和组件组合来实现特定的布局效果。

2. 状态管理的区别

Flutter 提供了内置的状态管理机制,最常见的就是通过setState来管理小部件的状态,uni-app是利用Vue.js的响应式数据绑定和状态管理,通过 data 属性来定义和管理组件的状态。

3. 开发语言的区别与联系

区别:众所周知,JavaScript 是一门弱类型的语言,而 Dart 是强类型的语言。Dart有类和接口的概念。