Skip to content

feat!: match the 2026 iOS, Android and Chrome settings look - #209

Merged
yadaniyil merged 3 commits into
masterfrom
feat/native-look-2026
Sep 25, 2026
Merged

yadaniyil merged 3 commits into
masterfrom
feat/native-look-2026

Conversation

@yadaniyil

@yadaniyil yadaniyil commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Updates all three styles to match the real 2026 settings apps, measured from screenshots of iOS 27 (simulator), Android 17 (Pixel 10) and Chrome 153. Every supported platform uses one of these styles: iOS/macOS/Windows → Cupertino, Android/Linux/Fuchsia → Material, web → Chrome.

iOS / macOS / Windows

  • 26pt cards with continuous corners (ClipRSuperellipse), 20pt side margins
  • 52pt rows with 17pt text
  • 17pt semibold section headers in the iOS secondary grey (no more all caps)
  • New CupertinoSettingsSwitch matching the iOS 26/27 switch: 63x28 track, 37x24 pill knob, and a Liquid Glass-style lens (59x40) while pressed or dragged. Drawn with a CustomPainter (no shaders, platform views or backdrop filters), measured against the real UISwitch on an iOS 27 simulator. Replaces CupertinoSwitch in iOS-style switch tiles.

Android / Linux / Fuchsia

  • Each tile on its own card, 2dp apart: 20dp corners at the ends of a group, 4dp in between, 16dp margins
  • surfaceContainer page with surfaceBright (light) / surfaceContainerHighest (dark) cards
  • 16sp titles, 12dp vertical padding, switches with a check/cross thumb

Web

  • White page and cards, 8px corners, light shadow, near-black section titles
  • 14px titles, 13px descriptions, 20px leading icons, chevron on navigation tiles
  • 680px content column on wide screens, 16px side margins in narrow windows

Colors set in SettingsThemeData still win. The example's iOS project no longer hard-codes a signing team. The CHANGELOG notes this as a breaking visual change for 4.0.0. README screenshots are updated, and the example's iOS headers are now sentence case.

Testing

  • 144/144 package tests on Flutter 3.47.2 and 3.44.6, including 7 new tests for the new layout and 15 for the switch
  • 17/17 integration flow tests on an Android emulator and an iPhone simulator
  • Screenshot comparison on both phones and in Chrome, next to the real system settings

🤖 Generated with Claude Code

yadaniyil and others added 3 commits September 24, 2026 19:34
Measured against iOS 27 (simulator), Android 17 (Pixel 10) and Chrome 153:

- iOS/macOS/Windows: 26pt continuous-corner cards, 20pt margins, 52pt
  rows with 17pt text, 17pt semibold section headers, secondary grey
- Android/Linux/Fuchsia: each tile on its own card (20dp group ends,
  4dp inner corners, 2dp gaps) on a surfaceContainer page, 16sp titles,
  tighter rows, check/cross switch thumbs
- Web: white 8px cards with a light shadow, 14/13px text, 20px icons,
  chevrons on navigation tiles, near-black section titles, 680px column

Adds tests for the new layout and updates the README screenshots and
the example's iOS headers to sentence case.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds CupertinoSettingsSwitch, a pure-Flutter copy of the iOS 26/27
UISwitch, measured on the iOS 27 simulator, and uses it in iOS-style
switch tiles instead of CupertinoSwitch.

- Rest: 63x28 continuous-corner track, 37x24 white pill thumb, 2pt
  inset, 22pt travel. OFF #C5C5C7/#5A5A5E, ON system green.
- Pressed or dragged: the thumb springs into a 59.33x39.67 glass lens
  that overflows the track. It is painted with a CustomPainter only:
  a squeezed, lifted track image with flares, refracted bands, a
  hairline rim, a specular line and a soft shadow below.
- Motion: spring press with a small overshoot, frosted phases, and a
  tinted thumb that fades to white after release. Drags follow the
  finger with rubber-banding and flip the value 1pt past the far end.
  Reduced motion skips the lens.
- Horizontal drags only, so lists still scroll. Light haptic on iOS and
  macOS. Toggle semantics, keyboard activation, 50% opacity when
  disabled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
flutter create picked up an unrelated development team when the iOS
runner was regenerated. Leave it unset so contributors choose their own
team in Xcode.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@yadaniyil
yadaniyil merged commit e865e84 into master Sep 25, 2026
3 checks passed
@yadaniyil

Copy link
Copy Markdown
Contributor Author

Merged via #210 and released in 4.0.0.

@yadaniyil
yadaniyil deleted the feat/native-look-2026 branch September 25, 2026 14:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant