flutter拖拽布局,flutter下拉选择

Flutter开发--如何布局?

相对于iOS开发,Flutter的布局更具有灵活性,每个页面设计都不一样,相同页面可选择的布局方式也不一样,如果单纯的说应该如何去布局,我觉得不现实,大家可以参考下 Flutter官方的布局教程 。接下来,笔者,通过项目中的一个页面,来一步一步的拆解布局的流程。整个过程,基本上按照拆解、组件封装、具体布局这三步来的。

目前创新互联公司已为1000+的企业提供了网站建设、域名、网站空间、网站托管维护、企业网站设计、长丰网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

根据设计图,可以看出整体可以分成两部分,上面一部分是系统介绍模块,下面一部分是真正的登录内容,因为涉及到叠加,因此考虑用Stack;

系统介绍模块部分:整体也是涉及到叠加,考虑用Stack,分为四部分。最底部渐变色背景用一个contanier,无须指定位置,全视图扩展;载放logo图标在上一层,用Image。最后两个Text同级放在最上层。Image,Text各用Positioned包裹去指定位置。

登录内容模块是最外层是一个Contanier容器,去控制背景色和圆角。然后是一个Column元素,逐行排列。

第一行为Image,

第二行为Text,

第三行可以看成一个小Column,分两块进行布局

第四行可以看成一个小Column,分两块进行布局

第五行可以看作一个TextButton,

第六行可以看作一个Row,分三块进行布局

通过上面这样一步一步的分析后,基本上对大致的布局有了一个了解,最外层的控件大致选对(只要能实现的话,就是复杂度以及效率的问题),然后一步一步的拆解每一行的元素,如果有重复的或者觉得可以封装出来的部分,则进行下一步。

每一行的拆解,大致也是按照这个思路来进行,因此笔者在这里就不做讲解了。

在做到第三第四行的时候,发现这两个很相似,而且设计到一些交互逻辑,笔者就想对第三第四行的这种展示进行封装,觉得今后的布局可能会用到,因此在这一步,可以先把这一块儿抽离出一个控件。利用TextField来实现这种输入操作,具体的实现笔者不再详细的描述了。

经过这一步,整体的规划设计图已经有了,各个组件也都有了,接下来的工作就是组装了。

具体布局设计到一些细节的地方,例如整体Column的居中对齐(crossAxisAlignment)、间隔(Padding或Container包裹,笔者更喜欢用SizedBox占位)、居左居右居中(Align)、点击事件(GestureDetector)以及圆角(BorderRadius)等一些特殊情况。

像第六行row是放在底部的,就可以在第六行前面增加一个Spacer()去填充空白区域。

对文字颜色大小等,可以用TextStyle直接设置。

对于输入框的删除按钮,可以用Offstage这种Flutter特有的控制显示隐藏的控件。

Flutter-布局

flutter布局需要先了解flutter所有布局的widget,首先flutter布局分为Container、RenderObjectWidget和ParentDataWidget。而RenderObject中经常使用的有SingleChildRenderObjectWidget(单节点)和MultiChildRenderObjectWidget(多节点)。

flutter中基础的widget,可以为子节点设置内间距。当padding没有child的时候,它会产生一个宽为left+right,高为top+bottom的区域,当padding的child不为空的时候会将约束传递给child。一般在使用间距的地方使用。

设置child的对齐方式,并根据child的尺寸调整自身的尺寸。

设置透明度

用于矩形圆角裁剪组件

用于圆形裁剪,但是可以添加阴影和Z轴

给组件绘制区域大小

百分比布局,可以通过widthFactor或者heightFactor设置宽高占比

子组件叠加布局,也称绝对布局

mainAxisAlignment: start:顶头 center:居中 end:接尾 spaceAround:中间的孩子均分,两头的孩子空一半 spaceBetween:顶头接尾其他均分 spaceEvenly:均匀分布

crossAxisAlignment: start:顶头 center:居中 end:接尾 stretch:伸展

