Flutter中Contrainer 组件的宽高限制分析

简介: 在 Flutter 应用程序开发中,Contrainer组件可以理解为容器,常用用来设置背景、设置一个 Widget 的内外边距、以及边框样式等等。

题记
—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。

** 你可能需要
CSDN 网易云课堂教程
掘金 EDU学院教程
知乎 Flutter系列文章
头条同步 百度同步

本文章首发于微信公众号(biglead) 我的大前端生涯 ,同步刊登各技术论坛。


1 Contrainer 组件

在 flutter 应用程序开发中,Contrainer组件可以理解为容器,常用用来设置背景、设置一个 Widget 的内外边距、以及边框样式等等。

2 Contrainer 组件的基本使用以及大小限定分析

Contrainer 组件的大小限定可以描述为:

  • 当 Contrainer 组件的父布局设置了大小,那么 Contrainer 将使用父布局的大小设置,
  • 如果 父布局没有设置大小 ,自身设置了大小,那么 Contrainer 将使用自身设置的大小,
  • 如果 自身没有设置大小,那么 Contrainer 将包裹子 Widget 或者说是将使用子Widget 的大小设置

在这里插入图片描述
在这里 黄色的 Contrainer 与 灰色的 Contrainer 的大小完全一至,而灰色的 Contrainer 的大小是由父黄色的Contrainer设置的大小(200,200)决定的, 自身设置的(100,100),并没有起到影响, 子Widged SizedBox 设置的大小(50,50)也没有影响 父组件 灰色的 Contrainer 的大小。

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class ContainerHomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return ContainerHomePageState();
  }
}

class ContainerHomePageState extends State {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
        title: Text("Container 配制"),
      ),
      body: Center(
        ///内三组件
        child: Container(
          ///Container 默认包裹子widget (没任何内外大小的限制 )
          ///Container的背景颜色
          width: 200,
          height: 200,
          ///黄色
          color: Colors.yellow,
          ///当Container 的外层有大小限制进 Container取用的是外层设置的大小
          ///内二组件
          child: Container(
              ///灰色
            color: Colors.grey,
            width: 100,
            height: 100,
            ///内一组件
            child: SizedBox(
              width: 50,
              height: 50,
              child: Text("这里是body "),
            ),
          ),
        ),
      ),
    );
  }
}

Container 的大小由子 自身设置 的情况分析

在这里插入图片描述
在这里 黄色的 Contrainer 与 灰色的 Contrainer 的大小完全一至,而灰色的 Contrainer 的大小是由自身设置的大小(100,100)决定的, 子Widged SizedBox 设置的大小(50,50)将没有影响 父组件 灰色的 Contrainer 的大小。

class ContainerHomePageState extends State {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
        title: Text("Container 配制"),
      ),
      body: Center(
        ///内三组件
        child: Container(
          ///Container 默认包裹子widget (没任何内外大小的限制 )
          ///Container的背景颜色
//          width: 200,
//          height: 200,
          color: Colors.yellow,
          ///当Container 的外层有大小限制进 Container取用的是外层设置的大小
          ///内二组件
          child: Container(
            color: Colors.grey,
            width: 100,
            height: 100,
            ///内一组件
            child: SizedBox(
              width: 50,
              height: 50,
              child: Text("这里是body "),
            ),
          ),
        ),
      ),
    );
  }
}

Container 的大小由子 Widget 决定 的情况分析

如图所示
在这里插入图片描述
黄色的 Contrainer 与 灰色的 Contrainer 的大小完全一至,而灰色的 Contrainer 的大小是由子Widged SizedBox 设置的大小(50,50)决定的


class ContainerHomePageState extends State {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: new AppBar(
        title: Text("Container 配制"),
      ),
      body: Center(
        ///内三组件
        child: Container(
          ///Container 默认包裹子widget (没任何内外大小的限制 )
          ///Container的背景颜色
//          width: 200,
//          height: 200,
          color: Colors.yellow,
          ///当Container 的外层有大小限制进 Container取用的是外层设置的大小
          ///内二组件
          child: Container(
            color: Colors.grey,
//            width: 100,
//            height: 100,
            ///内一组件
            child: SizedBox(
              width: 50,
              height: 50,
              child: Text("这里是body "),
            ),
          ),
        ),
      ),
    );
  }
}

公众号 我的大前端生涯

相关文章
|
3月前
|
传感器 缓存 监控
Stream 组件在 Flutter 中的应用场景有哪些?
Stream 组件在 Flutter 中的应用场景有哪些?
182 58
|
3月前
|
UED 开发者
Flutter|常用数据通信组件
Flutter|常用数据通信组件
104 49
|
2月前
|
前端开发 JavaScript Android开发
Flutter 与 React Native - 详细深入对比分析(2024 年)
Flutter和React Native是两大跨平台框架,各有优缺点。Flutter性能优越,UI灵活,使用Dart;React Native生态广泛,适合JavaScript开发。
421 5
Flutter 与 React Native - 详细深入对比分析(2024 年)
|
29天前
Flutter 自定义组件继承与调用的高级使用方式
本文深入探讨了 Flutter 中自定义组件的高级使用方式,包括创建基本自定义组件、继承现有组件、使用 Mixins 和组合模式等。通过这些方法,您可以构建灵活、可重用且易于维护的 UI 组件,从而提升开发效率和代码质量。
124 1
|
29天前
|
开发工具 UED
Flutter&鸿蒙next中封装一个输入框组件
本文介绍了如何创建一个简单的Flutter播客应用。首先,通过`flutter create`命令创建项目;接着,在`lib`目录下封装一个自定义输入框组件`CustomInput`;然后,在主应用文件`main.dart`中使用该输入框组件,实现简单的UI布局和功能;最后,通过`flutter run`启动应用。本文还提供了后续扩展建议,如状态管理、网络请求和UI优化。
100 1
|
3月前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析
179 60
|
1月前
|
Dart UED
Flutter用户交互组件
Flutter用户交互组件
24 2
|
2月前
|
存储 开发框架 开发者
flutter:代码存储&基本组件 (五)
本文档介绍了Flutter中的一些基本组件和代码示例,包括代码存储、基本组件如AppBar的简单使用、可滑动切换的标签栏、TextField的多种用法(如简单使用、登录页面、文本控制器的监听与使用、修饰等),以及如何实现点击空白区域隐藏键盘等功能。通过这些示例,开发者可以快速掌握在Flutter应用中实现常见UI元素的方法。
|
27天前
|
缓存 JavaScript API
Flutter&鸿蒙next 状态管理框架对比分析
在 Flutter 开发中,状态管理至关重要,直接影响应用的性能和可维护性。本文对比分析了常见的状态管理框架,包括 setState()、InheritedWidget、Provider、Riverpod、Bloc 和 GetX,详细介绍了它们的优缺点及适用场景,并提供了 Provider 的示例代码。选择合适的状态管理框架需考虑应用复杂度、团队熟悉程度和性能要求。
88 0
|
27天前
|
开发工具
Flutter&鸿蒙next中封装一个列表组件
Flutter&鸿蒙next中封装一个列表组件
41 0