1. Paddiing 组件

在 html 中常见的布局标签都可以使用 padding 属性,但是 Flutter 中很多 Widget 是没有 padding 属 性,这个时候我们可以用 Padding 组件处理容器与子元素直接的间距。

常见属性:

1. padding 内边距值;

2. child 子组件;

代码示例:

import 'package:flutter/material.dart';void main(){runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 导航条appBar:AppBar(title:Text('Flutter App')),// 主体body:HomeContent(),),theme: ThemeData(primarySwatch:Colors.yellow),);}
}// Padding内边距的使用
class HomeContent extends StatelessWidget{@overrideWidget build(BuildContext context) {return  Padding(// 给整个容器右边添加内边距padding: EdgeInsets.fromLTRB(0,0,10,0),child: GridView.count(// 定义一行几列crossAxisCount:2,// 长宽比例childAspectRatio:1.7,children:<Widget>[Padding(// 定义左、上内边距padding: EdgeInsets.fromLTRB(10, 10, 0, 0),// 子元素child: Image.network("http://www.itying.com/images/flutter/1.png",fit: BoxFit.cover)),Padding(padding: EdgeInsets.fromLTRB(10, 10, 0, 0),child: Image.network("http://www.itying.com/images/flutter/2.png",fit: BoxFit.cover)),Padding(padding: EdgeInsets.fromLTRB(10, 10, 0, 0),child: Image.network("http://www.itying.com/images/flutter/3.png",fit: BoxFit.cover)),Padding(padding: EdgeInsets.fromLTRB(10, 10, 0, 0),child: Image.network("http://www.itying.com/images/flutter/4.png",fit: BoxFit.cover)),Padding(padding: EdgeInsets.fromLTRB(10, 10, 0, 0),child: Image.network("http://www.itying.com/images/flutter/3.png",fit: BoxFit.cover)),Padding(padding: EdgeInsets.fromLTRB(10, 10, 0, 0),child: Image.network("http://www.itying.com/images/flutter/2.png",fit: BoxFit.cover)),Padding(padding: EdgeInsets.fromLTRB(10, 10, 0, 0),child: Image.network("http://www.itying.com/images/flutter/1.png",fit: BoxFit.cover)),Padding(padding: EdgeInsets.fromLTRB(10, 10, 0, 0),child: Image.network("http://www.itying.com/images/flutter/4.png",fit: BoxFit.cover))],));}
}

效果图如下:

需要注意的是,以上图片的间隙由内外两层内边距组合使用而得出来的。

2. Row 组件

Row 组件主要用于需要水平布局的情况。

常见属性:

1. mainAxisAlignment 主轴的组件对齐方式;

2. crossAxisAlignment 次轴的组件对齐方式;

3. children 组件子元素;

代码示例:

import 'package:flutter/material.dart';void main(){runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 导航条appBar:AppBar(title:Text('Flutter App')),// 主体body:HomeContent(),),theme: ThemeData(primarySwatch:Colors.yellow),);}
}
// Row水平布局组件的使用
class HomeContent extends StatelessWidget{@overrideWidget build(BuildContext context) {return Container(// 宽度width:500,// 高度height:500,// 背景颜色color:Colors.red,// 水平布局组件child: Row(// 定义水平对齐的方式,类似于CSS里的flex-decrationmainAxisAlignment: MainAxisAlignment.spaceEvenly,// 定义元素相对父容器的垂直对齐方式crossAxisAlignment: CrossAxisAlignment.center,// 子元素children: <Widget>[// 调用自定义的图标组件传参IconContainer(Icons.search,color:Colors.black,size:40.0),IconContainer(Icons.home,color:Colors.green,size:40.0),IconContainer(Icons.select_all,color:Colors.blue,size:40.0)],));}
}// 定义传入图标的类
class IconContainer extends StatelessWidget{double size = 32.0;Color color = Colors.red;IconData icon;// 构造函数IconContainer(this.icon,{this.color,this.size});@overrideWidget build(BuildContext context) {return Container(// 宽度height:100.0,// 高度width:100.0,// 背景颜色color:this.color,// 子元素child:Center(child: Icon(this.icon,size:this.size,color:Colors.white)));}
}

效果图如下:

3. Column组件

Column 组件主要用于需要垂直布局的情况。

常见属性:

1. mainAxisAlignment 主轴的组件对齐方式;

2. crossAxisAlignment 次轴的组件对齐方式;

3. children 组件子元素;

代码示例:

import 'package:flutter/material.dart';void main(){runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 导航条appBar:AppBar(title:Text('Flutter App')),// 主体body:HomeContent(),),// 主题theme: ThemeData(primarySwatch:Colors.yellow),);}
}// Column垂直布局组件的使用
class HomeContent extends StatelessWidget{@overrideWidget build(BuildContext context) {return Container(// 宽度width:500,// 高度height:500,// 背景颜色color:Colors.red,// 垂直布局组件child: Column(// 定义垂直对齐的方式,类似于CSS里的flex-decrationmainAxisAlignment: MainAxisAlignment.spaceEvenly,// 定义元素相对父容器的水平对齐方式crossAxisAlignment: CrossAxisAlignment.center,// 子元素children: <Widget>[// 调用自定义的图标组件传参IconContainer(Icons.search,color:Colors.black,size:40.0),IconContainer(Icons.home,color:Colors.green,size:40.0),IconContainer(Icons.select_all,color:Colors.blue,size:40.0)],));}
}

效果图如下:

4. Expanded组件

Expanded 类似 Web 开发中的Flex布局,可以用在 Row 和 Column 布局中以定义该子组件所占的百分比。

常见属性:

1. flex 子组件占整个父组件比例;

2. child 子组件;

代码示例:

import 'package:flutter/material.dart';void main(){runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 导航条appBar:AppBar(title:Text('Flutter App')),// 主体body:HomeContent(),),// 主题theme: ThemeData(primarySwatch:Colors.yellow),);}
}// Expanded组件的使用,定义一行中每个元素的百分比
class HomeContent extends StatelessWidget{@overrideWidget build(BuildContext context) {return  Row(// 子元素children: <Widget>[Expanded(flex:1,child:IconContainer(Icons.search,color:Colors.red,size:40.0),), Expanded(flex:2,child:IconContainer(Icons.home,color:Colors.black,size:40.0),),Expanded(flex:1,child:IconContainer(Icons.select_all,color:Colors.green,size:40.0),),],);}
}// 定义传入图标的类
class IconContainer extends StatelessWidget{double size = 32.0;Color color = Colors.red;IconData icon;// 构造函数IconContainer(this.icon,{this.color,this.size});@overrideWidget build(BuildContext context) {return Container(// 宽度height:100.0,// 高度width:100.0,// 背景颜色color:this.color,// 子元素child:Center(child: Icon(this.icon,size:this.size,color:Colors.white)));}
}

效果图如下:

利用Expanded实现一个左侧固定,右侧自适应的布局。

import 'package:flutter/material.dart';void main(){runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 导航条appBar:AppBar(title:Text('Flutter App')),// 主体body:HomeContent(),),// 主题theme: ThemeData(primarySwatch:Colors.yellow),);}
}
// Expanded组件实现左侧固定宽度,右侧自适应的布局
class HomeContent extends StatelessWidget{@overrideWidget build(BuildContext context) {return  Row(// 子元素children: <Widget>[// 左侧组件固定宽度IconContainer(Icons.search,color:Colors.red,size:40.0),// 右侧组件自适应Expanded(// 自适应时值为1即可flex:1,child:IconContainer(Icons.select_all,color:Colors.green,size:40.0),),],);}
}// 定义传入图标的类
class IconContainer extends StatelessWidget{double size = 32.0;Color color = Colors.red;IconData icon;// 构造函数IconContainer(this.icon,{this.color,this.size});@overrideWidget build(BuildContext context) {return Container(// 宽度height:100.0,// 高度width:100.0,// 背景颜色color:this.color,// 子元素child:Center(child: Icon(this.icon,size:this.size,color:Colors.white)));}
}

效果图如下:

5. 布局实例

实现下图的布局:

代码如下:

import 'package:flutter/material.dart';void main(){runApp(MyApp());
}
// 抽离成一个单独的组件
class MyApp extends StatelessWidget{@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(// 导航条appBar:AppBar(title:Text('Flutter App')),// 主体body:HomeContent(),),// 主题theme: ThemeData(primarySwatch:Colors.yellow),);}
}// 布局实例
class HomeContent extends StatelessWidget{@overrideWidget build(BuildContext context) {return Column(children: <Widget>[Row(children: <Widget>[Expanded(child:Container(height:180,color:Colors.black,child: Text('你好,Flutter'),),)],),SizedBox(height:10),Row(children: <Widget>[Expanded(flex: 2,child:Container(height:180,child:Image.network("http://www.itying.com/images/flutter/1.png",fit:BoxFit.cover)) ),SizedBox(width:10),Expanded(flex:1,child:Container(height:180,child:ListView(children: <Widget>[Container(height:85,child:Image.network("http://www.itying.com/images/flutter/1.png",fit:BoxFit.cover)),SizedBox(height:10),Container(height:85,child:Image.network("http://www.itying.com/images/flutter/2.png",fit:BoxFit.cover))], )))],)],);}
}

Flutter中Padding、Row 、Column 、Expanded 组件详解相关推荐

