fl_utilities 3.0.1
fl_utilities: ^3.0.1 copied to clipboard
Simple Flutter utilities such as [BuildContext] shorthands extension, `debounce` extension on [ValueChanged], and more.
Changelog #
3.0.0 - 2025-02-20 #
⚠ BREAKING CHANGES #
-
refactor!: remove [DialogPage] and [usePathUrlStrategy] since its not part of flutter SDK
-
refactor!: rename [CustomListView] into [FlexItemListView]
Functionality and API still same as the old one, only the name is changed and deprecated props are removed.
import "package:flutter/material.dart"; import "package:fl_utilities/fl_utilities.dart"; final myWidget = FlexItemListView( // adjust default item delegate here viewDelegate: FlexItemListViewDelegate( mainAxisLength: 200.0, crossAxisLength: 400.0, // alignment can also be specified crossAxisAlignment: FlexItemListViewAlignment.center, ), children: [ FlexItemListViewItem( // overrides default mainAxisLength: 400.0, crossAxisLength: 200.0, crossAxisAlignment: FlexItemListViewAlignment.start, child: Text('Title'), // actual item that will be displayed ), FlexItemListViewItem(child: Card()), ], // Or you can do mapping for existing list of widgets. // children: items.map((item) => FlexItemListViewItem(child: item)).toList(), ); -
feat: add
MediaQuery.<prop>Ofshorthands on [BuildContext]So instead of
context.mediaQuery.size, now you can docontext.mediaSize -
refactor: update SDK constraints
-
docs: add docs.page
-
chore: add github templates
2.0.1 #
-
feat:
CustomListViewDelegate, default item delegate for theCustomListViewchildren. Used onCustomListView.viewDelegate. -
deprecated:
CustomListView.crossAxisAlignment, is now deprecated in favor ofCustomListView.viewDelegate.Instead of:
CustomListView( crossAxisAlignment: CustomListViewItemAlignment.end, );Do:
CustomListView( viewDelegate: CustomListViewDelegate( crossAxisAlignment: CustomListViewItemAlignment.end, // can also specify other [CustomListViewItemDelegate] values // mainAxisLength: 80.0, // crossAxisLength: 80.0, ), );
2.0.0 #
Added #
-
CustomListView], a customListView` with customizeable children. -
CustomListViewItemDelegate, delegate to customizeCustomListViewitem. -
CustomListViewItemAlignment, an enum to control item cross axis alignment ofCustomListView. -
CustomListViewItem, a widget implementation forCustomListViewItemDelegate, not to be used directly.
Removed #
SizedScrollableArea
Breaking Changes #
The main reason why SizedScrollableArea exist because there's some cases that
we need to modify the ListView item cross axis length, but we still wanted the
scroll area fill the whole screen.
But why replace SizedScrollableArea with CustomListView?
- The
SizedScrollableAreawidget is too verbose (Need same controller to control scroll). - The
CustomListViewwidget is more flexible because it just aListViewwith some extra features (such as manipulate cross axis length). - And actually
SizedScrollableAreais not stable yet (too much bugs).
Migrate Guide #
-
SizedScrollableArea->CustomListViewBefore:
PrimaryScrollController( controller: ScrollController(), child: Stack( fit: StackFit.expand, children: [ const SizedScrollableArea(primary: true), // Center( // alignment? child: SizedBox( width: 200.0, // cross axis length child: ListView( primary: true, children: [ const SizedBox( height: 200.0, // main axis length child: const Card(), ), ], ), ), ), ], ), );After:
CustomListView( crossAxisAlignment: CustomListViewItemAlignment.center, // default children: [ CustomListViewItemDelegate( mainAxisLength: 200.0, crossAxisLength: 200.0, child: Card(), ), ], );
0.1.1 #
0.1.0 #
Added #
Extensions
-
on
BuildContext:theme, shorthand forTheme.of(context).colorScheme, shorthand forTheme.of(context).colorScheme.textTheme, shorthand forTheme.of(context).textTheme.mediaQuery, shorthand forMediaQuery.of(context).scaffold, shorthand forScaffold.of(context).scaffoldMessenger, shorthand forScaffoldMessenger.of(context).
-
on
Text:applyOpacity, create a copy ofTextwith applied opacity.
-
on
ValueChanged:debounce, prevent callback from being called too often.
Widgets
SizedScrollableArea, a scrollable area that can be sized. It act as extra scrollable area (which detect touch and mouse wheel pointer) if yourScrollablewidget must have fixed size.
Misc
-
DialogPage, utilities for "go_router" package to show dialog. Did'nt depend on "go_router" package so "fl_utils" can be used without it. -
useUrlPathStrategy, use path url strategy to remove hash from url path