mainAxisSize: max:父容器没有约束的话,column自身会尽可能延伸 min:不会延伸,只会包裹自己

属性和column属性一致,只是方向不同,一个竖直方向一个水平方向。使用方法也类似。

Wrap可以实现流布局,单行的Wrap跟Row一样,单列的Wrap则跟Colum一样.但是Row和Column都是单行单列的,Wrap可以多行多列。

Wrap能做的事情,flow也能做。但是flow会比较复杂点。flow类似于OC中CollectionLayout,需要自己实现子组件的位置以及大小。但是flow的性能比较好,灵活。

自定义FlowDelegate

运行结果:

绝对定位布局,用于指定组件的具体位置

Expanded组件可以使row、column或者flex子组件在其主轴上展开并填充可用空间。如果多个组件展开的话,会按照比例分割。

Tip:Expanded组件要在row、column或者flex的子组件中使用。具有两个属性,child:子组件,flex:所占比例

Flutter-GestureDetector的拖曳手势

相信在方法当中,我们都会遇到让组件有拖拽效果的需求。在 Flutter 当中怎么实现拖拽需求呢?这篇博客分享关于 拖拽手势 的知识,希望对看文章的小伙伴有所启发。

拖拽手势 是指用户在长按屏幕的时候,移动手指的手势。会细分成:

我们可以理解成用户在触碰到屏幕的那一刻处于 按下 ,之后有可能触发 移动 手势,最后 抬起 离开屏幕,这就是完整的手势。

在 GestureDetector 当中,拖拽手势分为2种:

flutter- 全局悬浮可拖动的Widget

那天,产品经理说“我在微信朋友圈里点了别人分享出来的歌曲链接 听了会歌 那歌简直了 好听 退到聊天界面 出现了个悬浮的歌曲图标 那我们能不能做类似的 在所有页面都会存在这样一个悬浮图标 这个图标目前要有打客服电话功能”。

我一心想,这人真会搞事 哈哈。行 满足他

事实上有一个Overlay的widget,它的createState方法获取的就是OverlayState对象.

Overlay可以认为是一个UI上面的蒙版/浮空层,使用起来类似Stack;

Flutter 仿抖音效果 (二) 界面布局

Flutter 仿抖音效果 (一) 全屏点爱星

Flutter 仿抖音效果 (二) 界面布局

[Flutter 仿抖音效果 (三) 视频播放列表] ( )

项目地址: 持续效果更新

1.基本的布局是简单的,外层通过Stack作为根

2.左边点赞的控件组通过Align进行统一布局

3.顶部控件组通过Positioned进行布局,设置顶部距离,其实也可以用align,我们多使用几种来习惯flutter的布局

4.底部同样使用Positioned,设置底部距离

5.子页面的左右滑动使用PageView,一开始我们要从推荐开始左滑到关注,可以使用reverse属性,不需要更多额外的操作

1.pageController监听

刷新顶部的下划线时,我们一样使用StreamController刷新,这样效率比setstate高很多

2.歌曲名走马灯效果

这个效果看起来挺麻烦的其实实现起来超级的简单用最普通的ListView就能快速的实现

首页listview里面套入的是最简单的container+text

listview添加一个ScrollController做为滑动的控制

使用一个定时器,把listview滑到最大的位置之后,在滑回去

先通过scroController.position.maxScrollExtent获取最大位置,

然后通过scroController.animateTo进行滑动,因为我设置一次循环的时间是3000毫秒,所以滑过去和滑回来的时间各占一般 new Duration(milliseconds: (time * 0.5).toInt()),还有就是歌名没有大于最大宽度时候其实我们不需要进行滑动,所以判断maxScrollExtent是否大于0来确定是否进行滑动动画

文章标题:flutter拖拽布局,flutter下拉选择
文章分享:https://www.cdcxhl.com/article42/hoopec.html

成都网站建设公司_创新互联,为您提供网站建设网站收录网站营销定制网站网站导航品牌网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

手机网站建设