패키지, 저장소 및 앱 카테고리 검색

패키지 상세v2.0.1

awesome_flutter_extensions

조상 컨텍스트 속성에 접근할 때 반복 코드를 제거하는 Flutter 확장

AndroidiOSWebmacOSWindowsLinux
30일 다운로드
1.7천
좋아요
171
Pub 점수
160

패키지 설치

flutter pub add awesome_flutter_extensions

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

확장 메서드를 제공하여 조상 컨텍스트 속성에 접근하는 것을 단순화하는 플러터 패키지입니다. 반복 코드를 줄입니다. 개발자는 `BuildContext.findAncestorWidgetOfExactType` 를 수동으로 호출하지 않고도 테마, 로컬라이제이션 또는 기타 상속 위젯을 컨텍스트에서 직접 가져올 수 있습니다. 이는 복잡한 위젯 트리에서 코드 가독성과 개발 속도를 향상시킵니다. 패키지는 가볍고 모든 주요 플러터 플랫폼과 호환됩니다.

사용 사례

  • 테마 접근 간소화
  • 컨텍스트 검색 보일러플레이트 줄이기
  • 현지화 검색 간소화
  • 위젯 트리 탐색 개선
  • 코드 유지보수성 향상
  • UI 개발 가속화

주요 기능

  • 컨텍스트용 확장 메서드
  • 직접 조상 속성 접근
  • 최소 성능 오버헤드
  • 크로스 플랫폼 지원
  • 더 깔끔하고 가독성 높은 코드
  • 추가 종속성 없음

적합한 대상

  • 더 깔끔한 컨텍스트 사용을 원하는 개발자
  • 코드 가독성을 우선시하는 팀
  • 깊은 위젯 계층 구조를 가진 프로젝트
  • Flutter 초보자가 컨텍스트 패턴 배우기
  • 자주 테마 또는 로케일에 액세스하는 앱

고려 사항

  • 조상 컨텍스트에만 제한
  • 전체 컨텍스트 관리를 대체하지 않습니다
  • 사용자 정의 컨텍스트 확장과 충돌할 수 있습니다
  • 적절한 상태 관리와 함께 사용할 때 가장 효과적입니다
  • 비조상 속성에 대한 액세스에는 적합하지 않습니다

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

Pub

Awesome Flutter Extensions

Awesome flutter extensions to remove boilerplate

Installation

  1. Install using the Terminal:
flutter pub add awesome_flutter_extensions
  1. Install adding the dependency in the pubspec.yaml:
dependencies:
  awesome_flutter_extensions: ^1.0.0 # Use the latest version from pub.dev
  1. Install using Pubspec Assist (VSCode extensions):

Open the command palette:

  • (⇧ ⌘ P) on Mac
  • (Ctrl ⇧ P) on Windows

Then type Pubspec assist.. until you'll get Pubspec Assist: Add/Update dependencies.

Here type the name of the package: awesome_flutter_extensions and press ENTER ↵.

Get Started

First of all, let's import the extensions with:

import 'package:awesome_flutter_extensions/awesome_flutter_extensions.dart';

Usage

There are many extensions in this library. So I decided to break them up into groups. The groups currently available are:

Why this split? After creating extensions upon extensions, I admit that with context you could access an infinite number of things. That's why I decided to split them up.

Sizes

To get the width of the screen, use:

// before
MediaQuery.sizeOf(context).width
// after
context.sizes.width;

All the extensions available are:

  • width
  • maybeWidth
  • height
  • maybeHeight
  • padding
  • maybePadding
  • viewInsets
  • maybeViewInsets
  • systemGestureInsets
  • maybeSystemGestureInsets
  • viewPadding
  • maybeViewPadding
  • devicePixelRatio
  • maybeDevicePixelRatio
  • textScaler
  • maybeTextScaler

You can also add padding easily

// before
Padding(padding: EdgeInsets.symmetric(horizontal: 16))
// now
Padding(padding: 16.paddingHorizontal())

All the edge insets available are:

  • paddingAll
  • paddingHorizontal
  • paddingVertical
  • paddingTop
  • paddingLeft
  • paddingRight
  • paddingBottom
TextStyles

To get the titleLarge text style use:

// before
Theme.of(context).textTheme.titleLarge!
// after
context.textStyles.titleLarge

All the extensions available are:

  • displayLarge
  • displayMedium
  • displaySmall
  • headlineLarge
  • headlineMedium
  • headlineSmall
  • titleLarge
  • titleMedium
  • titleSmall
  • bodyLarge
  • bodyMedium
  • bodySmall
  • labelLarge
  • labelMedium
  • labelSmall

You can also change the font weight directly using:

context.textStyles.titleLarge.semiBold

All the font weights available are:

  • thick
  • extraBold
  • bold
  • semiBold
  • medium
  • regular
  • light
  • extraLight
  • thin

You can also change the font style directly using:

context.textStyles.titleLarge.italic

All the font weights available are:

  • normal
  • italic
Colors

To get the primaryColor from the theme use:

// before
Theme.of(context).primaryColor
// after
context.colors.primary

You can also get the colorScheme colors using:

// before
Theme.of(context).colorScheme
// after
context.colors.scheme

All the extensions available are:

  • primary
  • primaryLight
  • primaryDark
  • canvas
  • scaffoldBackground
  • card
  • divider
  • focus
  • hover
  • highlight
  • splash
  • unselectedWidget
  • disabled
  • secondaryHeader
  • dialogBackground
  • indicator
  • hint
  • shadow
  • scheme
Themes

To get the appBarTheme, use:

// before
Theme.of(context).appBarTheme
// after
context.themes.appBar;

All the extensions available are:

  • button
  • toggleButtons
  • text
  • primaryText
  • inputDecoration
  • icon
  • primaryIcon
  • slider
  • tabBar
  • tooltip
  • card
  • chip
  • appBar
  • scrollbar
  • bottomAppBar
  • dialog
  • floatingActionButton
  • navigationRail
  • cupertinoOverride
  • snackBar
  • bottomSheet
  • popupMenu
  • banner
  • divider
  • buttonBar
  • bottomNavigationBar
  • timePicker
  • textButton
  • elevatedButton
  • outlinedButton
  • textSelection
  • dataTable
  • checkbox
  • radio
  • switchTheme
  • badge
  • drawer
  • dropdownMenu
  • expansionTile
  • extensions
  • filledButton
  • iconButton
  • listTile
  • menu
  • menuBar
  • menuButton
  • navigationBar
  • navigationDrawer
  • pageTransitions
  • progressIndicator
  • segmentedButton
Platform

To detect in which platform the app is running:

final isMacOS = context.platform.isMacOS

All the parameters available are:

  • isAndroid
  • isWeb
  • isMacOS
  • isWindows
  • isFuchsia
  • isIOS
  • isLinux

To detect the target platform (e.g. the app is running on Web but from an iOS device):

final isIOS = context.targetPlatform.isIOS;
  • isAndroid
  • isFuchsia
  • isIOS
  • isLinux
  • isMacOS
  • isWindows
String

Various extension on String, for example:

Capitalize each word
final s = 'hello world';
print(s.capitalize()); // Hello World
Capitalize first word
final s = 'hello world';
print(s.capitalizeFirst()); // Hello world
Mock word

Use it when you need to change the string later or you need to remember to translate it.

final s = 'hello world';
print(s.mock); // hello world 🧨
isNum
final s = '2.0';
print(s.isNum()); // true

final s2 = 'hi';
print(s2.isNum()); // false

All the extensions available are:

  • capitalize
  • capitalizeFirst
  • mock
  • isBool(caseSensitive = true)
  • toBool(caseSensitive = true)
  • isNum
  • toNum
  • isDouble
  • toDouble
  • inInt
  • toInt
  • removeAllWhitespace
  • hasMatch
Miscellaneous

Additional extensions.

Log object
// before
import 'dart:developer' as devtools show log;
devtools.log(MyClass.toString());
// now
MyClass.log();
Separated Column or Row

Do you want to separate your Column or Row with the same widget like ListView.separated? Use separatedBy:

// before
Column(
    children: [
        FirstWidget(),
        SizedBox(height: 8),
        SecondWidget()
        SizedBox(height: 8),
        ThirdWidget(),
    ],
),
// now
Column(
    children: [
        FirstWidget(),
        SecondWidget()
        ThirdWidget(),
    ].separatedBy(SizedBox(height: 8)),
),
Convert number to Duration
// before
final twoDays = Duration(days: 2);
// now
final twoDays = 2.days;

All available extensions are:

  • microseconds
  • milliseconds
  • seconds
  • minutes
  • hours
  • days
  • months
  • quarters
  • quadrimesters
  • years
Future delayed
// before
await Future.delayed(Duration(seconds: 5));
// now
await 5.seconds.future();
Navigator

To push a page you can use:

// before
Navigator.of(context).push(
    MaterialPageRoute(
    builder: (context) => const SecondPage(),
  ),
);
// after
context.navigator.push(
    MaterialPageRoute(
    builder: (context) => const SecondPage(),
  ),
);
// or even shorter
context.navigator.pushMaterial(const SecondPage()),

All the extensions available are:

  • canPop

  • maybePop

  • pop

  • popUntil

  • push

  • pushMaterial

  • pushCupertino

  • popAndPushNamed

  • pushAndRemoveUntil

  • pushNamed

  • pushNamedAndRemoveUntil

  • pushReplacement

  • pushReplacementMaterial

  • pushReplacementCupertino

  • pushReplacementNamed

  • removeRoute

  • removeRouteBelow

  • replace

  • replaceRouteBelow

  • Contributing

Contributions are welcomed!

Here is a curated list of how you can help:

  • Report bugs
  • Report parts of the documentation that are unclear
  • Update the documentation / add examples
  • Implement new features by making a pull-request

If you enjoyed the library, like it.

카테고리

소스 저장소

이 패키지를 사용하는 프로젝트