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

패키지 상세v1.11.0

fluttersdk_wind

Flutter용 Tailwind CSS. className='flex p-4 bg-white dark:bg-gray-800' 를 작성하고 Wind이 최적화된 위젯 트리를 렌더링합니다. 다크 모드와 반응형 브레이크포인트를 지원합니다.

AndroidiOSLinuxmacOSWebWindows
30일 다운로드
14.8만
좋아요
30
Pub 점수
160

패키지 설치

flutter pub add fluttersdk_wind

패키지 개요

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

FlutterSDK_Wind 은 Tailwind CSS의 유틸리티 중심 스타일링을 Flutter에 도입하여 개발자가 'flex p-4 bg-white dark:bg-gray-800'와 같은 간결하고 가독성 있는 className 속성을 작성할 수 있게 합니다. 이는 최적화된 위젯 트리로 컴파일되며 다크 모드 및 반응형 브레이크포인트를 내장 지원합니다. 이 패키지는 봇일러플레이트를 줄이고 플랫폼 간 일관된 디자인을 촉진함으로써 UI 개발을 단순화합니다. 빠른 프로토타이핑과 확장 가능한 디자인 시스템을 원하는 팀에게 이상적입니다.

사용 사례

  • 빠른 UI 프로토타이핑
  • 크로스 플랫폼 반응형 디자인
  • 다크 모드 구현
  • 디자인 시스템 표준화
  • 위젯 중첩 줄이기

주요 기능

  • 유용성 우선 CSS 구문
  • 자동 다크 모드 처리
  • 반응형 브레이크포인트
  • 최적화된 위젯 트리 생성
  • 최소한의 보일러플레이트

적합한 대상

  • 프론트엔드 개발자
  • 디자인 시스템 팀
  • 빠른 애플리케이션 개발
  • 일관된 스타일이 필요한 프로젝트
  • Tailwind CSS에 익숙한 팀

고려 사항

  • Tailwind 사용자가 아닌 사용자의 학습 곡선
  • 대규모 앱에서의 성능 오버헤드 가능성
  • 수동 위젯 코드 작성에 비해 사용자 지정이 제한됨
  • 빌드 시 처리가 필요합니다
  • 매우 동적 또는 복잡한 애니메이션에 적합하지 않음

원본 README

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

Wind

Tailwind CSS for Flutter.
Utility-first styling that turns className strings into optimized Flutter widget trees. If you know Tailwind, you already know Wind.

pub package CI pub points License: MIT

Documentation · Getting started · pub.dev · Issues


Flutter's structural styling costs you a six widget pyramid for a rounded card with a hover state, and the Flutter team has acknowledged the verbosity itself. Wind is the styling layer that closes the gap: one string, one widget, the same utility names you already write on the web.

WDiv(
  className: 'p-6 mx-4 bg-white dark:bg-gray-800 rounded-xl shadow-lg',
  child: WText('Hello', className: 'text-xl font-bold'),
)
The same thing in raw Flutter (click to show)
Container(
  padding: EdgeInsets.all(24),
  margin: EdgeInsets.symmetric(horizontal: 16),
  decoration: BoxDecoration(
    color: Colors.white,
    borderRadius: BorderRadius.circular(12),
    boxShadow: [
      BoxShadow(color: Colors.black.withOpacity(0.1), blurRadius: 10, offset: Offset(0, 4)),
    ],
  ),
  child: Text('Hello', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)),
)

Wind is a styling engine, not a widget catalogue. It composes with whatever component library you already use.

Install

flutter pub add fluttersdk_wind

Wrap the app once, then style everything with strings:

import 'package:flutter/material.dart';
import 'package:fluttersdk_wind/fluttersdk_wind.dart';

void main() => runApp(const App());

class App extends StatelessWidget {
  const App({super.key});

  @override
  Widget build(BuildContext context) {
    return WindTheme(
      data: WindThemeData(),
      builder: (context, controller) => MaterialApp(
        theme: controller.toThemeData(),
        home: const Home(),
      ),
    );
  }
}

class Home extends StatelessWidget {
  const Home({super.key});

  @override
  Widget build(BuildContext context) {
    return WDiv(
      className: '''
        flex flex-col gap-4 p-6
        bg-white dark:bg-gray-800
        rounded-xl shadow-lg
        md:flex-row md:gap-6
        ios:rounded-2xl
        hover:shadow-xl
      ''',
      children: [
        WText('Wind', className: 'text-xl font-bold text-gray-900 dark:text-white'),
        WButton(
          className: 'px-4 py-2 rounded-lg bg-blue-500 dark:bg-blue-600 hover:bg-blue-600',
          onTap: () {},
          child: const WText('Get started', className: 'text-white font-medium'),
        ),
      ],
    );
  }
}

That runs as written. No MouseRegion, no setState, no _isHovered boolean, no MediaQuery branch for the tablet layout.

What you get

  • The Tailwind vocabulary you already know. flex, p-4, bg-blue-500, rounded-lg, shadow-md, parsed by 20 token parsers. Classes paste between a web project and a Flutter one unmodified.
  • 27 W-prefix widgets. WDiv, WText, WButton, WInput, WSelect, WPopover, WDatePicker, WCard, WTabs, WBadge, WSwitch, WRadio, WDynamic, and five FormField wrappers that drop straight into a Flutter Form.
  • Prefixes that stack. dark:, sm: to 2xl:, hover: / focus: / disabled: / loading: / selected:, and ios: / android: / web: / mobile: / macos: / windows: / linux: for the cases where one platform genuinely differs.
  • A theme you own. 24 WindThemeData fields covering every token scale: colors, spacing, typography, shadows, breakpoints, animations. Defaults track Tailwind's own. aliases let you name a bare token once and use it everywhere.
  • Variant composition. WindRecipe and WindSlotRecipe build a className (or a per-slot map) from a base, variant axes, compound variants and a caller override, in a strict emission order with no merge magic to reason about.
  • Forms that behave on a phone. A focused field lifts the whole input clear of the keyboard and of the keyboard toolbar above it, not just the line the caret sits on. A control with an onTap is one traversal stop and activates on Enter, Space, a gamepad A button and a TV remote.
  • Server-driven UI. WDynamic renders a widget tree from JSON against a whitelist of 13 Wind widgets and 16 Flutter core widgets, so a layout change can ship without a store release.
  • Written for agents as much as for people. A canonical skill, a hosted MCP server and an llms.txt inventory, all maintained in this repository.

className rules worth knowing before the first line

Rule What it means
Prefix order <state>:<breakpoint>:<dark>:<platform>:<utility>, and prefixes stack freely.
Conflicts The last class in a family wins. p-2 p-6 is padding 6.
Dark mode Every color token carries its dark: pair in the SAME className. A missing pair is a bug, and the parser says so once in kDebugMode.
Unknown tokens Dropped silently in release, named once in debug. A typo never throws and never renders a red screen.
Spacing scale One step is 4 logical pixels, so p-4 is 16. Font size and tracking are pixel based too.
Caching A parsed className is cached on className + breakpoint + brightness + platform + states, so rebuilds cost a map lookup.

Wind is not a literal Tailwind port. Transforms, filters, group-* / peer-*, container queries and @apply have no Flutter counterpart and are deliberately out of scope; the full list lives in the docs.

For coding agents

Wind ships its own agent surface rather than hoping a model guessed right:

npx skills add fluttersdk/ai --skill wind-ui

The skill at skills/wind-ui/SKILL.md is the source of truth for the className grammar, the widget surface, the dark-mode pairing rule and the anti-patterns. fluttersdk/ai distributes it to Claude Code, Cursor, OpenCode, Gemini CLI, VS Code Copilot, Codex CLI, Cline and Roo Code. The hosted MCP server at mcp.fluttersdk.com exposes a search-docs tool over Streamable HTTP with no auth, and npx @fluttersdk/mcp bridges it for stdio-only clients. The machine-readable package inventory is llms.txt.

Documentation and examples

Full documentation with live previews is at fluttersdk.com/wind: every widget, every parser token, the theme fields, dark mode, responsive design, WDynamic, and the AI setup. Upgrading from an earlier release? See the upgrade guide. Internals live in ARCHITECTURE.md.

The example/ directory is the same gallery the docs site embeds:

cd example && flutter pub get
flutter run -d chrome

Requires Flutter 3.27.0 and Dart 3.4.0 or newer. Stable since 1.0, MIT licensed, and the only runtime dependencies are flutter_svg and the diagnostics contracts package.

Contributing

git clone https://github.com/fluttersdk/wind.git
cd wind && flutter pub get

New behaviour ships with a failing test first. Before opening a pull request, run what CI runs:

dart format --output=none --set-exit-if-changed .
dart analyze
flutter test
./tool/coverage.sh 90
dart pub publish --dry-run

CI enforces 90% line coverage on lib/, zero analyzer issues and zero format drift.

Report a bug · Request a feature

License

MIT, see LICENSE for details.


Wind is the styling layer of the fluttersdk ecosystem, and it works perfectly well on its own.
If Wind saved you a Container or two, give it a star, it helps others find it.

카테고리

의존성

의존성 목록 2 개

소스 저장소

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

아직 데이터가 없습니다.

순위