flutter_helper_utils 6.2.0
flutter_helper_utils: ^6.2.0 copied to clipboard
The Flutter Helper Utils Package offers various extensions and helper methods that can make development more efficient.
Important Notes for Version 4.1.0+: We've refactored the Dart-specific utilities into a new package, dart_helper_utils, to allow Dart projects to use these utilities without depending on Flutter.
- Future updates for Dart-specific utilities will be available in the
dart_helper_utilschangelog. - All the Dart-specific utilities documentation has been moved to the
dart_helper_utilsreadme. - This package already exports
dart_helper_utils, so there are no breaking changes in this version.
Table of Contents #
Featured #
ValueNotifier Supercharged #
ValueNotifier is a simple class in Flutter that allows you to store a value and notify any listeners when the value changes.
This package enhances ValueNotifier with additional functionalities:
Starting from version 4.0.0, you can use a new set of extensions, helper methods, and specialized notifiers for better data handling:
- Instantly create notifiers from any value with the intuitive
.notifierextension (e.g.,10.notifier). - Specific data types using our type-safe notifiers like
ListNotifier,BoolNotifier,IntNotifier, etc. - Use the
.builderextension on anyValueListenable,Listenable, orList<Listenable>instance to create aValueListenableBuilder,ListenableBuilder, orListenablesBuilderrespectively under the hood with a shorter and simpler syntax. - Complex data handling with collections. For example,
ListNotifier, which acts like a normal list andValueNotifierat the same time, allowing usage inforloops, inValueListenableBuilderwidgets, and automatic notifications when inner data changes (same goes for all notifier classes!).
Example:
final counter = 0.notifier;
counter.listenableBuilder((count) => Text('$count'));
counter.increment(); // Increment the counter easily
For more info about ValueNotifier,
check the official Flutter documentation.
PlatformEnv class #
A replacement for the dart:io Platform class.
Key enhancements over the original Platform:
- Eliminates errors caused by using dart:io functionality in web browsers.
- Maintains a familiar API similar to the dart:io Platform class, making migration and usage effortless.
- Handles system-specific properties like the number of processors, path separator, and local hostname, with sensible defaults on web platforms.
Example Usage:
print('TargetPlatform: ${PlatformEnv.targetPlatform}');
print('Is Web: ${PlatformEnv.isWeb}');
print('Is macOS: ${PlatformEnv.isMacOS}');
// and all other Platform getters are supported.
Adaptive UI #
Create responsive layouts for different screen sizes and platforms (mobile, tablet, desktop).
Features #
- Efficient: Rebuilds only when the platform type changes.
- Easy-to-use context extensions: Access platform/orientation information directly.
- Customizable: Define your own breakpoints and helper extensions.
- Layout builders: Convenient widgets for building adaptive UI.
Basic Usage #
PlatformTypeProvider( // Wrap your app
child: MyApp(),
); // optionally receive custom breakpoints.
@override
Widget build(BuildContext context) {
final breakpoint = context.breakpoint; // rebuilds on change.
return breakpoint.isMobile ? const MobileLayout() : const TabletLayout();
}
See the detailed documentation for adaptive ui to explore more.
Extensions #
All the extensions included in the dart_helper_utils package plus:
Listenable & ValueNotifier #
on ValueListenable #
builder: Simplifies the creation of aValueListenableBuilderwidget that reacts to changes in a singleValueListenable.-
final intNotifier = 0.notifier; intNotifier.builder((value) => /* widget reacts to intNotifier changes */ );
-
on Listenable #
.builder: Simplifies the creation of aListenableBuilderwidget that reacts to changes in anyListenable.-
final scrollController = ScrollController(); scrollController.builder((context) => /* widget reacts to scrollController changes */ );
-
on List #
.builder: Creates aListenablesBuilderwidget to efficiently manage and respond to changes in multipleListenableobjects simultaneously, includingValueNotifier,ChangeNotifier, and others. Customize rebuild behavior using the optionalbuildWhenandthresholdparameters.-
final myListeners = <Listenable>[textController, scrollController, anyNotifier]; myListeners.builder((context) => /* widget reacts to myListeners changes */ );
-
ValueNotifier Creation #
.notifier: Converts a value of any type into the correspondingValueNotifiertype/subtype, enabling easy integration into reactive UI components.- e.g.,
final intNotifier = 1.notifiercreates anIntNotifier, akaValueNotifier<int>.
- e.g.,
UI & Design #
Colors #
toHex: Transforms aColorobject into its corresponding hexadecimal string representation.darken,lighten: Adjust color lightness.shade,tint: Create variations by mixing with black/white.contrast: Calculate contrast ratios between colors.complementary: Find the opposite color on the color wheel.blend: Mix colors.grayscale,invert: Convert to grayscale or invert colors.toColor: Creates aColorobject from a valid hexadecimal color string"#FFFFFF".toColor().isHexColor: Determines if a given string is a valid hexadecimal color representation"#FFFFFF".isHexColor().
ThemeData #
isDark,isLight: Checks whether the current theme is in dark or light mode.textTheme: Provides direct access to theTextThemeof the current theme.displayLarge,displayMedium,displaySmall, etc.: Retrieve specific text styles from the theme, optimized for different display sizes.displayLargeCopy,displayMediumCopy,displaySmallCopy, etc.: Retrieve copies of the specific text styles from the theme, allowing modifications without affecting the original theme.
TargetPlatform #
All the above getters are available under both BuildContext instances and TargetPlatform instances.
Native Only Platforms
isMobile: true if running on a mobile device (iOS or Android) natively.isIOS: true if running on iOS natively.isAndroid: true if running on Android natively.isDesktop: true if running on a desktop OS (Linux, macOS, Windows) natively.isMacOS: true if running on macOS natively.isWindows: true if running on Windows natively.isLinux: true if running on Linux natively.isApple: true if running on any Apple platform (macOS or iOS) natively.
Web Platforms
isMobileWeb: true if running on a mobile browser (iOS or Android).isIOSWeb: true if running on iOS in a web browser.isAndroidWeb: true if running on Android in a web browser.isDesktopWeb: true if running on a desktop browser (Linux, macOS, Windows).isMacOSWeb: true if running on macOS in a web browser.isWindowsWeb: true if running on Windows in a web browser.isLinuxWeb: true if running on Linux in a web browser.isAppleWeb: true if running on an Apple platform (macOS or iOS) in a web browser.
BuildContext #
Important Note: Avoid frequent use of context on actions that might call of(context), like theme. The widget registers itself as a dependency on the theme, meaning that if the theme changes (e.g., when switching between light/dark mode), all widgets using Theme.of(context), aka context.themeData, will rebuild, even if they don’t directly depend on the changed theme properties. It’s recommended to use final theme = context.themeData at the top of the widget tree only once.
For Themes #
themeData: Get the currentThemeData.txtTheme: Obtain theTextTheme.brightness: Determine the theme's brightness.sysBrightness: Determine the system's brightness.isDark,isLight: Check if the theme is dark or light.targetPlatform: Get the currentTargetPlatform; all the getters mentioned in TargetPlatform are also available here.withoutEffects(): Remove visual feedback effects (splash, highlight, hover, etc.) from a theme with customizations.
For MediaQuery #
mq: AccessMediaQueryData.nullableMQ: AccessMediaQueryData(nullable).deviceOrientation: Get device orientation.navigationMode: Get navigation mode.padding,viewInsets: Get screen padding and insets.screenDimensions: Get screen width and height.additionalFeatures: Access additional features.
For FocusScope #
focusScope: Get the nearestFocusScopeNode.unFocus: Remove focus.requestFocus: Request focus.requestFocusCall: Request focus (usingGestureTapCallback).hasFocus: Check if a node has focus.hasPrimaryFocus: Check if a node has primary focus.
For Navigation #
popPage: Pop the current page.popRoot: Pop to the root page.navigator: Get theNavigatorState.canPop: Check if you can pop the current page.pPage: Push a new page.pReplacement: Push and replace the current page.pAndRemoveUntil: Push and remove pages until a condition is met.pNamedAndRemoveUntil: Push a named route and remove pages until a condition is met.pNamed: Push a named route.pReplacementNamed: Push and replace the current page with a named route.popUntil: Pop pages until a condition is met.dismissActivePopup: Dismiss the active popup.
Widgets #
Align #
alignAtBottomCenter,alignAtTopLeft,alignAtBottomLeft, etc.: Align a widget within its parent using various alignment options.alignXY: Align a widget using explicit x and y coordinates.alignAtLERP: Align a widget using linear interpolation between two alignments.
Padding #
paddingAll: Add padding on all sides of a widget.paddingLTRB: Add padding with individual values for a left, top, right, and bottom.paddingSymmetric: Add padding symmetrically for horizontal and vertical.paddingOnly: Add padding to specific sides.
More widget extensions to be added soon.
List/Iterable Extensions #
toRow: Convert a list of widgets into aRow.toColumn: Convert a list of widgets into aColumn.toStack: Convert a list of widgets into aStack.toList: Convert anIterableto aList.toListView: Convert anIterableto aListView.
Contributions #
Contributions to this package are welcome. If you have any suggestions, issues, or feature requests, please create a pull request in the repository.
License #
flutter_helper_utils is available under the BSD 3-Clause License.