  1. Flutter学习笔记08-Padding Row Column Flex Expanded组件详解

    学习视频地址:https://www.bilibili.com/video/BV1S4411E7LY?p=27&spm_id_from=pageDriver&vd_source=cee ...

  2. Flutter中的多选按钮组件Checkbox

    Flutter 中的多选按钮组件有两种. 1. Checkbox 多选按钮,一般用来表现一些简单的信息. 常用属性如下: 1. value  多选的值: 2. onChanged 选择改变触发的事件: ...

  3. java jtable组件_java中jtable组件详解实例

    java中jtable组件详解实例 java 表格控件 JTable 常用操作详解 JTable 是 Swing 编程中很常用的控件,这里总结了一些常用方法以备查阅.欢迎补充,转载请注明作者与出处.一 ...

  4. 如何在你的 Flutter 中使用 input chip 标签组件

    lang: zh-CN title: 如何在你的 Flutter 中使用 input chip 标签组件 description: 译文 如何在你的 Flutter 中使用 input chip 标签 ...

  5. 学习笔记-Flutter 布局(二)- Padding、Align、Center详解

    Flutter 布局(二)- Padding.Align.Center详解 本文主要介绍Flutter布局中的Padding.Align以及Center控件,详细介绍了其布局行为以及使用场景,并对源码 ...

