container概述

Container是一个非常常用的容器组件,它包含了常规的Padding、BoxDecoration、DecorationImage、Border、BoxShaow、transform等等一系列Widgets。

构造函数

Container({Key key,this.alignment,this.padding,Color color,Decoration decoration,this.foregroundDecoration,double width,double height,BoxConstraints constraints,this.margin,this.transform,this.child,})
复制代码
  • alignment child的对齐方式 Alignment(0.0,0.0)表示矩形的中心。从-1.0到+1.0的距离是矩形的一边到另一边的距离。因此,2.0单位水平(或垂直)等于矩形的宽度(或高度)。
  • padding 在容器内填充,填充物为child 和alignment对齐会有冲突,但是最终还是padding主导 可以上下左右都可以填充 symmetric 垂直或水平的填充, only 填充一个方向
  • color 容器背景颜色 此处是 decoration: new BoxDecoration(color: color) 简写,即不能同时decoration和color使用,冲突时当然是将color放在Boxdecoration中设置执行

  • decoration 由此类提供所有装饰的抽象接口定义,可以使用boxDEcoration,其提供了多种装饰能力

boxDecoration 构造函数

const BoxDecoration({this.color,this.image,this.border,this.borderRadius,this.boxShadow,this.gradient,this.backgroundBlendMode,this.shape = BoxShape.rectangle,})
复制代码
  • color 背景颜色

  • image 背景图片 使用DecorationImage定义:
DecorationImage构造函数
 const DecorationImage({@required this.image,this.colorFilter,this.fit,this.alignment = Alignment.center,this.centerSlice,this.repeat = ImageRepeat.noRepeat,this.matchTextDirection = false,})
复制代码

  • image 即图片源,可使用的子类: AssetBundleImageProvider FileImage MemoryImage NetworkImage 此处选择网络图片
NetworkImage构造函数
const NetworkImage(this.url, { this.scale = 1.0 , this.headers })
复制代码
  • url 即网络图片地址
  • scale 图像比例,数值越大图片比例越小
  • headrs 请求图像的头信息

  • colorFilter 彩色滤镜
  • fit 怎么将图像填充到容器中 比如contain 尽可能大,但将图像完全包含在目标框中
  • alignment 在范围对图像进行对齐操作
  • repeat 图片重复的方向,repeat 即x 轴和y 轴都重复 然后 repeatX 即在X方向重复
  • matchTextDirection 是否在 TextDirection 方向绘图
  • border Border可以独立绘制上下左右独立边框的颜色,宽度等 当然也可以使用封装好的比如 all,直接绘制边框
  • borderRadius 圆角的绘制

  • boxShadow 盒子的阴影列表,形状随盒子而变 BoxShadow定义

BoxShadow构造函数

const BoxShadow({Color color = const Color(0xFF000000),Offset offset = Offset.zero,double blurRadius = 0.0,this.spreadRadius = 0.0
复制代码
  • color 阴影颜色
  • offset 阴影的相对盒子的偏移量
  • blueRadius 阴影的模糊程度
  • spreadRadius 类似阴影的膨胀程度,可以理解为阴影的大小

  • gradient 渐变类,一般使用 LinearGradient

LinearGradient构造函数

const LinearGradient({this.begin = Alignment.centerLeft,this.end = Alignment.centerRight,@required List<Color> colors,List<double> stops,this.tileMode = TileMode.clamp,})
复制代码
  • begin 渐变量开始的位置
  • end 渐变量结束的位置
  • colors 渐变的基色
  • tileMode 定义渐变梯度的边缘 对比image的repeat

  • shape 形状
  • foregroundDecoration 前景装饰
  • width 宽度
  • height 高度

  • constraints 限制容器大小 一般使用BoxConstraints

BoxConstraints构造函数

const BoxConstraints({this.minWidth = 0.0,this.maxWidth = double.infinity,this.minHeight = 0.0,this.maxHeight = double.infinity});
复制代码
  • minWidth 最小宽度
  • maxWidth 最大宽度
  • minHeight 最小高度
  • maxHeight 最大高度

  • margin 容器外填充
  • transform 对容器实现矩阵变换操作
  • child 子组件

实例构造及注释详解

下面实现了一个倾斜的全面屏手机任务运行界面:

// container 详解学习import 'package:flutter/material.dart';
class ContainerLearn extends StatelessWidget {final _textStyle = TextStyle(color: Colors.white,fontSize: 20,letterSpacing: 4,wordSpacing: 4,shadows: [Shadow(color: Colors.black87, offset: Offset(5, 5), blurRadius: 8)]);@overrideWidget build(BuildContext context) {return new Scaffold(appBar: AppBar(title: Text('Container'),),// 一个方便的小部件,它组合了常见的绘画、定位和大小小部件。body: new Container(// 控制容器中child的位置,可以输入坐标参数,也可以设置预先设定的坐标位置// Aliment(0.0,0.0)表示矩形的中心。从-1.0到+1.0的距离是矩形的一边到另一边的距离。因此,2.0单位水平(或垂直)等于矩形的宽度(或高度)。alignment: Alignment(0, 1),// 在容器内填充,填充物为child  和alignment对齐会有冲突,但是最终还是padding主导 可以上下左右都可以填充  symmetric 垂直或水平的填充, only 填充一个方向padding: EdgeInsets.symmetric(vertical: 60, horizontal: 75),// 容器背景颜色 此处是 decoration: new BoxDecoration(color: color) 简写,即不能同时decoration和color使用,冲突时当然是将color放在Boxdecoration中设置执行// color: Colors.blueAccent,// 由此类提供所有装饰的抽象接口定义,可以使用boxDEcoration,其提供了多种装饰能力decoration: BoxDecoration(// 背景颜色color: Colors.blueAccent,// 背景图像image: DecorationImage(// 可使用的子类: AssetBundleImageProvider FileImage MemoryImage NetworkImageimage: NetworkImage('https://flutter.cn/assets/get-started/ios/hello-world-ed7cf47213953bfca5eaa74fba63a78538d782f2c63a7c575068f3c2f7298bde.png',// 图像比例,数值越大图片比例越小scale: 3.0,// 请求图像的头信息headers: {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}),// 彩色滤镜,此处为覆盖一个black12滤镜colorFilter:ColorFilter.mode(Colors.black12, BlendMode.srcOver),// 怎么将图像填充到容器中 比如contain 尽可能大,但将图像完全包含在目标框中fit: BoxFit.none,// 在范围对图像进行对齐操作alignment: Alignment.center,// 对于可拉伸图片的切片操作? 不是很懂// centerSlice: Rect.fromLTRB(3,3,3,3)// 图重复的方向,repeat 即x 轴和y 轴都重复 然后 repeatX 即在X方向重复repeat: ImageRepeat.repeatX,// 是否在 TextDirection 方向绘图matchTextDirection: false),// 边框 BoxDecoration 抽象类   使用子类有 Border BorderDirectional// Border可以独立绘制上下左右独立边框的颜色,宽度等 当然也可以使用封装好的比如 all,直接绘制边框border: Border.all(color: Colors.black87,width: 2.0,// 边框样式style: BorderStyle.solid),// 圆角borderRadius: BorderRadius.circular(30),// 盒子的阴影列表,形状随盒子而变boxShadow: <BoxShadow>[BoxShadow(// color 阴影颜色   offset 阴影的相对盒子的偏移量,   blueRadius 阴影的模糊程度   spreadRadius 类似阴影的膨胀程度,可以理解为阴影的大小color: Colors.black45,offset: Offset(8, 8),blurRadius: 7,spreadRadius: 7)],// Gradient 抽象类定义 渐变类 LinearGradientgradient: LinearGradient(// 渐变偏移量开始的位置begin: Alignment(-1, 0),// 渐变偏移结束的位置end: Alignment(1, 0),// 绘制的基色colors: <Color>[Colors.purple, Colors.blue[900]],// 创建一个线性梯度 0~1.0 这个不懂// stops: <double>[0.6],// 定义渐变梯度的边缘 对比image的repeattileMode: TileMode.clamp),// 形状shape: BoxShape.rectangle),// 前景装饰foregroundDecoration: BoxDecoration(),// 长度width: 224,// 高度height: 486,// 限制容器大小constraints: BoxConstraints(// 设置宽度尽可能大// minWidth: double.infinity,// 最小高度20minHeight: 20,// 最大宽度 300maxWidth: 300,),// 容器外填充margin: EdgeInsets.symmetric(vertical: 20, horizontal: 0),// 对容器实现矩阵变换操作,Matrix是一个4D矩阵transform: Matrix4.skewY(0.3)..rotateZ(-3.14 / 12.0),child: Icon(Icons.close,color: Colors.white70,semanticLabel: 'Close',)),);}
}复制代码

构造效果

转载于:https://juejin.im/post/5cc06d666fb9a031ed20bcde

Flutter 基础Widgets之容器Container详解相关推荐

  1. Flutter 基础Widgets Text()之TextStyle详解

    Text概述 即一个单一样式的文本 Text Widget就是显示单一样式的文本字符串.字符串可能会跨越多行,也可能全部显示在同一行上,具体取决于布局约束. style参数可选.如果省略了,文本将使用 ...

  2. docker 容器 exited_Docker实战006:docker容器使用详解

    Docker容器也是docker的核心成员,是docker镜像的一个运行实例.一个镜像可以创建多个容器,多个容器也可以在同一台机器上运行并与其他容器共享操作系统内核同时将应用程序与系统其它周围环境隔离 ...

  3. Day 92 : Docker容器技术详解

    Docker容器技术详解 Docker是基于Go语言开发的开源应用容器引擎,遵从Apache Licence 2.0协议,可以让开发者打包应用以及应用的依赖包到一个可移植的容器中,然后发布到各种发行版 ...

  4. 关于计算机应用基础问题,《计算机应用基础》习题及问题详解

    <计算机应用基础>习题及问题详解 (17页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实用文档第一章 计算机基础知识填空题 ...

  5. Flutter中Scaffold布局的使用详解及实例代码

    Flutter中Scaffold布局的使用详解及实例代码 Scaffold实现了基本的Material布局.只要是在Material中定义了的单个界面显示的布局控件元素,都可以使用Scaffold来绘 ...

  6. [Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. 前端基础-HTML的的标签详解

    阅读目录 一.head内常用标签 二. HTML语义化 三. 字符实体 四. h系列标签 五. p标签 六. img标签 七. a标签 八. 列表标签 九. table标签 十. form标签 一. ...

  8. Buffer(缓冲/字节容器)详解

    本文来说下Buffer(缓冲/字节容器)详解 文章目录 概述 Buffer API ByteBuf - Netty 字节数据的容器 ByteBuf如何工作 ByteBuf 使用模式 HEAP BUFF ...

  9. get方法报空指针_C++基础教程之指针拷贝详解

    C++基础教程之指针拷贝详解 指针是编程人员的梦魇,对C语言的开发者是如此,对C++的开发者也是如此.特别是在C++中,如果不注意处理类中的指针,非常容易出问题.如果朋友们不相信可以看看下面的代码: ...

  10. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

最新文章

  1. 微软Hololens设备 浅分析
  2. 如何配置Microsoft LoopBack Adapter 配置为系统的主网络适配器
  3. Google发布新API,支持训练更小、更快的AI模型
  4. android r.java 原理,深入理解Android消息处理系统原理
  5. 红米ac2100breed看模块_骁龙865加持,红米K30S至尊纪念版11日再开售
  6. 服务器mysql显示链接次数太多,服务器mysql显示链接次数太多
  7. 残疾人软件开发_组织如何使残疾人更具包容性
  8. mysql设置user权限允许远程_mysql 用户及权限管理 允许远程连接
  9. 【转】boost 库后缀名
  10. 【Vue】—数据的双向绑定v-model
  11. 1342.将数字变成0的操作次数
  12. Ubuntu gitweb 安装配置
  13. 从Visual SourceSafe (VSS)服务器下载文件(C#)
  14. 微博相册下载助手v7.2 微博图片批量下载神器
  15. 2020年最全最好用的在线文档盘点,建议收藏
  16. 分布式的十个大坑,我们都别再踩了
  17. html效果浮窗效果,网页浮窗成效
  18. 用户故事拆分方法总结
  19. 开放集识别之GPD and GEV Classi ers
  20. 牛血清白蛋白BSA:蛋白定量检测标准品

热门文章

  1. [bzoj1033] [ZJOI2008]杀蚂蚁 Big MoNI
  2. 常见批处理作业调度算法
  3. bootstrap table 服务器端分页--ashx+ajax
  4. 早该知道的 7 个JavaScript 技巧[转]
  5. C#总结项目《影院售票系统》编写总结一
  6. Swift-函数学习
  7. 推荐的C++书籍以及阅读顺序
  8. luogu1140相似基因
  9. vue____后台管理系统搭建(推荐,懒得自己写了)
  10. zbb20170919 设置eclipse myeclipse 在工程窗口 项目目录 显示代码错误提示的