搜尋套件、儲存庫與 APP 分類

responsive_grid 封面
套件詳情v2.4.4

responsive_grid

適用於 Flutter 的響應式網格佈局和清單

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
1.2萬
喜歡數
272
Pub 分數
115

安裝套件

flutter pub add responsive_grid

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

一個 Flutter 套件,可在多個平台實現響應式網格佈局和清單。它會根據螢幕大小自動調整欄位數量和間距,確保在 Android、iOS、Web、macOS、Windows 和 Linux 上都能呈現最佳 UI。此套件簡化了建立適應性介面的過程,無需撰寫複雜的媒體查詢邏輯。非常適合需要順暢縮放的儀表板、產品目錄和內容網格。

適用情境

  • 構建響應式儀表板
  • 建立適應性產品網格
  • 設計跨平台佈局
  • 在行中顯示動態內容
  • 實現流式列表結構

主要特色

  • 根據螢幕大小自動調整欄位
  • 支援所有主要的Flutter平台
  • 簡單的 API,設定簡單
  • 可自定的間距和對齊方式
  • 內建響應式斷點

適合對象

  • 開發跨平台應用的開發者
  • 需要靈活佈局的UI設計師
  • 需要自適應內容網格的專案
  • 注重響應式設計的團隊
  • 針對多樣設備尺寸的應用程式

使用建議

  • 可能需要針對複雜的嵌套佈局進行調整
  • 對超大資料集的效能影響
  • 超出基本網格設定的自訂功能有限
  • 不太適合高度動態或動畫網格
  • 依賴於父級組件中約束的正確使用

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

responsive_grid

pub package

Responsive Grid Layout, List and many Utilities for Flutter, to achieve good UI look and feel for different screen sizes

Responsive Grid Layout

With ResponsiveGridRow and ResponsiveGridCol you can get the same behavior of bootstrap Grid System

Give every col the width it shall occupy at every size category assuming the total width is 12 (by default)

        ResponsiveGridRow(
          children: [
            ResponsiveGridCol(
              lg: 12,
              child: Container(
                height: 100,
                alignment: Alignment(0, 0),
                color: Colors.purple,
                child: Text("lg : 12"),
              ),
            ),
            ResponsiveGridCol(
              xs: 6,
              md: 3,
              child: Container(
                height: 100,
                alignment: Alignment(0, 0),
                color: Colors.green,
                child: Text("xs : 6 \r\nmd : 3"),
              ),
            ),
            ResponsiveGridCol(
              xs: 6,
              md: 3,
              child: Container(
                height: 100,
                alignment: Alignment(0, 0),
                color: Colors.orange,
                child: Text("xs : 6 \r\nmd : 3"),
              ),
            ),
            ResponsiveGridCol(
              xs: 6,
              md: 3,
              child: Container(
                height: 100,
                alignment: Alignment(0, 0),
                color: Colors.red,
                child: Text("xs : 6 \r\nmd : 3"),
              ),
            ),
            ResponsiveGridCol(
              xs: 6,
              md: 3,
              child: Container(
                height: 100,
                alignment: Alignment(0, 0),
                color: Colors.blue,
                child: Text("xs : 6 \r\nmd : 3"),
              ),
            ),
          ],
        )

Responsive Grid List

ResponsiveGridList works differently in that you only specify a desired width for the items and spacing, and it will decide how many items shall fit in a line, and the width of the item and spacing will change (only small change) to fill the entire width

    ResponsiveGridList(
        desiredItemWidth: 100,
        minSpacing: 10,
        children: List.generate(20, (index)=> index+1).map((i) {
          return Container(
            height: 100,
            alignment: Alignment(0, 0),
            color: Colors.cyan,
            child: Text(i.toString()),
          );
        }).toList()
    )

Responsive Staggered Grid List

The same as the ResponsiveGridList, but arranges items in columns inside one big row, so every item has independent height

Utilities

ResponsiveWidget , ResponsiveBuilder, ResponsiveLayoutBuilder and responsiveValue()

To provide a custom responsive Widget, Builder or a single value, for every size tier

ResponsiveLocalWidget, ResponsiveLocalBuilder and ResponsiveLocalLayoutBuilder

To provide a responsive Widget or Builder for its own width, not the viewport's, they are just wrappers on top of flutter LayoutBuilder

Warning: make sure not to use any of them inside unbounded width widget, as the width will be read infinity

ResponsiveWidget and ResponsiveBuilder

To create widgets conditionally for every size tier

ResponsiveLayoutBuilder

To create different layouts for every size tier, for example put children inside a Column for XS and in a Row from MD and larger

ResponsiveLayoutBuilder(
                  xs: (BuildContext context, List<Widget> children) => Column(
                    children: children,
                  ),
                  md: (BuildContext context, List<Widget> children) => Row(
                    children: children,
                  ),
                  children: .....,
                ),
responsiveValue()

A conditional value on size tier, may be used to achieve any complicated behavior, for example say you have a GridView you can make the crossAxisCount increase with the width

GridView.count(
            crossAxisCount: responsiveValue(context, xs: 2, sm: 3, md: 4, lg: 6, xl: 7),
            children: .....
          )

Another example you can make a widget visible in small sizes and hidden starting from MD tier

Visibility(
      visible: responsiveValue(context, xs: true, md: false),
      child: .....)
ResponsiveLocalWidget and ResponsiveLocalBuilder

To create widgets conditionally for each specified available width for it

ResponsiveLocalLayoutBuilder

To Layout widgets conditionally for each specified available width for them, for example say you want to put children inside a Column if available space width is less than 500 and in a Row if larger

ResponsiveLocalLayoutBuilder(configs: [
                  ResponsiveLayoutBuilderConfig(
                    upToWidth: 500,
                    builder: (BuildContext context, List<Widget> children) => Column(
                      children: children,
                    ),
                  ),
                  ResponsiveLayoutBuilderConfig(
                    upToWidth: double.infinity,
                    builder: (BuildContext context, List<Widget> children) => Row(
                      children: children,
                    ),
                  )
                ], children: .....)

Override breakpoints

Add before attaching App widget

ResponsiveGridBreakpoints.value = ResponsiveGridBreakpoints(
  xs: 600,
  sm: 905, 
  md: 1240,
  lg: 1440,
);

所屬分類

原始碼儲存庫

使用此套件的專案