当前位置: 首页 > news >正文

flutter 初识(开发体验,优缺点)

前言

最近有个跨平台桌面应用的需求,需要支持 windows/linux/mac 系统,要做个更新应用的小界面,主要功能就是下载更新文件并在本地进行替换,很简单的小功能。

花了几分钟构建没做 UI 优化的示例界面:
请添加图片描述

由于我们的客户端程序员最近很忙,没时间做这个功能,正好我有空而且感兴趣。调研了一下跨平台应用的几个开发框架,由于我的主语言是 go,一开始看了下 gowails,开发使用很方便,但是其是依赖 webview 的,在目标机器上一定要安装 webview 才能够使用,不在乎这点的可以用,编译出来的应用体积特别小,很好用。

这时突然想到 flutter 目前也支持了桌面端的应用开发,使用它主要是看中了:

  • GitHub 的星标多
  • Google 大厂背书
  • 社区活跃
  • dart 简单,易于上手
  • 移动端入手的,移动端开发较为完善
  • 性能高

上手用用试试吧!好用的话后续可以在团队里推广下。

flutter 的优缺点

优点

  • 快速的开发周期: 虽然热重载现在大部分框架都支持了,但是也提一下,热重载功能使开发周期变得更快。你可以在应用运行时实时看到代码更改的效果,这有助于快速调试和迭代开发。
  • 漂亮的用户界面: flutter 提供丰富的内置小部件和自定义绘制选项,使开发者能够轻松创建精美且高度定制化的用户界面。
  • 高性能: flutter 使用 Skia 图形引擎进行渲染,可以在不同平台上实现高性能的用户界面体验。它还可以通过自带的硬件加速特性提供流畅的动画和过渡效果。
  • 单一代码库: 开发者只需维护一个代码库,即可为多个平台生成应用程序,这简化了代码维护和团队协作。
  • 丰富的社区支持: flutter 拥有一个庞大且积极的社区,提供了大量的资源、插件和解决方案,帮助开发者解决问题并加速开发进程。

缺点

  • 应用大小: 由于 flutter 应用程序需要包含其自身的运行时引擎和框架,因此应用的初始大小可能会比较大。虽然 Google 在不断努力减小应用的大小,但对于某些应用来说,这仍然可能是一个问题。
  • 平台特定性: 虽然 flutter 可以构建跨平台应用,但在某些情况下,特定平台的特性和行为可能无法完全抽象化,需要进行特定平台的定制开发。这应该是所有跨平台应用都需要面对的问题。
  • 第三方库支持: 虽然 flutter 社区提供了许多插件和库,但与其他一些平台相比,某些特定领域的第三方库可能相对较少。特别是桌面端的开发,目前支持还是比较少的。
  • 更新频率: flutter 框架在不断发展,新版本会带来新特性和改进,但这也可能导致需要频繁更新应用以保持与最新版本的兼容性。毕竟是新东西,多修修 bug 是好事。

我的跨平台开发经验

专做移动端的 phonegap(cordova) => 专做桌面端的 electron => 兼容小程序的 uniapp => 移动桌面端 flutter

总结

flutter 的上手难度还行,整体开发体验还不错,中文社区也挺强大的,基本上问题一搜都能有解答。

不过我做上述的小应用,还是花了一天的时间(搭建开发环境、熟悉其框架结构以及基础语法,数据请求等),主要还是遇到了一个编码的坑,长时间没找到解决方案。

这里要吐槽一下,我做的应用有个解压缩的功能,遇到了 gbk 编码问题,flutter 对中国用户真是不怎么友好,这个问题花了好半天,最后还是翻源码才解决(可能是我太菜了 =-=!)。

跨平台提供了便利性,同样也提高了复杂性,对开发者的知识广度还是有需求的。在使用这些跨平台的开发框架时,若是比较底层的,免不了要和原生打交道,一般问题多找找还是能够找到解决方案的。

在选择使用 flutter 还是其他技术时,应该根据项目需求和团队经验来进行权衡和决策。

相关文章:

flutter 初识(开发体验,优缺点)

前言 最近有个跨平台桌面应用的需求,需要支持 windows/linux/mac 系统,要做个更新应用的小界面,主要功能就是下载更新文件并在本地进行替换,很简单的小功能。 花了几分钟构建没做 UI 优化的示例界面: 由于我们的客…...

校验vue prop的几种方式

校验vue prop的几种方式 vue 要求将传递给组件的任何数据显式声明为 props。此外,它还提供了强大的内置机制来验证该数据。这充当组件和父级组件之间的约定,并确保组件能按预期使用。 让我们看看怎么对props进行校验。它可以帮助我们在开发和调试过程中…...

vue+springboot 前后端分离 上传文件处理后再下载,并且传递参数

vue代码 <template><div><input type"file" ref"fileInput" accept".json"/><el-button click"upload">上传</el-button></div> </template><script> export default {name: "…...

【Linux操作系统】举例解释Linux系统编程中文件io常用的函数

在Linux系统编程中&#xff0c;文件IO操作是非常常见和重要的操作之一。通过文件IO操作&#xff0c;我们可以打开、读取、写入和关闭文件&#xff0c;对文件进行定位、复制、删除和重命名等操作。本篇博客将介绍一些常用的文件IO操作函数。 文章目录 1. open()1.1 原型、参数及…...

Ubuntu和centos版本有哪些区别

Ubuntu和CentOS是两个非常流行的Linux发行版&#xff0c;它们在一些方面有一些区别&#xff0c;如下所示&#xff1a; CentOS的版本发布周期相对较长&#xff0c;主要是因为它是基于RedHatEnterpriseLinux(RHEL)的。这意味着在RHEL发布后才能推出对应的CentOS版本。而Ubuntu则在…...

Netty:ChannelHandler抛出异常,对应的channel被关闭

说明 使用Netty框架构建的socket服务端在处理客户端请求时&#xff0c;每接到一个客户端的连接请求&#xff0c;服务端会分配一个channel处理跟该客户端的交互。如果处理该channel数据的ChannelHandler抛出异常没有捕获&#xff0c;那么该channel会关闭。但服务端和其它客户端…...

pytest结合 allure 打标记之的详细使用

前言 前面我们提到使用allure 可以生成漂亮的测试报告&#xff0c;下面就Allure 标记我们做详细介绍。 allure 标记 包含&#xff1a;epic&#xff0c;feature, story, title, testcase, issue, description, step, serverity, link, attachment 常用的标记 allure.feature…...

【linux】2 软件管理器yum和编辑器vim

目录 1. linux软件包管理器yum 1.1 什么是软件包 1.2 关于rzsz 1.3 注意事项 1.4 查看软件包 1.5 如何安装、卸载软件 1.6 centos 7设置成国内yum源 2. linux开发工具-Linux编辑器-vim使用 2.1 vim的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行…...

Angular中的ActivatedRoute和Router

Angular中的ActivatedRoute和Router解释 在Angular中&#xff0c;ActivatedRoute和Router是两个核心的路由服务。他们都提供可以用来检查和操作当前页面路由信息的方法和属性。 ActivatedRoute ActivatedRoute是一个保存关于当前路由状态&#xff08;如路由参数、查询参数以…...

Layui精简版,快速入门

目录 LayUI之入门 1.什么是layui 2.layui入门 3.自定义模块 4.用户登录 5.主页搭建 LayUI之动态树 main.jsp main.js LayUI之动态选项卡 1.选项卡 main.jsp main.js 2.用户登录 User.java UserDao.java UserAction.java R.java LayUI之用户管理 1.用户查询…...

SSH远程Ubuntu教程

SSH远程Ubuntu教程 目录 什么是SSH&#xff1f;SSH的优点在Ubuntu上启用SSH服务连接到远程Ubuntu服务器SSH的常用命令 1. 什么是SSH&#xff1f; SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于在不安全的网络中安全地远程登录和执行命令。它使用…...

NPM与外部服务的集成(下)

目录 1、撤消访问令牌 2、在CI/CD工作流中使用私有包 2.1 创建新的访问令牌 持续整合 持续部署 交互式工作流 CIDR白名单 2.2 将令牌设置为CI/CD服务器上的环境变量 2.3 创建并签入特定于项目的.npmrc文件 2.4 令牌安全 3、Docker和私有模块 3.1 背景&#xff1a;运…...

Flask Web开发实战(狼书)| 笔记第1、2章

前言 2023-8-11 以前对网站开发萌生了想法&#xff0c;又有些急于求成&#xff0c;在B站照着视频敲了一个基于flask的博客系统。但对于程序的代码难免有些囫囵吞枣&#xff0c;存在许多模糊或不太理解的地方&#xff0c;只会照葫芦画瓢。 而当自己想开发一个什么网站的时&…...

PHP利用PCRE回溯次数限制绕过某些安全限制实战案例

目录 一、正则表达式概述 有限状态自动机 匹配输入的过程分别是&#xff1a; DFA&#xff08;确定性有限状态自动机&#xff09; NFA&#xff08;非确定性有限状态自动机&#xff09; 二、回溯的过程 三、 PHP 的 pcre.backtrack_limit 限制利用 例题一 回溯绕过步骤 &…...

读书笔记 |【项目思维与管理】➾ 顺势而动

读书笔记 |【项目思维与管理】➾ 顺势而动 一、企业步入“终结者时代”二、过去成功的经验也许是最可怕的三、做好非重复性的事四、适应客户是出发点五、向知识型企业转变六、速度是决胜条件 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; …...

开发利器:接口代理和接口模拟工具

前端开发过程往往需要和后端对接接口,而且一般开发都是前后端同步开发,这就难免出现接口提供滞后的问题,从而导致我们前端开发 UI 开发完成而无法调试的问题。面对这种问题,一般我们会有很多种方式处理,比如在代码中写一些模拟数据,或者打断点调试,或者用代理工具 Fidde…...

MAVEN利器:一文带你了解MAVEN以及如何配置

前言&#xff1a; 强大的构建工具——Maven。作为Java生态系统中的重要组成部分&#xff0c;Maven为开发人员提供了一种简单而高效的方式来构建、管理和发布Java项目。无论是小型项目还是大型企业级应用&#xff0c;Maven都能帮助开发人员轻松处理依赖管理、编译、测试和部署等…...

解决 adb install 错误INSTALL_FAILED_UPDATE_INCOMPATIBLE

最近给游戏出包&#xff0c;平台要求 v1 签名吧&#xff0c;AS 打包后&#xff0c;adb 执行安装到手机&#xff0c;我用的设备是google pixel6 , android 系统 13&#xff0c; 提示如下&#xff1a; adb install -r v5_android_202308161046.apk Performing Streamed Install a…...

学习Vue:Event Bus 与 Provide/Inject

在Vue.js中&#xff0c;兄弟组件通信是指两个没有直接父子关系的组件之间如何进行数据传递和通信。为了实现兄弟组件通信&#xff0c;我们可以借助Vue的一些特性&#xff0c;如Event Bus和Provide/Inject。让我们一起来深入了解这些方法&#xff0c;并通过实例来看看如何实现兄…...

Java 工具类之JSON key根据ASCII排序

Java按键值字典序排列 参数按照KEY值进行字典序排序(按照KEY值的ASCII码从小到大),并用&作为各参数之间的分隔符将参数拼接成字符串。这里用到了SortedMap&#xff0c;复制以下代码开箱即用~ /*** getSortedString 对参数按照Key进行ASCII排序* param jsonObject 请求参数…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

ubuntu中安装conda的后遗症

缘由: 在编译rk3588的sdk时&#xff0c;遇到编译buildroot失败&#xff0c;提示如下&#xff1a; 提示缺失expect&#xff0c;但是实测相关工具是在的&#xff0c;如下显示&#xff1a; 然后查找借助各个ai工具&#xff0c;重新安装相关的工具&#xff0c;依然无解。 解决&am…...

【Qt】控件 QWidget

控件 QWidget 一. 控件概述二. QWidget 的核心属性可用状态&#xff1a;enabled几何&#xff1a;geometrywindows frame 窗口框架的影响 窗口标题&#xff1a;windowTitle窗口图标&#xff1a;windowIconqrc 机制 窗口不透明度&#xff1a;windowOpacity光标&#xff1a;cursor…...