搜索插件、代码仓与 APP 分类

插件详情v0.1.1

dimensions_theme

在 Flutter 主题中定义应用尺寸。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
148
喜欢数
24
Pub 分数
150

安装插件

flutter pub add dimensions_theme

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

dimensions_theme 包允许开发者在 Flutter 主题中直接定义和管理应用程序的尺寸,从而在不同屏幕尺寸上实现一致且响应式的 UI 设计。通过将尺寸常量集成到主题中,该包简化了布局调整,无需依赖外部配置或硬编码值。这种方法提高了可维护性和可扩展性,尤其适用于具有复杂布局的大型应用。该包支持所有主要平台,确保跨平台一致性。

适合场景

  • 响应式布局管理
  • 集中式维度配置
  • 跨平台 UI 一致性
  • 主题驱动的间距和尺寸
  • 简化用户界面缩放
  • 保持设计系统完整性

主要特点

  • 将维度集成到 ThemeData 中
  • 支持平台无关的尺寸
  • 启用基于主题的动态维度
  • 减少对硬编码值的依赖
  • 促进设计系统对齐
  • 与现有主题无缝配合

适合对象

  • 大规模 Flutter 应用
  • 设计系统实施
  • 跨平台开发
  • 注重UI一致性的团队
  • 使用主题化样式的开发者

使用建议

  • 需要理解 Flutter 主题系统
  • 可能需要为自定义维度逻辑进行额外设置
  • 限制为基于主题的维度处理
  • 不是完整的布局框架
  • 最好与响应式布局策略配合使用

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

📏 dimensions_theme

dimensions_theme provides a theme extension to easily define and access app dimensions such as blank spaces, padding, border radius, and other dimensions within the Flutter theme.

Define your dimensions

// Uses tokens that best fit your project needs. You can also use multiple enums
enum Dimension {
  xlarge,
  large,
  medium,
  small,
  xsmall,
}

...

MaterialApp(
  theme: ThemeData(
    extensions: const [
      DimensionsTheme({
        Dimension.xlarge: 20,
        Dimension.large: 16,
        Dimension.medium: 12,
        Dimension.small: 8,
        Dimension.xsmall: 4,
      }),
    ],
  ),
);
Uses multiple enum for dimensions

The Dimensions theme extension supports using multiple enums as dimension tokens. This can be useful if you want to give different kinds of dimensions value their own enum.

enum Space {
  xlarge,
  large,
  medium,
  small,
  xsmall,
}

enum Padding {
  xlarge,
  large,
  medium,
  small,
  xsmall,

  screen,
}

...

MaterialApp(
  theme: ThemeData(
    extensions: const [
      DimensionsTheme({
        Space.xlarge: 20,
        Space.large: 16,
        Space.medium: 12,
        Space.small: 8,
        Space.xsmall: 4,

        Padding.xlarge: 20,
        Padding.large: 16,
        Padding.medium: 12,
        Padding.small: 8,
        Padding.xsmall: 4,
        Padding.screen: 20,
      }),
    ],
  ),
);

Consume dimensions values

You can access any dimension value using the get:

Dimensions.of(context).get(Dimension.small);

Additionally, this package provides helpers to make it easier to work with defined dimensions.

Padding

The padding context extension constructs EdgeInsets using the values defined in the dimensions theme for a given dimension token.

Padding(
  padding: context.padding.all(Dimension.small)
  child: ...
)

This extension provides counterparts to all EdgeInsets constructors but uses Dimension tokens instead of raw double values.

context.padding.all(Dimension.small)

context.padding.symmetric(
  horizontal: Dimension.medium,
  vertical: Dimensions.small,
)

context.padding.only(
  left: Dimension.large
  top: Dimension.large,
)
Blank spaces

The Space widget creates a SizedBox with the values defined in the dimensions theme for a given dimension token.

Column(
  children: [
    SomeWidget(),
    Space(Dimensions.small),
    SomeWidget(),
  ]
)

Alternatively, you can use the SpaceDimensionsMixin to construct Space widgets directly from your tokens:

/// Add `SpaceDimensionsMixin` to your dimension token responsible for spaces
enum Spaces with SpaceDimensionsMixin {
  large,
  medium
  small,
}

...

Column(
  children: [
    SomeWidget(),
    Spaces.small(),
    SomeWidget(),
  ]
)

All space widgets come with .w and .h constructors to restrict the blank space in one axis, respectively width and height.

Space.h(Dimensions.small)
Space.w(Dimensions.small)

Spaces.small.h()
Spaces.small.w()
Border radius

The radius context extension constructs Radius using the values defined in the dimensions theme for a given dimension token.

Container(
  decoration: BoxDecoration(
    borderRadius: BorderRadius.all(
      context.radius.circular(Dimensions.large),
    ),
  ),
)

This extension provides counterparts to all Radius constructors but uses Dimension tokens instead of raw double values.

context.radius.elliptical(Dimensions.large);
context.radius.circular(Dimensions.small, Dimensions.large);

The extension also provides a counterpart to BorderRadius.circular().

Container(
  decoration: BoxDecoration(
    borderRadius: borderRadius.circular(Dimensions.large),
  ),
)

所属分类

源码仓库

使用此插件的项目

暂无相关数据。