百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

在闲鱼实习做Flutter是什么感受

toyiye 2024-06-21 11:56 10 浏览 0 评论

前言

我是广东工业大学16级软件工程专业的学生,至今实习3个月。在闲鱼先后完成了玩家发布页重构、AndroidQ适配、租赁、直播等任务。在这短暂的三个月,依靠闲鱼,我完成了从Android到Flutter的一个技术栈的初步转移。这篇文章主要分享一下我三个月的工作学习以及心得体会。

熟悉项目工程

通过项目来学习,似乎是我们这一行最快的入门方法。

在最初的一个月,师兄先让我对Flutter与Dart进行初步的学习,布置了一个使用Fish-Redux重构发布页面的任务,让我快速上手Flutter,熟悉项目工程。这个界面看起来挺简单的,但实际上他有很多复杂的交互要处理。发布页如下图所示:

重构过程困难重重,首先是我对Flutter的认识不足,当时我甚至还不知道StatefulWidget 跟StatelessWidget的区别是什么,其次是对Fish-Redux理解不够。这就像建楼从楼顶开始建起一样,是不可能的。后来我决定花点时间,去认识各种Widget,Dart Api,Future等等。并写了一个小demo,包括了多Tab,列表,图片,网络等场景。通过这些学习,整体上大大提高了我对Flutter的认识与理解。这期间闲鱼公众号里的文章对帮助真的很大。

当然,除了一些常见的问题,这个页面还有很多坑,因为他的交互太多了。包括页面进入自动获取Focus,点击输入框外部收起键盘,失去焦点自动检测输入并提交,点击按钮按钮,按钮变成输入框并弹出键盘等等。一开始想象的方案很美好,可惜实际写起来,事与愿违,经常遇到键盘无法弹起,键盘弹起遮挡输入,多个控件获取了焦点等等一系列问题。后来通过分析FocusNode和FocusManager的相关代码以及在师兄的帮助下,成功解决这一系列问题。这里也很感谢师兄给我足足一个月的充足的时间,让我在工作的同时,有很多空闲的时间去深入到Flutter内部去学习各种组件的原理。

熟悉项目流程

我在大三来闲鱼实习之前,在学校的工作室待过一段时间,也做过一些项目。工作室跟公司对比起来有着天壤之别。在学校开发的项目,没有详细的产品需求文档,交互设计全靠自己发挥,更没有测试,代码也是想到哪写到哪,导致产品的质量经常不如人意。在八月份初,我终于有机会去接触一个完整的FDD项目管理流程。下图是某业务的看板:

各个阶段对我来说是陌生的也是充满挑战的,深刻的体会到了闲鱼项目管理的严谨和高效。其中的测试和发布是让人最紧张的一个环节了。害怕给测出低级BUG是原因之一(TC后测试用例不过的BUG就是低级BUG,我也是最近才知道)现在每次给提BUG,首先就是要去看看是不是低级BUG。

8月份‘喜提’的两个低级BUG另外中间的各种评审,也是对我思维能力的考验,评审涉及到的各种问题,是我们估时的重要依据,考虑不周将会影响到我们后期的开发进度。

突破与沉淀

在这次的项目开发中,也利用自己学到的Flutter知识,对原有的框架进行优化。FDRfreshWidget是一个闲鱼内部的控件,提供了下拉刷新,上拉加载更多的能力。但是在实际使用的过程中发现体验不佳,并且在滚动时在配置较低的设备上卡顿问题表现明显。在Android中我们熟知的列表图片的优化方案包括:①三级缓存 ②滚动时不加载 ③图片质量压缩 等等。在这个订单列表的场景下卡顿的原因主要是由于滚动时触发了大量的图片加载请求导致CPU与内存占用过高,因此方案②对于解决这个问题来说是很合适的。

优化后的方案如下:通过使用InheritedWidget缓存加载控制的标记,根据ScrollView的Notification修改标记位,底层的ImageView根据标记来决定是否加载图片,并通过上层Widget缓存整个ListView终断了build的过程,避免了不必要的rebuild。

优化之后,内存占用降低了100多MB,同时帧率上在起始时也得到了很大的提升。同事们对这个效果表示满意。

最终这个改动也集成到了基础代码里,为闲鱼里多个使用了FDRfreshWidget的地方提供了一个能力的增强。另外还有一些其他的基础能力的建设,包括Flutter到Weex的通信,DynamicAction能力增强等等就不多做分享了。下图总结了我在闲鱼里学到Flutter相关的所有技术。

对于打算学习Flutter的同学提供一个初步学习的路线:

  • 学习dart语言的基本语法

  • 学习大部分基础Widget的使用方式

  • 学习各种Key的使用以及作用

  • 了解Naviagator的实现方式

  • 了解setState的过程

  • 了解Dart的异步机制

  • 了解Redux,Bloc等架构

收获

在阿里实习的三个月,期间还有一些有意思的活动,比如百技(为期三天的头脑风暴),各个方向大神的经验分享还有新人秀等等。总的来说在闲鱼实习的三个月,说短不短,说长不长,但是过的十分充实且有意义,他给我带来了一些思维上的转变,让我受益匪浅,让我从一个学生逐渐转变成了一个职场员工。

再给职场新人几点建议,也是我工作中犯错的一点经验教训

  • 敢于问问题。在大型的团队协作项目里,有些问题原因可能是别人的原因导致的,还有些问题其他同学已经踩过坑了,请教其他人才是最佳的办法。当然也不能遇到问题就不思考就问,这个还需自行判断。

  • 提早暴露问题。一些项目中遇到的问题,有必要的话要尽早抛出来,同步组员,有时一切不起眼的小问题可能是导致大问题的原因。

  • 主动推进任务。在闲鱼,接到任务要主动推进,因为有的项目可能是跨多团队协作的,你不将项目当当做自己的,主动推进,别的团队更不可能帮你推进。

  • 打通任务的上下流。一个任务仅仅完成是不够的,还要注意与他相关的一些页面,有没有受到影响。

  • 多思考,多总结。

闲鱼团队是Flutter+Dart FaaS前后端一体化新技术的行业领军者,就是现在!客户端/服务端java/架构/前端/质量工程师通通期待你的加入,base杭州阿里巴巴西溪园区,一起做有创想空间的社区产品、做深度顶级的开源项目,一起拓展技术边界成就极致!

*投喂简历给小闲鱼→guicai.gxy@alibaba-inc.com

更多系列文章、开源项目、关键洞察、深度解读

请认准闲鱼技术

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码