  6. Android中的四大组件详解

    Android中的四大组件详解 我们都知道Android系统应用层框架中,为开发者提供了四大组件来便于应用的开发,它们是Activity.Service.BroadcastReceiver.Conte ...

  7. Tkinter 组件详解(七):Entry

    Tkinter 组件详解之Entry Entry(输入框)组件通常用于获取用户的输入文本. 何时使用 Entry 组件? Entry 组件仅允许用于输入一行文本,如果用于输入的字符串长度比该组件可显示 ...

  8. ReactNative ViewPageAndroid组件详解

    源码传送门 在我们开发Android的时候,ViewPage这个控件的使用频率还是很高的,最简单的就是制作引导页,应用程序的主界面等,在ReactNative开发中实现该功能的组件是ViewPageA ...

  9. vue ajax highcharts,在vue项目中引入highcharts图表的方法(详解)

    npm进行highchars的导入,导入完成后就可以进行highchars的可视化组件开发了 npm install highcharts --save 1.components目录下新建一个char ...

最新文章

  1. 【剑指offer-Java版】33把数组排成最小的数
  2. Web应用扫描工具Wapiti
  3. oracle 快速上手,Oracle学习笔记:快速上手
  4. 课后作业:情境二:数据类型与运算符 3、运算符及表达式
  5. [摘自MSDN] ASP.Net2.0学习 [2] 主题 1 :ASP.NET 主题和外观概述
  6. 六步实现Spring.NET 与 NHibernate 的整合
  7. Linux /proc目录详解
  8. 如何开始ChickTech章节
  9. windbg远程调试方法
  10. python glob模块
  11. HART协议学习记录
  12. 【STM32】MDK(keil5)编译后Program Size: Code=5230 RO-data=346 RW-data=52 ZI-data=1845代表什么意思--STM32选型
  13. html化妆品商城设计,基于HTML5的彩妆购物网站设计任务书
  14. linux安装frps服务,Debian手动搭建frps服务端
  15. 【五一劳动节收尾-假日结束】
  16. RRC连接、RL、RB、RAB的本质是什么?
  17. windows验证和SQLSERVER验证有什么区别?--混合认证
  18. 据说,年薪百万的程序员,都是这么开悟的
  19. 《热尼亚·鲁勉采娃》 作者:尤里·纳吉宾 推荐者:路遥
  20. 「网络流 24 题」孤岛营救问题

热门文章

  1. 缓存雪崩问题及处理方案
  2. matlab imfilter函数图像(二维) opencv C++实现
  3. win server 无法使用网络共享 0x80070035 0x80004005
  4. ttttttttttttt
  5. C/C++之strtol函数详解
  6. 10分钟阅读一篇关于Vue-cli3和Element-UI的文章
  7. 一文看懂页面置换算法
  8. 《看穿一切数字的统计学-西内启著(日)》
  9. AndroidStudio出现tools:replace=android: authorities,tools:replace=android:resource
  10. 使用VS2013做简单的C程序解析