wp_pivot_flutter는 Windows Phone 스타일의 피봇 탭 바를 구현하는 Flutter 패키지로, 여러 탭 간을 스와이프할 수 있는 세련된 인터페이스를 제공합니다. 마이크로소프트의 Windows Phone UI에서 영감을 받은 현대적인 디자인으로, 부드러운 전환과 직관적인 탐색을 가능하게 합니다. 이 패키지는 Android, iOS, Web, macOS, Windows, Linux 등 모든 주요 플랫폼을 지원하여, 독특한 탭 경험을 원하는 크로스플랫폼 애플리케이션에 이상적입니다. 최소한의 설정으로 Flutter 앱에 쉽게 통합되며, 사용자 정의 가능한 스타일링 옵션도 제공합니다.
사용 사례
크로스플랫폼 모바일 및 데스크톱 앱
윈도우 폰을 영감으로 한 사용자 인터페이스 디자인
스와이프 기반 탭 탐색
다시보드 내 콘텐츠 구성
시각적 피드백을 통한 사용자 참여도 향상
주요 기능
윈도우 폰 스타일의 피봇 애니메이션
부드러운 수평 스와이프
사용자 정의 가능한 탭 인디케이터
다중 플랫폼 지원
내장된 전환 애니메이션
기존 Flutter 프로젝트와의 간편한 통합
적합한 대상
독특한 UI 컴포넌트를 찾는 개발자
직관적인 탭 탐색이 필요한 앱
레트로 모던 감성을 추구하는 디자이너
여러 운영 체제를 대상으로 하는 프로젝트
장치 간에 일관된 UX를 원하는 팀
고려 사항
피벗 스타일 탭 레이아웃으로 제한
복잡한 사용 사례를 위해 추가 스타일링이 필요할 수 있습니다
3~5개 탭을 가진 앱에 가장 적합
매우 동적 또는 중첩된 탐색에 적합하지 않음
오래된 기기에서는 성능이 다를 수 있습니다
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
wp_pivot_flutter
A Flutter package inspired from Windows Phone Style Pivot Tabs
2026 Update: This project is evolving beyond the Pivot control into a systematic,
research-driven recreation of the Windows Phone UI in Flutter. The first published
Pivot study uses the WP8.1 emulator; Lumia 1020 validation remains pending. See
docs/ROADMAP.md for the vision and methodology,
and the research site at chinmaykabi.com/wp_pivot_flutter
for the study, project status, and source material.
Requirements
Version 2.3.0 requires Flutter 3.22.0+ and Dart 3.4.0+. See the
changelog for release details and pub.dev
for registry availability. A merged version is not automatically published.
The repository's example app uses Flutter 3.44+ for its current Android
toolchain; the package library itself retains the 3.22 minimum.
Full Pivot: native layout and motion
WpPivotView owns both the headers and page content. It follows measurements from
Microsoft's real Pivot control running on the WP8.1 emulator: cyclic headers,
drag tracking, release-time selection, and separate outgoing/incoming content
animations. See the evidence study for recordings,
methodology and known limits. Emulator evidence is not labeled as Lumia evidence.
An optional PivotController drives selection; dispose controllers you create.
onChanged reports committed selections. Pages keep their state while hidden.
Arrow keys navigate, headers support keyboard focus and semantic selection, and
the system reduced-animation setting removes the spatial transitions. wrap: false disables cycling at the ends. Give the view a bounded width and height.
Geometry scales from a 480-unit reference viewport. Header and title font families,
weights, colors, and PivotMotion parameters can be customized. The package bundles
unmodified Selawik 1.01 under the SIL Open Font License;
no proprietary Segoe font files are redistributed. Selawik is a fallback, not an
identical copy of Segoe WP. Source and hashes are in assets/fonts/SOURCE.json.
Migrating the example
Replace the WpPivot app bar plus external PageView with one WpPivotView, move
the page widgets into children, and remove the two-controller synchronization.
The full view reproduces native content phases that a stock PageView does not.
The existing WpPivot header-only API and PivotController remain available.
Current fidelity limits
The native font and rasterizer differ from Flutter's. Capture timing is too coarse
to establish physical display latency; flick parameters remain provisional beyond
the recorded inputs. The regression suite replays 21 native core, 21 confirmation
and nine header/title input traces, including successful flicks, cancellations,
reversal, wrapping and ignored gestures during transitions. Header and title swipes
share the content gesture surface. A separate release-web runtime probe measures
real engine frame timing, not physical display latency or Lumia performance.
Independent hardware validation and broader gesture sampling remain separate work.
Launcher UI primitives
The experimental wp_components.dart entrypoint now contains the reusable UI
layer needed to compose a Windows Phone-style launcher without putting launcher
policy into this package:
WpPhoneTheme, WpTile, and WpTileGrid provide the palette, touch tilt,
controlled edit affordances, and explicit four-column layout.
WpAppListView, WpAppListHeader, WpAppListRow, and WpAlphabetGrid
reproduce the measured list and jump-grid geometry while leaving app data,
sorting, and selection destinations with the caller.
WpSplitSurfaceView provides the two-surface commit/cancel drag between Start
and the app list.
WpStaggeredSceneTransition applies a caller-driven perspective entry/exit
to one item. The caller supplies scene ordering and transform origin and still
decides when navigation happens.
Run flutter run -t lib/launcher_components.dart from example/ for a complete
composition using placeholder content. The package deliberately does not request
the Android home role, enumerate installed packages, launch intents, persist pins,
order apps, or schedule live data.
At the 480 x 800 evidence viewport, held-out comparisons found zero edge error
for 11 tile surfaces, 10 app-list slots, and 28 alphabet cells. Four held-out
lateral commit/cancel replays in both directions ended on the correct page with
zero final/separation error; presentation-registered tracking p95 ranged from
3.4 to 22.5 px within the 36 px host-capture uncertainty bound. Raw host timing
error is retained separately because emulator timestamps do not identify guest
presentation. The staggered scene pose is evidence-informed and visually
inspected, but exact native timing and transformed polygons are not claimed.
See the component contract and
runtime report.
Legacy header-only example
Selection state is managed by a PivotController - pass your own to drive the
pivot from the outside, or let the widget create one internally.
Application Bar, Panorama, ToggleSwitch, Slider, ProgressBar, TiltEffect, and the launcher UI primitives are available through the separate
package:wp_pivot_flutter/wp_components.dart import. From example/, run
flutter run -d chrome -t lib/components.dart to try them together.
They are experimental. The three micro controls have repeated WP8.1 emulator
measurements and held-out comparisons; the earlier component batch remains pilot
evidence. See the component studies for evidence,
known differences, and the reusable capture/replay workflow. Emulator results do
not establish Lumia hardware fidelity. The existing Pivot API is unchanged.
Contributors ✨
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
Starware
wp_pivot_flutter is Starware.
This means you're free to use the project, as long as you star its GitHub repository.
Your appreciation makes us grow and glow up. ⭐