
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
避免在循环里面或者频繁被调用的方法里面创建对象,在循环或者被频繁调用的方法之外创建对象使用对象池缓存对象,在使用对象的时候,直接从对象池中取对象即可,避免频繁的创建对象一般来讲,实现对象池有三种方法,对应的具体的数据结构即是数组、链表和 Map,下面我将通过示例分别介绍通过这三种数据结构实现的对象池首先是Pool<T>接口定义,代码不难,如下所示,只有两个方法acquire()和方法acquire

而drawText()方法中x,y坐标所指的点就是上图基线上三个点中的一个,具体是哪一个根据paint的setTextAlign()方法设置,默认为left。计算方式就是用: 文本的总高度的一半减去基线到bottom线的距离,算出基线到中点之间的距离,然后再用中间的Y坐标加上这个距离,就是文本的基线位置。要计算的就是基线中间图上红色点的y坐标了,看图可以发现红色点的y为矩形中点黑色点的y坐标+图中

baseline是绘制文本的基线,相对于绘制文本区域来说,相当于x轴,向上为负(top、ascent),向下为正(descent、bottom),但是这个x轴并不是控件的x轴,切记切记!有点难理解,举个栗子,上文中的x、y参数传的是(0,0),此时的baseline正好是坐标系中x轴,就相当于从y轴开始向右绘制,以x轴作为文本的baseline进行绘制。使用StaticLayout,每行设置的宽度
Flutter 作为目前最火爆的移动端跨平台框架,能够帮助开发者通过一套代码库高效地构建多平台的精美应用,并支持移动、Web、桌面和嵌入式平台。对于 Android 来说,Flutter 能够创作媲美原生的高性能应用,但是,在较为复杂的 App 中,使用 Flutter 开发也很难避免产生各种各样的性能问题。在这篇文章中,我将和你一起全方位地深入探索 Flutter 性能优化的疆域。以 profi

StatefulWidget作为一种状态可变的控件,其状态的改变通常是由State.setState进行的,但当我们需要在StatefulWidget之外改变它的状态时,因Widget的重新构造并不一定使得State重新构造,所以我们难以直接获取当前Widget所绑定的State,从而改变StatefulWidget的状态。因此当只使用该StatefulWidget的一个实例时(即页面上只有一个该
1. 实现GradientButton背景支持渐变色手指按下时有涟漪效果可以支持圆角DecoratedBox可以支持背景色渐变和圆角,InkWell在手指按下有涟漪效果,所以我们可以通过组合DecoratedBox和InkWell来实现GradientButtonKey?key,colors;// 渐变色数组width;// 按钮 宽height;// 按钮 高// 按钮 圆角// 禁用// 子组
上图可以看到我们设置了margin的left为4后,左边的圆角明显显示有问题,被截了一部分。这种方式设置的圆角如果显示在四角的子控件设置了渐变,将会影响圆角显示。这种方式添加的圆角不会被子控件覆盖。............
fun main() {Human()Human.instance}class Human {private var work: String = "医生"constructor() {println("主构造方法 constructor")}constructor(name: String) {println("带参数构造方法 constructor $name")}i...
造成此问题的原因,经过log验证,应该是TextField作为一个Widget,被滑出屏幕,又滑回来,没有焦点的Widget的initState和build方法会被重新执行,也就是Widget会被重建,重建时原有的状态不会自动恢复,里面的文字自然就消失了。当输入内容后将ListVIew上滚动,三个TextField滚动滑出界面后,再把ListView滚动回顶部,只有焦点所在的TextField里的
Bloc模式的出现, 主要用于分离UI组件和逻辑业务, 特别对于复杂的app状态管理, 能有效做到UI和业务解耦.简单方法 Simple Bloc ProviderBlocProvider直接继承InheritedWidget, 这样其子Widget都能访问内部数据. 但是因为没有dispose方法,因此无法释放资源.对于简单应用, 完全可以使用该方法而不必关心是否会浪费资源拖慢系统.import







