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

responsive_sizer 封面
套件詳情v3.3.1

responsive_sizer

Responsive Sizer 透過提供輔助組件和擴展來幫助實現響應式佈局。

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
1.6萬
喜歡數
596
Pub 分數
160

安裝套件

flutter pub add responsive_sizer

套件介紹

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

Responsive Sizer 是一個 Flutter 套件,可簡化在不同螢幕尺寸和方向上建立響應式外觀的過程。它提供輔助元件和擴充方法,可輕鬆根據裝置的螢幕尺寸縮放字型、大小和間距。透過使用邏輯單位如 `vs`(垂直尺寸)和 `hs`(水平尺寸),開發人員可確保在各種裝置上維持一致的 UI 外觀。此套件可無縫整合至現有的 Flutter 專案中,並支援所有主要平台,包括 Android、iOS、Web、macOS、Windows 和 Linux。

適用情境

  • 建構跨裝置的響應式 UI
  • 動態縮放文字和佈局元素
  • 為多種螢幕尺寸創建自適應設計
  • 確保跨裝置的一致間距
  • 簡化響應式設計,無需複雜計算

主要特色

  • 易於使用的擴展方法
  • 支援 vs 和 hs 單位
  • 內建的響應式小工具
  • 跨平台相容性
  • 最小的樣板程式碼
  • 自動螢幕尺寸檢測

適合對象

  • 開發跨平台應用的開發者
  • 注重響應式設計的團隊
  • 需要動態擴展的項目
  • 初學者學習響應式Flutter
  • 針對多樣設備螢幕的應用程式

使用建議

  • 可能需要對現有佈局值進行初始調整
  • 最佳搭配一致的設計系統使用
  • 不太適合高度自訂或非均勻縮放的需求
  • 性能影響可忽略不計,但應在低階設備上進行測試
  • 需要理解響應式設計原則

原始 README

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

Responsive Sizer

Responsive Sizer helps implement a responsive layout by providing helper widgets and extensions.

Responsive Image

Responsive Image

Content

Installation

Add responsive_sizer to pubspec.yaml

dependencies:
  responsive_sizer: ^3.3.1

Usage

Import the Package

import 'package:responsive_sizer/responsive_sizer.dart';

Wrap MaterialApp with ResponsiveSizer widget

ResponsiveSizer( 
  builder: (context, orientation, screenType) {
    return MaterialApp(
      home: HomePage(),
    );
  },
);

Widget Size

Container(
  width: Adaptive.w(20),    // This will take 20% of the screen's width
  height: 30.5.h     // This will take 30.5% of the screen's height
)

Font size

Text(
  'Responsive Sizer', 
  style: TextStyle(fontSize: 15.dp), 
  // 15.sp can also be used instead of .dp
  // To know their differences, check #FAQ
)

Orientation

If you want to support both portrait and landscape orientations

Device.orientation == Orientation.portrait
  ? Container(   // Widget for Portrait
      width: 100.w,
      height: 20.5.h,
   )
  : Container(   // Widget for Landscape
      width: 100.w,
      height: 12.5.h,
   )

ScreenType

If you want the same layout to look different in tablet and mobile, use the Device.screenType method:

Device.screenType == ScreenType.tablet
  ? Container(   // Widget for Tablet
      width: 100.w,
      height: 20.5.h,
   )
  : Container(   // Widget for Mobile
      width: 100.w,
      height: 12.5.h,
   )

*Device.ScreenType can not be Desktop unless maxTabletWidth is set

Parameters

ResponsiveSizer

  • maxMobileWidth - Maximum width of a mobile device (If the device's width is larger than this, it will be categorized as a tablet) - Default value: 599
  • maxTabletWidth - Maximum width of a tablet device (If the device's width is larger than this, it will be categorized as a desktop) - Optional: enables Desktop ScreenType if enabled

Extensions

  • Adaptive.h() or .h - Calculated percentage of the device's height (40.h -> 40% of device's height)
  • Adaptive.w() or .w - Calculated percentage of the device's width (40.w -> 40% of device's width)
  • Adaptive.sp() or .sp - Calculated sp based on the device's pixel density and aspect ratio (See FAQ)
  • Adaptive.dp() or .dp - Calculated dp based on the device's pixel density (See FAQ)
*Note: Only use .sh and .sw if you want height and width to depend on the device's available height and width after applying SafeArea. Use .h and .w by default.
  • Adaptive.sh() or .sh - Calculated percentage of the remaining device's height after applying SafeArea
  • Adaptive.sw() or .sw - Calculated percentage of the remaining device's width after applying SafeArea

  • Device.boxConstraints - BoxConstraints of the device
  • Device.orientation - Screen Orientation of the device (portrait or landscape)
  • Device.screenType - Screen type of the device (mobile or tablet)
  • Device.aspectRatio - Aspect ratio of the device
  • Device.pixelRatio - Pixel density ratio of the device

  • Adaptive.cm() or .cm - The respective value in value in centimeters
  • Adaptive.mm() or .mm - The respective value in value in millimeters
  • Adaptive.Q() or .Q - The respective value in quarter-millimeters
  • Adaptive.inches() or .inches - The respective value in inches
  • Adaptive.pc() or .pc - The respective value in picas (1/6th of 1 inch)
  • Adaptive.pt() or .pt - The respective value in points (1/72th of 1 inch)
  • Adaptive.px() or .px - The respective value in pixels

Take Note

You need to import responsive_sizer package in order to access number.h, number.w, number.dp, and number.sp

Auto import in VSCode and Android Studio doesn't work for dart extension methods. Typing 10.h would not bring up auto import suggestion for this package

One workaround is to type Device so that the auto import suggestion would show up:

import 'package:responsive_sizer/responsive_sizer.dart';

FAQ

What is the difference between .sp and .dp?

.dp is supposedly calculated see below based on Material Design's dp calculation while.sp is calculated based on the device's pixel density and aspect ratio

Why is dp not calculated using the device's screen density?

Since there is no way to obtain a device's physical width in inches, we could not calculate for screen density. Material Design's screen density calculation involves a device's physical width in inches. As an alternative, dp is calculated using the device's pixel ratio.

Community Support

If you have any suggestions or issues, feel free to open an issue

If you would like to contribute, feel free to create a PR

所屬分類

原始碼儲存庫

使用此套件的專案