パッケージ、リポジトリ、アプリカテゴリを検索

scaled_app のカバー
パッケージ詳細v2.3.2

scaled_app

UIデザイン全体を比例的にスケーリングし、UIデザインの幅が固定されている場合に便利です。

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
5万
いいね数
96
Pub ポイント
160

パッケージをインストール

flutter pub add scaled_app

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

Scaled_App は、参照デザイン幅に基づいて全体のUIを比例スケーリングすることができるFlutterパッケージです。ウィジェットを動的にスケーリングすることで、さまざまな画面サイズでレイアウトとタイポグラフィの一貫性を確保します。固定幅の基盤を持つデザインに最適で、手動調整なしに視覚的な正確性を維持します。このパッケージは、モバイル、Web、デスクトップを含むすべての主要プラットフォームをサポートしており、正確なUI制御が必要なクロスプラットフォームアプリケーションに適しています。

用途

  • 固定幅デザインの適応
  • クロスプラットフォームUIの一貫性
  • レスポンシブレイアウトスケーリング
  • デザインシステムの実装
  • デバイス間でのUIの正確さ

主な機能

  • 割合によるUIスケーリング
  • リファレンスデザイン幅のサポート
  • クロスプラットフォーム互換性
  • 自動ウィジェットのリサイズ
  • 最小構成が必要

適している対象

  • 固定幅のデザイン仕様を持つ開発者
  • デザインシステムを使用するチーム
  • 複数の画面サイズをターゲットにするアプリ
  • ピクセル単位のUI再現を必要とするプロジェクト
  • 厳格なデザイン制約を持つFlutterアプリ

注意事項

  • 固定幅デザインワークフローに最適
  • 参照幅の初期設定が必要になる場合があります
  • 流動的または動的なレイアウトには適していません
  • パフォーマンスへの影響は無視できるが、複雑さに依存する
  • ターゲットデバイスでの慎重なテストが必要です

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

Scale the entire UI design proportionally.

Button, image, font, every widget is scaled simultaneously.

Before:

  • 250x250 square is the same size across devices

Screenshots of the same design before scaling

After:

  • 250x250 square is two thirds the screen width across devices

Screenshots of the same design after scaling

  • if we resize the screenshots above to be the same width
  • then everything appears the same size as below

Resized screenshots of the same design after scaling

Sponsor

庞征博引 — 想学的,慢慢都会

This package is sponsored by 庞征博引, which breaks complex subjects into 5–10 minute reads you work through, and ask questions about, at your own pace.

Live demo

https://lastmonopoly.github.io/flutter_web_app/scaled_app_demo/

Features

Use this package in your Flutter app when:

  • your UI design is fixed-width
  • you want to scale the entire UI, not just part of it

Usage

Firstly, replace runApp with runAppScaled

void main() {
  // 1st way to use this package
  runAppScaled(const MyApp(), scaleFactor: (deviceSize) {
    // screen width used in your UI design
    const double widthOfDesign = 375;
    return deviceSize.width / widthOfDesign;
  });
}

Or, replace WidgetsFlutterBinding with ScaledWidgetsFlutterBinding

void main() {
  // 2nd way to use this package
  // Scaling will be applied based on [scaleFactor] callback.
  ScaledWidgetsFlutterBinding.ensureInitialized(
    scaleFactor: (deviceSize) {
      // screen width used in your UI design
      const double widthOfDesign = 375;
      return deviceSize.width / widthOfDesign;
    },
  );
  runApp(const MyApp());
}

Then, use MediaQueryData.scale to scale size, viewInsets, viewPadding, etc.

class PageRoute extends StatelessWidget {
  const PageRoute({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MediaQuery(
      data: MediaQuery.of(context).scale(),
      child: const Scaffold(...),
    );
  }
}

Optionally, update ScaledWidgetsFlutterBinding.instance.scaleFactor to enable / disable scaling on demand.

Reference

https://juejin.cn/post/7078816723666731021

カテゴリー

ソースリポジトリ

このパッケージを使用しているプロジェクト

ランキング