了解Flutter中的Container组件

简介: 在开发过程中,可以看到万物皆Widget,后续有时间将详细读源码。

了解Flutter中的Container组件

基本属性

  • alignment,[AlignmentGeometry]:在容器中对齐[子view]。
  • padding,[EdgeInsetsGeometry]:[装饰]内部的空白空间。这个[孩子],如果有的话,就是

放置在这个填充内。

  • color,[Color]:在[孩子]后面画的颜色。也就是背景色。
  • decoration,[Decoration]:画在[孩子]后面的装饰。
  • foregroundDecoration,[Decoration]:在[孩子]面前画的装饰。
  • width,[double]:宽度
  • height,[double]:高度
  • constraints,[BoxConstraints]:应用于子对象的附加约束。
  • margin,[EdgeInsetsGeometry]:围绕[装饰]和[孩子]的空空间。就是边距。
  • transform,[Matrix4]:如果指定了[transform],则相对于容器的大小,对原点进行对齐。
  • transformAlignment,[AlignmentGeometry]:(变换。对齐],由此属性设置。
  • child,[Widget]:孩子
  • clipBehavior,[Clip]:[Container.decoration]不为空时的剪辑行为。

粗略看Container源码

@override
  Widget build(BuildContext context) {
    Widget? current = child;

    if (child == null && (constraints == null || !constraints!.isTight)) {
      current = LimitedBox(
        maxWidth: 0.0,
        maxHeight: 0.0,
        child: ConstrainedBox(constraints: const BoxConstraints.expand()),
      );
    }

    if (alignment != null)
      current = Align(alignment: alignment!, child: current);

    final EdgeInsetsGeometry? effectivePadding = _paddingIncludingDecoration;
    if (effectivePadding != null)
      current = Padding(padding: effectivePadding, child: current);

    if (color != null)
      current = ColoredBox(color: color!, child: current);

    if (clipBehavior != Clip.none) {
      assert(decoration != null);
      current = ClipPath(
        clipper: _DecorationClipper(
          textDirection: Directionality.maybeOf(context),
          decoration: decoration!,
        ),
        clipBehavior: clipBehavior,
        child: current,
      );
    }

    if (decoration != null)
      current = DecoratedBox(decoration: decoration!, child: current);

    if (foregroundDecoration != null) {
      current = DecoratedBox(
        decoration: foregroundDecoration!,
        position: DecorationPosition.foreground,
        child: current,
      );
    }

    if (constraints != null)
      current = ConstrainedBox(constraints: constraints!, child: current);

    if (margin != null)
      current = Padding(padding: margin!, child: current);

    if (transform != null)
      current = Transform(transform: transform!, alignment: transformAlignment, child: current);

    return current!;
  }

比如alignment不为空,则将孩子添加到Align组件,比如padding和margin都会使用到Padding组件...

在开发过程中,可以看到万物皆Widget,后续有时间将详细读源码。

相关文章
|
2月前
Flutter 组件(二)文本 与 输入框组件
Flutter 组件(二)文本 与 输入框组件
157 0
|
2月前
|
容器
Flutter 组件(一)组件概述
Flutter 组件(一)组件概述
69 0
|
4天前
flutter 导航组件 AppBar (含顶部选项卡TabBar,抽屉菜单 drawer ,自定义导航图标)
flutter 导航组件 AppBar (含顶部选项卡TabBar,抽屉菜单 drawer ,自定义导航图标)
6 1
|
4天前
|
容器
Flutter Container设置 width 无效
Flutter Container设置 width 无效
|
2月前
|
设计模式 JavaScript 前端开发
flutter组件封装技巧
工厂函数不会自动调用,需要手动调用
30 3
|
2月前
|
Dart
Flutter 中优雅切换应用主题的组件
【Flutter】使用adaptive_theme组件优雅切换应用主题:封装MaterialApp,支持light/dark/system模式,自定义色彩,保存选择,含调试按钮。安装配置、设置主题、监听切换、自定义颜色、读取配置步骤详细。代码示例与学习路径推荐。[查看完整教程](https://flutter.ducafecat.com/blog/flutter-app-theme-switch)
Flutter 中优雅切换应用主题的组件
|
2月前
|
前端开发 搜索推荐 UED
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用
【4月更文挑战第30天】探索Flutter的高级UI组件,如`TabBar`、`Drawer`、`BottomSheet`,提升应用体验和美观度。使用高级组件能节省开发时间,提供内置交互逻辑和优秀视觉效果。示例代码展示了如何实现底部导航栏、侧边导航和底部弹出菜单。同时,自定义组件允许个性化设计和功能扩展,但也带来性能优化和维护挑战。参考Flutter官方文档和教程,深入学习并有效利用这些组件。
【Flutter前端技术开发专栏】Flutter中的高级UI组件应用
|
10月前
|
人机交互
Flutter笔记 - ListTile组件及其应用
Flutter笔记 - ListTile组件及其应用
154 0
|
缓存 Dart 前端开发
Flutter 中使用 Widgetbook 管理你的组件 | 猫哥
Flutter 界面开发中我们有几个痛点 : - 与设计师协作复用一套设计规范(figma) - 可视化的管理你的组件代码(基础组件、业务组件) - 不同设备尺寸测试你的组件 - 实时修改你的测试组件参数
4228 1
Flutter 中使用 Widgetbook 管理你的组件 | 猫哥
|
2月前
|
开发者 索引 容器
Flutter开发笔记:Flutter 布局相关组件
Flutter开发笔记:Flutter 布局相关组件
174 0