material_plus_ui 1.13.0
material_plus_ui: ^1.13.0 copied to clipboard
Material Design 3 for Flutter, written from the specification and extended past it: over 120 components, charts, a data table and a command palette included, themed from one source colour. No dependencies.
Changelog #
The Flutter package, material_plus_ui. The React package keeps its own history in packages/react/CHANGELOG.md, and the two version independently.
vNext (2026--) #
1.13.0 - 2026-11-05 #
This release comes out of running the package on iPhone, iOS Simulator and Android emulator screens in examples/flutter, an app now in the repository with every component in it. A menu row's shortcut is written in MPShortcut's notation, the one change an app will notice without having met a bug. The rest are fixes from those screens: the system back closed the page under an MPConfirmProvider question rather than the question, popups ran off the edge of the screen, a calendar cut the name of its month short, components ran past the edge of a phone, and shortcuts, dates and times were reordered under a right-to-left page.
Changed #
- A
shortcuton a menu row is written inMPShortcut's notation.MPMenuItem,MPMenuCheckboxItemandMPMenuRadioItemprinted the string as they were given it, so theMod+Nthe documentation's menubar wrote, whichMPCommandPalettealready reads that way, came out as the lettersMod+N. It now reads⌘Non a Mac andCtrl+Neverywhere else, as text rather than key caps, and is read out by the names of its keys; a string with no key name in it, such as⌘C, is drawn as it is.
Documentation #
- The Flutter snippets name their pictures by a full address. They named them by the documentation site's own path,
/samples/..., which only resolves on that site, so a snippet copied into an app on a phone or a desktop drew an empty box where the picture should be.
Fixed #
- A progress ring shows whole in the leading slot of an
MPPill. The slot is a glyph's size, 20px on a medium pill, and the smallestMPProgressCircularis 24px across, so an upload pill overflowed its slot and the circle the slot is clipped to kept half a pixel of the ring. Anything larger than the slot is scaled down to it now, and a glyph that fits is drawn at its own size. - An
MPOtpFieldfits a phone. Its slots kept the width of their rung, so six medium slots, 328 wide, ran past the edge of a 360 phone with 24px margins, and a grouped code further still. The slots narrow to fit a row too small for them now, all by the same amount, and keep their height. - An
MPPaginationtoo wide for what holds it goes on to a second line. Eleven cells, which a long list with its edges shown has, ran past the edge of a phone. The cells wrap now, every line centred, and an ellipsis takes the width of a cell rather than a line of its own. - A calendar shows the whole name of its month. The header had the grid's width and no more, so
September,NovemberandDecemberwere cut short at the default size, and nearly every month atxsandsm, inMPCalendarand in the popups of the date pickers. A calendar now widens to its header where the header needs it, as the React popup does, by the room its longest month needs, so it keeps one width from month to month; the grid stays seven cells wide in the middle. - A popup opened beside the edge of the screen stays on it. A popup only flipped to the other side of its anchor, so an
MPPopover,MPPopconfirm,MPTooltip,MPHoverCardor menu centred on a button at the side of a phone ran off the screen and cut its first words off. One that would run off now slides back on to the screen, 8px from the edge, and its arrow moves the other way so it still points at the anchor. The slide is decided when the side is, so it does not move with a scroll. - A horizontal
MPNavigationMenuwider than its room scrolls along. Three items with panels ran past the edge of a phone. The bar scrolls sideways now, and an item the arrow keys reach is scrolled into view with its focus ring; the scroller reaches past the bar by the ring's width, so a ring at the edge is not cut off, and a bar that fits takes the room it took before. - A shortcut reads left to right under a right-to-left page.
MPShortcutlaid its caps out the page's way, soCtrl+Shift+Pcame outP + Shift + Ctrl, and a menu row's⌘⇧Pcame outP⇧⌘. Both run left to right now, as Arabic and Hebrew write a shortcut. - A date or a time a picker shows reads in its own language's direction. Under a page laid out the other way it was reordered: a Korean
2026. 11. 5.under an Arabic page read.5 .11 .2026, and3:30 PMreadPM 3:30. The value inMPDatePicker,MPTimePicker,MPDateTimePickerandMPDateRangePickeris now drawn in the direction of its first letter, as HTML's<bdi>decides it, and placed where the page's text starts. - The system back closes an
MPConfirmProviderquestion instead of the page under it. A provider inWidgetsApp.builder, where its documentation puts it, sits above the navigator and in no route, so Android's back button popped the page the question was asked from and left the question on screen. The back now answers the questionfalse, as Escape does, and a question that is notdismissiblekeeps the back from doing anything.
1.12.0 - 2026-10-30 #
The first release of Material Plus for Flutter: the components of the React package under the same names, the same parameter vocabulary and the same numbers, built on package:flutter/widgets.dart alone, with no dependencies.
Added #
- The components of the React package, under the same
MPnames and the samesize,color,variant,densityandelevationvocabulary: charts, display, feedback, inputs, layout, navigation and transitions. Four React components are not here because they answer problems only the DOM has or that no Flutter gesture means the same everywhere:MPFlex,MPPortal,MPVisuallyHiddenandMPContextMenu. Each one's page names the Flutter equivalent. MPTheme, which derives every colour role from one source colour with the arithmetic of the React token sheet, so the same source colour gives the same hex values in both packages. It also carries MD3's type scale and thematerial,roundedandsharpcorner presets, scopes to a subtree, and follows the platform's brightness when nothing pins it.MPConfigProviderandMPLocaleProvider, which set the defaults and the language for a subtree, as they do in the React package. With no locale anywhere, a component follows the app'sLocalizations.- Eighteen translations under
package:material_plus_ui/locales.dart, the same tables and keys as the React package, registered withregisterMPMessages. The date pickers and the charts carry month and weekday names for the same eighteen languages and English, read off the Unicode CLDR data, with nointldependency. - Selection handles and a text menu on every field that takes text, drawn by the package because there is no Material to borrow them from: a long press on Android selects a word with handles in the theme's primary colour and a menu of cut, copy, paste, select all and share in the field's language, iOS shows its system menu, and a right click on a desktop opens the same menu. The OTP field, whose editor is hidden behind its boxes, has no handles; a long press or a right click there opens a menu with Paste in it.