在Flutter中,可以实现流式布局的的组件有两个:Wrap和Flow。横向排列子组件,自动换行。

实现效果:

下面是Flow布局实现的部分代码:

/*** 自定义流式布局*/
class FlowLayout extends StatelessWidget {@overrideWidget build(BuildContext context) {// TODO: implement buildreturn new Flow(delegate: TestFlowDelegate(margin: EdgeInsets.all(10.0)),children: <Widget>[new Container(width: 30.0, height: 50.0, color: Colors.red,),new Container(width: 80.0, height: 80.0, color: Colors.green,),new Container(width: 80.0, height: 70.0, color: Colors.blue,),new Container(width: 80.0, height: 160.0, color: Colors.yellow,),new Container(width: 130.0, height: 30.0, color: Colors.brown,),new Container(width: 80.0, height: 80.0, color: Colors.purple,),],);}}class TestFlowDelegate extends FlowDelegate {EdgeInsets margin = EdgeInsets.zero; //上下左右皆为0TestFlowDelegate({this.margin}); //是每一个子控件的margin@overridevoid paintChildren(FlowPaintingContext context) {var x = margin.left;var y = margin.top;var lineH = 0.0;for (int i = 0; i < context.childCount; i++) {var w = x + margin.right + context.getChildSize(i).width;var ch = context.getChildSize(i).height + margin.top + margin.bottom;if (w < context.size.width) {//小于屏幕宽度context.paintChild(i, transform: Matrix4.translationValues(x, y, 0.0));x = w + margin.left;//对比其他整数,0:相同、1:大于、-1:小于if (lineH.compareTo(ch) < 0) {//取行高和子控件高度的较大值为新的行高lineH = ch;}} else {//需要换行x = margin.left;y = y + lineH;context.paintChild(i, transform: Matrix4.translationValues(x, y, 0.0));x = x + context.getChildSize(i).width + margin.right + margin.left;}}}@overridebool shouldRepaint(FlowDelegate oldDelegate) {return oldDelegate != this;}getSize(BoxConstraints constraints) {//指定Flow的大小,高度必须是确定的值,这个大小在绘制之前就会确定,所以不能用子控件的高度和来计算return Size(double.infinity, 280.0);}}

Flutter——实现flow布局,自定义绘制子控件相关推荐

  1. qt 从布局中删除子控件

    一.坑的现象 只是简单的将子控件从父窗口的布局中移除,出现内存泄露 二.遇坑的原因 从布局中移除控件,只是子控件不在布局中显示,子控件的内存实际并未释放 三.正确写法 void deleteItem( ...

  2. Qt自定义/绘制旋钮控件

    Qt中需要自定义/绘制控件时,基本上继承自QWidget,重新实现绘制函数,定义大小,增加相应的信号和槽-- 例子:自定义旋钮控件,通过鼠标控制旋转(可通过Qt的世界变换旋转图形),并在旋转停止时触发 ...

  3. qt整个窗口上绘制矩形与在窗口的子控件上绘制矩形

    引言 创建一个基于QDialog的项目,自动生成ui文件,此时再添加新文件,创建一个基于QWidget的ui类,此类具有自定义标题栏,让该自定义类显示在窗口Dialog上,一开始具有红色的边框线,且四 ...

  4. iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理

    一.主界面横竖屏效果图 二.主界面加载, 初始化Dock(红色框的控件),判断程序启动时的屏幕方向.调用自己- (void)transitionToLandScape:(BOOL)isLandScap ...

  5. Flutter中Row中的子控件左右两端对齐

    Flutter中Row中的子控件左右两端对齐 Container(// padding: EdgeInsets.only(left: 20, right: 20),margin: EdgeInsets ...

  6. WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系

    WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系: 1.Canvas/WrapPanel控件: 其子控件的HorizontalAlign ...

  7. iOS 添加在scrollview的子控件,用masonry布局的问题

    当在scrollview上添加子控件并用masonry布局时,发现运行后不是想要的布局,解决方法是需要添加一个view,上下左右,宽高.都要和scrollview一致.然后再在view上添加子控件即可 ...

  8. 微信小程序 - 音频播放进度条和点击拖动的控制,支持自定义音乐播放控件样式布局(wx.createAudioContext)解决各种 InnerAudioContext.onTimeUpdate不执行

    前言 网上有很多关于 InnerAudioContext.onTimeUpdate 不执行.失效的问题,都导致播放进度条无法做了,本文完美解决. 本文实现了 自定义播放音频控件样式,且支持播放进度条显 ...

  9. C#在控件中绘制矩形、圆、线段等(切换不同的图片,自定义翻页控件,通过委托监控某个字段)

    1.效果展示 2 自定义翻页控件 public partial class PageManagemen : UserControl{/// <summary>/// 当前页(从1开始计数) ...

  10. android 镂空字体下载,Android——自定义镂空掩饰控件

    刚学完ViewDragHelper和PorterDuffXferMode的我,突然想做一个这样效果的自定义控件:点击ListView的列表项,通过ViewDragHelper用动画方式上下各弹出一个控 ...

最新文章

  1. MPB:张云增、王年等-​柑橘根际和根表微生物组样品的收集及核酸提取方法
  2. 每日一博 - 延时任务的多种实现方式解读
  3. 在CENTOS7下安装kubernetes填坑教程(原创)
  4. 笔记-项目沟通管理-沟通表达方式
  5. ise 时钟约束_「新手入门」ISE工程升级到Vivado及板级信号调试技术
  6. P3369-[模板]普通平衡树【有旋Treap】
  7. oracle application r11i,有人在linux 2.1AS下安装过R11i吗?请帮忙解决如下问题
  8. FFmpeg编码详细流程
  9. Python设计模式:策略模式
  10. android绘图软件推荐,动漫绘画辅助软件有哪些-7款绘画软件推荐
  11. 协议——UART(RS232)
  12. MongoVue 使用技巧
  13. matlab入门---数值计算
  14. 2019年电赛H题电磁炮实录
  15. 旅游网页设计 web前端大作业 全球旅游私人订制 旅游公司网站模板(HTML+CSS+JavaScript)
  16. android下拉菜单总结
  17. 小区疫情防控应对策略
  18. 【coq】函数语言设计 练习题inductionlists 总结
  19. 3、Spring Bean生命周期
  20. 随机生成汉字(随机点名册)

热门文章

  1. Nik Collection v3.0.7 2020 Mac/Win PS/LR超强调色滤镜合集Nik插件中文版+中文教程
  2. 服务器装系统报0x0000005d,虚拟机不能安装Win10系统,提示your PC needs to restart,错误代码0x0000005D该怎么办-电脑自学网...
  3. 前端开发思路-1.1
  4. 数字贸易标准体系框架
  5. TeamViewer 免费许可到期的解决办法
  6. 超详细的CMD文件讲解(DSP28035)
  7. 【渗透测试笔记】之【Cobalt Strike小技巧——后台挂起CS服务端】
  8. dede 表单必填_织梦给自定义表单增加必填功能,织梦表单必填设置
  9. java horizontalbarchart_DOC-03-36 柱状图(Bar Chart)
  10. 如何更换和删除微软雅黑字体