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

flutter_screen_scaler 封面
插件详情v3.0.0

flutter_screen_scaler

一个根据屏幕百分比缩放控件和字体大小的包,配有便捷的扩展方法(例如 `50.h`、`30.w`、`16.sp`)。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
124
喜欢数
27
Pub 分数
160

安装插件

flutter pub add flutter_screen_scaler

插件介绍

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

flutter_screen_scaler 是一个响应式 UI 包,通过百分比扩展(如 `50.h`、`30.w` 和 `16.sp`)实现基于屏幕尺寸的动态缩放,自动调整控件和字体大小。它简化了在不同设备上创建自适应布局的过程,根据屏幕高度、宽度和字体比例自动调整尺寸。该包可无缝集成到 Flutter 的控件树中,并支持所有主要平台,包括 Android、iOS、Web、macOS、Windows 和 Linux。非常适合希望在各种屏幕尺寸上保持一致设计而无需手动计算的开发者。

适合场景

  • 为多种屏幕尺寸创建响应式布局
  • 根据设备密度动态缩放字体
  • 使用统一的UI尺寸构建跨平台应用
  • 简化复杂UI中的布局计算
  • 确保在各种设备上保持一致的间距和尺寸

主要特点

  • 基于百分比的高度和宽度缩放(例如 50.h)
  • 通过 sp 单位(例如 16.sp)缩放字体大小
  • 扩展方法,用于直观的语法
  • 跨平台支持
  • 自动屏幕尺寸检测

适合对象

  • 开发响应式 Flutter 应用的开发者
  • 针对多种设备类型的团队
  • 需要最少手动布局调整的项目
  • 专注于一致性的UI设计师
  • 需要可扩展排版的应用程序

使用建议

  • 可能需要初始设置以实现最佳缩放
  • 行为取决于准确的屏幕度量
  • 不适合固定大小的设计
  • 过度使用可能导致性能影响
  • 最好与响应式设计原则一起使用

原始 README

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

Flutter Screen Scaler

A Flutter package to effortlessly scale widget dimensions and font sizes based on screen percentages, now with convenient extension methods like 50.h, 30.w, and 16.sp.

This package helps you create responsive UIs that adapt to various screen sizes by simplifying the process of using screen-relative dimensions.

Features

  • Singleton Access: Easy-to-use static instance ScreenScaler.I.
  • Static Initialization: Simple one-time setup with ScreenScaler.init(context).
  • Extension Methods: Intuitive syntax for scaling:
    • value.h: Percentage of screen height.
    • value.w: Percentage of screen width.
    • value.sp: Responsive font size, scales linearly with screen width.
  • Direct Percentage Scaling: getWidth() and getHeight() now provide straightforward percentage-based values.
  • Parent-Relative Scaling: Scale dimensions based on a percentage of an immediate parent widget's size using scaleWidthFrom(parentSize, percentage) and scaleHeightFrom(parentSize, percentage).
  • Utility Methods: Includes helpers for EdgeInsets (padding, margins) and BorderRadius.

Installation

  1. Add this to your package's pubspec.yaml file:

    dependencies:
      flutter_screen_scaler: ^3.0.0
    
  2. Install packages from the command line:

    flutter pub get
    
  3. Import it in your Dart code:

    import 'package:flutter_screen_scaler/flutter_screen_scaler.dart';
    

Initialization (Important!)

Before using any screen-relative scaling methods or extension getters (.h, .w, .sp), you must initialize the ScreenScaler with a BuildContext. This is typically done once in your app, for example, in the build method of your main app widget or a root page.

@override
Widget build(BuildContext context) {
  // Initialize the ScreenScaler
  ScreenScaler.init(context);

  return MaterialApp(
    // ... your app code
  );
}

If ScreenScaler.init(context) is not called, a debug warning will be printed, and the scaler will operate with default (potentially incorrect) screen dimensions.

Usage Examples

Once initialized, you can use the extension methods or call methods on ScreenScaler.I.

1. Screen Percentage Scaling (Height and Width)

Use the .h and .w extension getters on any num (int or double) for concise scaling.

// In your widget's build method (after ScreenScaler.init has been called elsewhere)
Container(
  height: 50.h,   // 50% of screen height
  width: 80.w,    // 80% of screen width
  color: Colors.blue,
  child: Center(child: Text('Scaled Container')),
);
2. Responsive Font Scaling

Use the .sp extension getter for font sizes that scale linearly with screen width.

Text(
  'Responsive Text',
  style: TextStyle(
    fontSize: 16.sp, // Font size 16, scaled for screen width
  ),
);
3. Direct Singleton Usage (Alternative)

You can also call methods directly on the ScreenScaler.I instance:

Container(
  height: ScreenScaler.I.getHeight(50),   // 50% of screen height
  width: ScreenScaler.I.getWidth(80),     // 80% of screen width
  child: Text(
    'More Text',
    style: TextStyle(
      fontSize: ScreenScaler.I.getResponsiveFontSize(16), // Scaled font size 16
    ),
  ),
);
4. Parent-Relative Scaling

To scale a widget based on its parent's dimensions, use scaleWidthFrom or scaleHeightFrom within a LayoutBuilder.

LayoutBuilder(
  builder: (BuildContext context, BoxConstraints constraints) {
    Size parentSize = constraints.biggest; // Get parent's size

    return Container(
      width: ScreenScaler.I.scaleWidthFrom(parentSize, 50), // 50% of parent's width
      height: ScreenScaler.I.scaleHeightFrom(parentSize, 30), // 30% of parent's height
      color: Colors.green,
      child: Center(child: Text('Scales with parent')),
    );
  },
)
5. Padding, Margins, and Border Radius

The package continues to provide utility methods for creating scaled EdgeInsets and BorderRadius values. These methods internally use the core screen scaling logic.

// Example using screen-relative scaling
Container(
  padding: ScreenScaler.I.getPaddingAll(5.w), // Padding of 5% of screen width on all sides
  margin: ScreenScaler.I.getMarginLTRB(2.w, 1.h, 2.w, 1.h),
  decoration: BoxDecoration(
    color: Colors.lightBlueAccent,
    borderRadius: ScreenScaler.I.getBorderRadiusCircular(10.sp), // Radius scaled using .sp logic
  ),
  child: Text('Styled Container'),
);
Note on getTextSize and getFullScreen

The methods getTextSize(percentage) (alias for getFullScreen(percentage)) are still available. However, please note that getFullScreen calculates its value using the formula (percentage / 100)^2 * (screenWidth + screenHeight). This results in a quadratic scaling for the percentage, which might not be intuitive for typical font size scaling. For standard linear font scaling, prefer using the .sp extension or ScreenScaler.I.getResponsiveFontSize().

Why Use This Package?

When developing Flutter applications, you often define widget sizes explicitly. While this works on your test device, these fixed sizes can lead to UI overflows or awkward layouts on devices with different screen dimensions.

flutter_screen_scaler solves this by allowing you to define sizes and font scales as percentages of the screen dimensions (or parent dimensions). This approach, similar to using percentages in web development, helps create UIs that are more adaptive and look consistent across a wider range of devices.

Example

Refer to the updated example/lib/main.dart for a comprehensive demonstration of the new API and features.

screenshot

所属分类

源码仓库

使用此插件的项目

暂无相关数据。