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

插件详情v1.0.5

layout

布局通过使用统一的元素和间距,促进跨平台、跨环境和跨屏幕尺寸的一致性。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
2870
喜欢数
368
Pub 分数
150

安装插件

flutter pub add layout

插件介绍

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

布局包通过提供统一的间距和可重用的布局元素,促进跨平台和不同屏幕尺寸的一致性UI设计。它简化了Flutter应用中的响应式设计,确保在Android、iOS、Web、macOS、Windows和Linux上保持视觉和谐。通过标准化间距和结构,它减少了样板代码并提高了可维护性。该包非常适合希望在不牺牲灵活性的情况下强制执行设计一致性的团队。

适合场景

  • 跨平台应用程序开发
  • 响应式用户界面设计
  • 保持设计一致性
  • 减少重复的布局代码
  • 设计系统实施

主要特点

  • 统一间距指南
  • 可重用的布局组件
  • 平台无关的设计
  • 简化响应式布局
  • 与现有 Flutter 项目集成

适合对象

  • 使用设计系统的团队
  • 开发人员优先考虑一致性
  • 针对多个平台的项目
  • 需要可扩展布局的应用程序
  • 以用户界面为重点的 Flutter 开发者

使用建议

  • 需要遵守规定的间距规则
  • 可能需要为独特设计进行定制
  • 最佳搭配全面的设计系统
  • 仅限布局结构,不包括样式
  • 不是完整的用户界面框架

原始 README

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

Layout

pub package

Following the Material Design Guidelines, Layout encourage consistency across platforms, environments, and screen sizes by using uniform elements and spacing.

Install

Follow the instructions to install it here

Getting started

This package aims to provide the tools to implement a responsive layout in an easy and consistent way.

If you want to learn more in detail about layout in Material Design I recommend you the official website.

Let's get started!

Everything starts with the Layout widget. Usually added at the top of your widget tree, but you can place it wherever you need it. It uses its widget constraints to calculate its breakpoint, columns, gutters, and margins.

  @override
  Widget build(BuildContext context) {
    return Layout(
      child: MaterialApp(
      ....
      ),
    );
  }

Breakpoints

A breakpoint is the range of predetermined screen sizes that have specific layout requirements. At a given breakpoint range, the layout adjusts to suit the screen size and orientation.

Each breakpoint range determines the number of columns, and recommended margins and gutters, for each display size.

By default the breakpoints are defined as:

  • xs: 0 – 599
  • sm: 600 – 1023
  • md: 1024 – 1439
  • lg: 1440 – 1919
  • xl: 1920 +
 @override
 Widget build(BuildContext context) {
   if(context.breakpoint > LayoutBreakpoint.md)
     return TabletView();
   else
     return MobileView();
 }

LayoutValues

A layout value is relative to the width of the screen. This way you can define responsive variable, reuse them and apply them when needed.

final double padding = context.layout.value(xs: 0.0, sm: 12.0, md: 24.0, lg: 32.0, xl: 48.0);

The most important layout values are the ones relative to the breakpoint. These are the most common and useful as you can define a value for different breakpoint sizes. If a breakpoint is not provided, its value will correspond to the first previous/smaller breakpoint.

final double padding = context.layout.value(
     xs: 0.0,  // sm value will be like xs 0.0
     md: 24.0, // lg value will be like md 24.0
     xl: 48.0
);

Layout values can be reused in different parts of the app with even different Layout widgets. For that they need to be created as

final displaySidebar = LayoutValue(xs: false, md: true);

final horizontalMargin = LayoutValue.builder((layout) {
    double margin = layout.width >= 500 ? 24.0 : 16.0;
    margin += 8.0 * layout.visualDensity.horizontal;
    return EdgeInsets.symmetric(horizontal: margin);
});

Then it can be used in any widget that has some Layout up in the tree as:

return Column(
  children: [
    Padding(
      padding: horizontalMargin.resolve(context),
      child:child,
    ),
    if(displaySidebar.resolve(context))
      SideBar(),
    ),
  ],
);

You can also create values relative to the layout width like.

final displaySidebar = LayoutValue.builder((layout) => layout.width > 600);

Margins

Margins are the space between content and the left and right edges of the screen.

  @override
  Widget build(BuildContext context) {
    return Margin(
      child: Text('This text'),
    );
  }

Margin widths are defined as fixed values at each breakpoint range. To better adapt to the screen, the margin width can change at different breakpoints. Wider margins are more appropriate for larger screens, as they create more whitespace around the perimeter of content.

By default the margin values are the ones from the Material Design Guidelines. 16dp for screens with a width less than 720dp and 24 for bigger screens. You can override these values in any moment by providing the margin param.

Fluid Margins

Some times you want to have a fixed width that stays the same across screen sizes.

  @override
  Widget build(BuildContext context) {
    return FluidMargin(
      child: Text('This text'),
    );
  }

Fluid margins are dynamically updated to keep a fixed size of its inner child. These fixed sizes are by default the ones from the Material Design Guidelines but can also easily customizable.

AdaptiveBuilder

A widget that allows easily to build responsive layouts

  @override
  Widget build(BuildContext context) {
    return AdaptiveBuilder(
      xs: (context) => LayoutWithBottomNavigationBar(),
      lg: (context) => LayoutWithTrailingNavigationBar(),
    );
  }

or for more complex cases

  @override
  Widget build(BuildContext context) {
    return  AdaptiveBuilder.builder(
      builder: (context, layout, child) {
        if (layout.breakpoint < LayoutBreakpoint.lg) {
          return LayoutWithBottomNavigationBar(child: child);
        } else {
          return LayoutWithTrailingNavigationBar(child: child);
        }
      },
      child: child,
    );
  }

Contributing

If you want to take the time to make this project better, you can open an new issue, or a pull request.

所属分类

依赖

依赖清单 1 项

源码仓库

使用此插件的项目