flutter2:Container的简介与尺寸

1.Container简介

Container是一种Widget,同时Container就是用来包裹其他Widget然后给他们设置效果的,例如padding,margin,border,background这些东西(当然用的时候不是我这里直接说的这些属性名)

2.Container的尺寸

1.影响因素

目前我学到的是三项:约束、尺寸、子Widget

他们的作用效果也是:约束>尺寸>子Widget

总体影响效果:(下面涉及到了约束是什么这件事,在后文会有提及)

复制代码
默认情况下:只要没约束没尺寸就是尽可能小
有了子View: 尽可能小然后按照尺寸和约束调节
在约束眼中,子Widget和尺寸是一样的,如果有他们,就先按他们来,然后再给他们进行约束限制,如果没有他们,对于没有约束最大的属性就会matchParent

2.先说Constraint这个东西吧

他是个约束,简单来说就是表示minWidth,minHeight,maxWidth,maxHeight的一个类,对于Container这个小部件而言,约束在设置的时候是设置的它自身这个小部件的最大最小宽高。

1.约束方法

1.直接设置最大最小宽高

BoxConstraints(minHeight: 120,maxHeight: 120,minWidth: 120,maxWidth: 120)

2.用现有的BoxConstraints的方法简单设置

  1. BoxConstraints.loose(Size size)
  2. BoxConstraints.expand({double? width, double? height})
  3. BoxConstraints.fromViewConstraints(ui.ViewConstraints constraints)
  4. BoxConstraints.tight(Size size)
  5. BoxConstraints.tightFor({double? width, double? height})
  6. BoxConstraints.tightForFinite({ double width = double.infinity, double height = double.infinity, })

2.现成的这几个方法的作用

  1. loose:仅约束最大尺寸

  2. expand:未指定的维度必须填满父容器空间

  3. fromViewConstraints:将平台原生视图约束转换为BoxConstraints

  4. tight:严格固定为精确尺寸

  5. tightFor:可选择性固定某些维度,未指定的维度自由

  6. tightForFinite:只对有限数值严格固定,∞值视为未指定

3.demo代码

Dart 复制代码
// 无子无约束无尺寸不显示
class LearnContainers extends StatelessWidget {
  const LearnContainers({super.key});

  @override
  Widget build(BuildContext context) => Container(color: Colors.blue);
}
// 有子无约束无尺寸,wrapContent
class LearnChildContainers extends StatelessWidget {
  const LearnChildContainers({super.key});

  @override
  Widget build(BuildContext context) =>
      Container(color: Colors.blue, child: Text("有子Widget的Container"));
}
// 无子有约束,先mathParent,然后根据约束再更改尺寸
class LearnWithConstraintContainers extends StatelessWidget {
  const LearnWithConstraintContainers({super.key});

  @override
  Widget build(BuildContext context) => Container(
    color: Colors.blue,
    constraints: BoxConstraints(
      minWidth: 100,
      minHeight: 100,
      maxWidth: 100,
      maxHeight: 100,
    ),
  );
}
// 有子有约束,先wrapContent,然后根据约束再更改尺寸
class LearnChildWithConstraintContainers extends StatelessWidget {
  const LearnChildWithConstraintContainers({super.key});

  @override
  Widget build(BuildContext context) => Container(
    color: Colors.blue,
    constraints: BoxConstraints(minWidth: 100, minHeight: 100),
    child: Text("有子Widget有约束的Container"),
  );
}
// 有子有尺寸,按尺寸来
class LearnChildWithSizedContainers extends StatelessWidget {
  const LearnChildWithSizedContainers({super.key});

  @override
  Widget build(BuildContext context) => Container(
    color: Colors.blue,
    width: 100,
    height: 100,
    child: Text("有子Widget有尺寸的Container"),
  );
}
// 有子有尺寸有约束,先按尺寸来,然后根据约束更改尺寸
class LearnChildWithSizedAndConstraintContainers extends StatelessWidget {
  const LearnChildWithSizedAndConstraintContainers({super.key});
  @override
  Widget build(BuildContext context) => Container(
    color: Colors.blue,
    width: 100,
    height: 100,
    constraints: BoxConstraints(minWidth: 120, minHeight: 120),
    child: Text("有子有尺寸有约束的Container"),
  );
}
// 无子有尺寸有约束,先按尺寸来,然后根据约束更改尺寸
class LearnWithSizedAndConstraintNotContainers extends StatelessWidget {
  const LearnWithSizedAndConstraintNotContainers({super.key});
  @override
  Widget build(BuildContext context) => Container(
    color: Colors.blue,
    width: 100,
    height: 100,
    constraints: BoxConstraints(minWidth: 120, minHeight: 120),
  );
}
相关推荐
AI多Agent协作实战派9 小时前
AI多Agent协作系统实战(二十二):从6列到12列——任务监控报告的进化之路
java·人工智能·uni-app·bug
太平洋月光10 小时前
AI 快捷指令:Cursor Rules · Commands · Skills
前端·ai编程
默_笙10 小时前
😁 LLM 不知道的事它不会说"不知道",而是会"编"——RAG 就是让它闭嘴先查资料
前端·javascript
千桐科技10 小时前
DataX 执行引擎正式加入:qData 开源版 v1.6.0 新增 Quartz + DataX 轻量运行模式!
java·大数据·开源·数据治理·数据中台·qdata
stringwu10 小时前
用 LangGraph 落地飞书 Bug 自动修复 Agent 实践
前端
Revolution6110 小时前
变量提升到底提升了什么:为什么 var 是 undefined,let 却直接报错
前端·javascript
ShirleyWang01210 小时前
Day02 K3s NGF(Nginx Gateway Fabric)单 Worker 环境网关更新与故障处置 SOP
linux·服务器·python·k8s·k3s
Revolution6110 小时前
本地明明正常,为什么 CI 又挂了:一次前端构建失败的排查过程
前端·前端工程化
Irene199110 小时前
Oracle PL/SQL Developer 版本差异(11g、14)实战总结
java·开发语言
AI人工智能+电脑小能手10 小时前
【大白话说Java面试题 第191题】【08_Kafka篇】第7题:消息队列的优缺点
java·消息队列·系统设计·分布式架构·技术选型