NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A dependency-light collection of Dart and Flutter extension methods for strings, numbers, dates, collections, colors, widgets, navigation, and more.
Last release 16 days ago
22 Sep 2026
Release timing varies
gaps range from 3 weeks to 1.2 years
Most releases are documented
notes for 5 of 7 stable releases
Nothing withdrawn
no release was ever pulled
2 years old
7 releases · first in 2024
One column per month.
num.toPercentage() no longer corrupts its output: 100 now renders as 100% (previously 1%), 0 as 0%, and the decimals argument is honored.
num.toPercentage() no longer corrupts its output: 100 now renders as
100% (previously 1%), 0 as 0%, and the decimals argument is honored.num.toDecimal() now honors its decimals argument (1.5.toDecimal(decimals: 3)
-> 1.500); it previously ignored it.Map.getOrElse() now distinguishes an absent key from a key whose value is
null (returns the default only when the key is absent).Map.deepMerge() no longer performs an unsound Map cast on nested values.Iterable.whereNotNull() moved from List<T> to Iterable<T?> so it actually
narrows the element type ([1, null, 2].whereNotNull() -> List<int>).BuildContext.navigateAndRestore() now invokes its onBack callback when the
pushed route pops (previously ignored).Image.toBase64() now completes with an error on load/encode failure and
removes its image-stream listener instead of leaking it.Color.toMaterialColor() now follows Material shade direction (50 lightest
towards white, 900 darkest towards black).navigateTo, navigateToReplace, and navigateAndRemoveUntil are now generic
and return Future<T?>; navigateTo's state parameter is typed and documented
as ignored for backwards compatibility.List.isNullOrEmpty() replaced by an isNullOrEmpty getter on Iterable<T>?
(the old method could never be called on null).String.toTitleCase() collapses whitespace; String.truncate() handles
non-positive lengths.dart:core wins
resolution: num.clamp, int.isEven, and int.isOdd. Use the dart:core
members (num.clamp, int.isEven, int.isOdd) directly.CONTRIBUTING.md, CODE_OF_CONDUCT.md, and issue/PR templates.lib/extensions_core.dart — primary library entry point (importing package:extensions_core/extensions_core.dart now works; the existing extensions.dart
lib/extensions_core.dart — primary library entry point (importing package:extensions_core/extensions_core.dart now works; the existing extensions.dart barrel is unchanged and still exported).dart:io usage moved behind conditional imports:
PlatformInfo OS detection no longer imports dart:io directly — new platform_flags.dart with io/web implementations (kIsWeb + Platform on native, all-false-but-web on browsers).File extensions moved to file_io.dart, exported only where dart:io exists — they remain unavailable on the web (documented in the README).repository and issue_tracker, and topics (dart, flutter, extensions, utilities).example/example.dart — runnable demo showing common extensions (adds the pub.dev "package has an example" points).
example/example.dart — runnable demo showing common extensions (adds the pub.dev "package has an example" points).pubspec.yaml description (previous one was too short, costing pub points).example/example.dart to demonstrate extensions from every file in the package.dart:io usages moved behind conditional imports: platform.dart OS detection uses platform_flags.dart (stub/web implementations), and File extensions moved to file_io.dart, exported only where dart:io exists. Added lib/extensions_core.dart as the primary entry point (the extensions.dart barrel still works).TextStyle extension members that collided with instance fields of TextStyle and could never be called: color(), letterSpacing(), wordSpacing(), backgroundColor(), fontFamily(), decorationThickness(), and the no-op align(). Use copyWith(color: …) etc. instead.flutter analyze and dart format clean, local pana score 160/160.object.dart: let, also, run, isNull, isNotNull
object.dart: let, also, run, isNull, isNotNullduration.dart: inWeeks, format()edge_insets.dart: EdgeInsets.copyWith()form_validators.dart: requiredField, emailValidator, phoneValidator, minLengthValidator, maxLengthValidatorString: case conversion (toCamelCase, toPascalCase, toSnakeCase, toKebabCase), safe parsing (toIntSafe, toDoubleSafe, toBool), slicing (before, after, between, replaceLast, countOccurrences), isNullOrEmpty (nullable), slugify, collapseWhitespace, initials, masked, isStrongPassword, containsSpecialCharacter, isAlphanumeric, isJson, onlyDigits, withoutDigitsNumber/int: isPositive, isZero, isDivisibleBy, percentageOf, formatBytes, isEven, isOdd, ordinal, toBinary, toOctal, toHexDateTime: isTomorrow, isSameDay/Month/Year, isBetween, isWeekend, isWeekday, isLeapYear, quarter, startOf/endOf (day, week, month, year), tomorrow, yesterday, copyWith, ageInYearsIterable: distinctBy, countWhere, containsAll, containsAny, zip, unzip, flatten, insertBetween; sum, min, max, average on Iterable<num>List: rotateMap: invert, getOrPut, merge, pick, omit, filterKeys, filterValues, keysOfColor: colorFromHex(), darken, lighten, inverse, complementary, hue, saturation, brightness, withBrightness, isTransparent, toMaterialColorBuildContext: mediaQuery, safePadding, locale, textDirection, orientation, isPortrait, isLandscape, devicePixelRatio, textScaler, hideKeyboardWidget: margin, background, border, tooltip, onLongPress, onDoubleTap, inkWell, visible, safeArea, blur, rotated, scaled, constrained, aspectRatio, width, heightNavigation: canPop, maybePop, popWithResult, popToFirst, currentRouteName, pushWithSlide, showSheet, showAppDialogFile: isImage, isVideo, isAudio, sizeInMB, readAsStringSafePlatformInfo / TargetPlatformInfo replace the private _Platform / _TargetPlatform (accessible from app code).>=3.27.0 for the modern wide-gamut Color API.path_provider, mocktail).Color.toHex() returned incorrect values on Flutter ≥3.27 (alpha/red/green/blue now return 0–255, breaking the old math); now uses the a/r/g/b accessors.File.sizeFormatted() crashed on empty files (log(0) → -inf); now returns 0 B.test/extensions_test.dart covering all new extensions (36 tests).Updated intl package to ^0.20.2
intl package to ^0.20.2flutter_lints to ^6.0.0padding() - Wrap widget with paddingcenter - Center widgetexpanded - Expand widgetflexible() - Make widget flexibleonTap() - Add tap gesture detectoralign() - Align widgetsize() - Wrap with SizedBoxopacity() - Add opacitycircular() - Clip with circular border radiuselevated() - Add card elevationNothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →