【Flutter 专题】14 图解 ListView 不同样式 item 及 Widget 显隐性

一年一度的谷歌大会又开始了,谷歌对 Flutter 的投入力度又加大了,所以更得好好学 Flutter 了。小菜在做新闻列表方面的 Demo 时,想到会在列表中展示多种不同 item 样式,今天特意借助上一篇关于 ListView 的小例子 稍微调整一下,测试 ListView 中多种 item 样式展示方式。
尝试如下
小菜按照 Android 的想法,应该会对 Android 列表的 ViewHolder 中进行状态判断;类似的小菜想在 itemBuilder 中对布局样式进行判断,想法是可以的,只是在实践中遇到两个小小的问题,分析一下,如下:
实践注意
一. item 类型显示不完整
小菜首先往 buildListData 中传入 item 样式类型,针对样式类型判断 Widget 样式,当然类型传入方式多种多样按实际情况而定;
小菜编辑了一个 stateItems 有 0,1,2 三种样式类型,但是在 buildListData 中只判断了 1 和 2 两种,小菜以为会隐藏掉当前 item,可结果出乎意料,在 0 及以后的 item 全部不显示,完全中断;如图:
添加相应的判断处理之后即正常展示,如图:
二. GestureDetector 手势方法注意
默认很多 Widget 没有 onTab() 方法,但是可以用 GestureDetector 来进行手势处理;小菜建议使用 GestureDetector 时针对具体的 Widget,例如对 item 进行点击操作时,对整个 item 外添加 GestureDetector,小菜当时糊涂把 GestureDetector 添加错 Widget 以为使用方式有问题,请各位注意。
三. Widget 显隐性
小菜在实际测试的过程中需要用到【Widget 显隐性】,小菜想 Flutter 最大的特点就是一切都是 Widget,同时 Widget 不可为 null(错误:Widget wi = null),于是小菜把需要隐藏的 Widget 设置宽和高为 0.0,当然这是很蠢的方法,随着对 Flutter 的了解,可以用 Offstage,通过设置 offstage 熟悉来处理显隐性,true 为隐藏,false 为显示。
核心源码
小菜刚接触 Flutter 时间不长,还有很多不清楚和不理解的地方,如果又不对的地方还希望多多指出!
来源:阿策小和尚
版权声明: 本文为 InfoQ 作者【阿策小和尚】的原创文章。
原文链接:【http://xie.infoq.cn/article/5f3391d572e2af7478f053ed3】。文章转载请联系作者。











评论