NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #967 most downloaded on pub.dev
A custom WidgetsBinding that simulates device characteristics (screen metrics, safe areas, locale, brightness, text scale, accessibility flags, target platform) at the engine-abstraction level. No in-app UI — driven programmatically and by a DevTools extension.
Last release 1 months ago
25 Aug 2026
Ships unpredictably
gaps range from 8 days to 2.0 years
Nearly every release is documented
notes for 36 of 37 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
87 releases · first in 2019
The stable 3.0 release — a from-scratch rebuild of Device Preview. If you are coming from 2.x, see Migrating from 2.x in the README: the integration i
The stable 3.0 release — a from-scratch rebuild of Device Preview. If you are
coming from 2.x, see Migrating from 2.x in the README: the integration is
now a single line and the in-app toolbar is gone.
The one-paragraph version: a custom WidgetsBinding simulates device
characteristics (screen metrics, safe areas, orientation, folds, keyboard
insets, locales, brightness, text scale, accessibility flags, 24-hour time,
target platform) at the engine-abstraction level, so your app reads them
through the same MediaQuery, layout and locale-resolution paths it uses on a
real device — no widget wrapper, no in-app UI, nothing shipped in release
builds. The simulation is driven from the bundled Flutter DevTools
extension, from Dart through DevicePreview.controller, or from widget
tests via DevicePreviewBindingMixin.
Highlights, relative to 2.x:
DevicePreview.enable(); runApp(MyApp()); — nouseInheritedMediaQuery, no locale/builder glue onMaterialApp. Off in release builds by default, with zero footprint.applyPreset, setOrientation,update(copyWith), applyJson, registerPreset, reset — and the sameapplyPreset shows the framedDotGridDecorationDeviceSimulation.keyboardInset from Dart) raises it. It arrives asMediaQuery.viewInsets.bottom, so resizeToAvoidBottomInset,SystemUiSimulation.platform (stamped from theDevicePreset.resolve and by the DevTools panel) decides theSystemUiOverlayStyle background colors.Breaking (from the prereleases, for completeness): DevicePreview.enable's
flag is the named enabled parameter; iPad preset ids/names carry their chip
(iPadPro11M4, …); minimum Flutter is 3.47.0 / Dart 3.8.
On pub.dev: https://pub.dev/packages/device_preview/versions/3.0.0
One column per quarter.
device_preview 3.0.0-prerelease7
device_preview 3.0.0-prerelease7
The 3.0 candidate — a from-scratch rebuild of Device Preview, feature-complete and awaiting field feedback before the stable release. If you are coming from 2.x, see Migrating from 2.x in the README: the integration is now a single line and the in-app toolbar is gone.
The one-paragraph version: a custom WidgetsBinding simulates device
characteristics (screen metrics, safe areas, orientation, folds, keyboard
insets, locales, brightness, text scale, accessibility flags, 24-hour time,
target platform) at the engine-abstraction level, so your app reads them
through the same MediaQuery, layout and locale-resolution paths it uses on a
real device — no widget wrapper, no in-app UI, nothing shipped in release
builds. The simulation is driven from the bundled Flutter DevTools
extension, from Dart through DevicePreview.controller, or from widget
tests via DevicePreviewBindingMixin.
Highlights, relative to 2.x:
DevicePreview.enable(); runApp(MyApp()); — no
builder wrapper, no useInheritedMediaQuery, no locale/builder glue on
your MaterialApp. Off in release builds by default, with zero footprint.applyPreset, setOrientation,
update(copyWith), applyJson, registerPreset, reset — and the same
simulation in widget tests for golden matrices over many devices.applyPreset shows the framed
device with a live-tinted status bar and gesture pill even without DevTools
attached (goldens, CI), painted over the default DotGridDecoration
letterbox.DeviceSimulation.keyboardInset from Dart) raises it. It arrives as
MediaQuery.viewInsets.bottom, so resizeToAvoidBottomInset,
scroll-into-view and the collapsing bottom safe area all behave as they do
on the device — which is how a form gets checked against the keyboard from
a desktop that has none. While a device is simulated it is also the only
keyboard the app sees: the host's own keyboard inset is no longer mapped
into the simulated screen, where it stood for a length of the wrong
display.SystemUiSimulation.platform (stamped from the
preset by DevicePreset.resolve and by the DevTools panel) decides the
platform-specific paint behavior, so an app running on an Android host no
longer tints a simulated iPhone's status bar and home-indicator band with
its Android SystemUiOverlayStyle background colors.Breaking (from the prereleases, for completeness): DevicePreview.enable's
flag is the named enabled parameter; iPad preset ids/names carry their chip
(iPadPro11M4, …); minimum Flutter is 3.47.0 / Dart 3.8.
Rebuilds the bundled DevTools extension so the panel ships the dark-grey iPhone SE home button.
Rebuilds the bundled DevTools extension so the panel ships the dark-grey
iPhone SE home button.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01Dj2sLPEMBaQavFfSHsyG7M
Co-Authored-By: Claude Fable 5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01Dj2sLPEMBaQavFfSHsyG7M
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01Dj2sLPEMBaQavFfSHsyG7M
DevicePresets are now generated from the shared device spec
catalog (device_specs/ at the repository root) and carry the complete
spec — frame artwork and system UI included — identical to what the
DevTools panel pushes. applyPreset therefore shows the framed device
without DevTools attached (golden tests, CI). Every preset keeps its name
and id; unreferenced presets still tree-shake away, artwork included.
Regenerate with dart run tool/generate_presets.dart after editing a spec
(a guard test fails when the checked-in catalog is stale).DotGridDecoration: a dark grey with a subtle dot pattern (in real
pixels, so its density does not change with the device or the fit scale),
which keeps dark device bodies readable where the engine's plain black
swallowed them. DevicePreview.enable's backgroundDecoration now
accepts any Decoration (not only BoxDecoration), is painted in real
logical pixels, and null now explicitly leaves the area unpainted.DevicePreviewController.applyJson(json): decodes a device spec
(a JSON string or map in the device_specs/*.json / DevicePreset.toJson()
format, frame artwork and system UI included), registers it as a preset and
applies it.DevicePresets.iPhoneSe3, with the
Home-button chassis, a 20 pt status bar and no other safe area — iPad Pro
11"/13" (M5), iPad Air 11"/13" (M2) and (M4), iPad (A16) and iPad (10th
gen). The iPad Airs' M3 entries became the M4 generation (same chassis and
metrics). Removed iPhone 16e (DevicePresets.iPhone16e), which Xcode no
longer offers as an iOS 26.5 destination.apple-ipad-pro-11 → apple-ipad-pro-11-m4
(DevicePresets.iPadPro11M4), apple-ipad-air-11 →
apple-ipad-air-11-m4 (iPadAir11M4), and likewise for the 13" models;
apple-ipad-mini keeps its id but is named "iPad mini (A17 Pro)".device_preview 3.0.0-prerelease4
device_preview 3.0.0-prerelease4
.claude/skills/extract-cupertino-specs/ for the extraction process.DevicePresets.DevicePresets,
fixtures and the bundled catalog updated together..claude/skills/extract-pixel-specs/): frame artwork,
screen shape and the camera punch-hole cutout come from the official
emulator device skins (Android Studio 2026.1), and the metrics from a
booted Android 16 emulator. Pixel 9/10 sizes are now the exact
411.43×923.43 a device reports (was the rounded 412×923), the fold is
851.69×882.87 with its crease recentred accordingly, and the safe areas
match today's Android 16 system bars — including its taller status bar
(54 dp portrait / 52 landscape on the slabs; 36/56 on the fold, bottom
24 and 32 respectively). Specs, built-in DevicePresets and the bundled
catalog all updated together; the frames now show each device's punch
hole (top-centre on the slabs, top-right on the fold's inner display).PreviewPlatformDispatcher forwards
the new PlatformDispatcher.onHitTest callback. The minimum Flutter
version is now 3.47.0.DevicePresets.pixel10ProFold), Galaxy Z Fold8 (galaxyZFold8),
Galaxy Z Fold8 Ultra (galaxyZFold8Ultra) and Galaxy Z Flip8
(galaxyZFlip8), 26 devices in all. Each simulates its unfolded inner
display and reports the crease as a fold display feature
(postureFlat), so hinge-aware layouts such as two-pane split at the
fold, in both orientations.package:device_preview/presets.dart now re-exports
SimulatedDisplayFeature, which the foldable presets carry.Co-Authored-By: Claude Fable 5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01BiPh7GeUbFMxmaCZYBAkyL
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01BiPh7GeUbFMxmaCZYBAkyL
DevicePreview.enable gained padding and backgroundDecoration
parameters: padding reserves room around the simulated device when it is
fitted into the real window, and backgroundDecoration paints the window
behind the device (the letterbox). Both are latched at enable time, like
enabled.DevicePreview.enable's positional flag became the named
enabled parameter — DevicePreview.enable(kDebugMode) is now
DevicePreview.enable(enabled: kDebugMode).example/lib/showcase.dart)
that makes every simulated characteristic visible: labeled safe-area bands,
a locale- and 24-hour-aware clock, a hinge-aware two-pane layout, and an
animation that honors disableAnimations.Device catalog refreshed to the two latest generations — 22 devices:
Device catalog refreshed to the two latest generations — 22 devices:
DevicePresets.iPhoneSe3), Pixel 8
(DevicePresets.pixel8) and Pixel Tablet (DevicePresets.pixelTablet);
the generic desktop windows remain. Apps that referenced the removed
presets can keep the metrics as custom DevicePresets via
registerPreset.device_preview 3.0.0-prerelease1 — binding-level simulation rebuild, …
device_preview 3.0.0-prerelease1 — binding-level simulation rebuild, …
The 3.0 release is a from-scratch rebuild: a custom WidgetsBinding that
simulates device characteristics (screen metrics, safe areas, locale,
brightness, text scale, accessibility flags, target platform) at the
engine-abstraction level. There is no in-app UI — the simulation is driven
programmatically through DevicePreview.controller and from the bundled
Flutter DevTools extension. See the README for the full feature tour and the
2.x migration notes, and the 3.0.0-dev.* entries below for the rebuild's
incremental history.
Changes since 3.0.0-dev.2:
DevicePreviewBindingMixin.latchConfiguration is now sentinel-based:
DevicePreview.enable() after latchConfiguration(initialSimulation: ...)
no longer silently discards the latched simulation (the documented
golden/CI startup sequence).setOrientation keeps the active frame and systemUi artwork when the
simulation was pushed from DevTools (rotation is not a device switch).applyPreset and setOrientation now preserve touchInput and
showSystemUi, matching the DevTools panel's definition of
device-switch-surviving overrides.MediaQuery.padding now collapses where the real keyboard's
viewInsets overlap it, matching real engine behavior.fill="currentColor" now follows the paint-time tint (the
app's SystemUiOverlayStyle) even nested under groups with an explicit or
none fill, per CSS currentColor semantics.viewPadding now falls back through
landscapePadding exactly like DevicePreset.resolve, so DevTools and
applyPreset produce identical metrics for every catalog device.invalidParams) no longer flips the
panel to the "isolate paused" empty state; the panel re-fetches the app's
actual state instead.tool/check_release.sh runs it), a production-composition
host-resize seam test, and screenshot capture tests.Adds padding property to DevicePreview to allow custom padding around the device frame.
DevicePreview to allow custom padding around the device frame.Updated dependencies and adding support for Flutter 3.32.
Updated dependencies and adding support for Flutter 3.2.
Updated dependencies and adding support for Flutter 3.0.
Nothing published for this version
Updated device_frame which added new android devices and fixed padding.
Missing export of DeviceScreenshot.
DeviceScreenshot.Added device type section headers
Updated device_frame which added a new list of devices.
Added conditional import for web, to improve the pub.dev score.
Nothing published for this version
Removed generated files from example.
Fixed SVG issue with custom device.
enabled issue.Upgraded device_frame dependency.
device_frame dependency.Added DevicePreview.selectedDevice method.
DevicePreview.selectedDevice method.Added DevicePreview.availableDeviceIdentifiers method.
DevicePreview.availableDeviceIdentifiers method.Upgraded device_frame dependency.
* Upgraded provider dependency.
Adaptative layout to make the tool easier to use on mobile.
Removed DevicePreview.appBuilder to switch to newer useInheritedMediaQuery property instead.
DevicePreview.appBuilder to switch to newer useInheritedMediaQuery property instead.Removed dependency to awesome_fonts
Fixing basicLocaleListResolution throwing imported from multiple packages conflict error.
basicLocaleListResolution throwing imported from multiple packages conflict error.* Fixing missing part file.
Fixed issue on web with null empty locale list.
Fixed initialization null check.
Upgraded dependencies for Flutter 2.0.
Added Directionality to overlay.
Added styling options to hide toolbar buttons.
defaultDevice.Support for MediaQuery.maybeOf Flutter API breaking change.
MediaQuery.maybeOf Flutter API breaking change.Fixed an issue with language picker.
Fixed issue with [DevicePreview.selectDevice] method.
Added the [DevicePreview.selectDevice] method.
Removed Flutter plugin directories.
* Fixed linting issues.
* Updated documentation
Fix shared preferences plugin navigation restoration issues.
* Fix styling issues.
* Fix issue when not enabled.
* Fixed several styling issues. * Fix issue when not enabled.
* Added the plugin system.
* Fixed device screen clip.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fixed hidden popovers when not fullscreen.
* Improved loading time.
Keeping state of application when enabling/disabling preview.
* Custom device selector.
* Added linux devices.
Fixed issues with conflicting global key.
Fixed issues with MaterialLocalization.
Your coding agent can read these notes before it upgrades. Set up the MCP server →