max_ui_v1 1.1.1
max_ui_v1: ^1.1.1 copied to clipboard
!!Only basic widgets available. Nothing special in this update, wait for the update - version: 1.5.0!!
Max UI V1 #
A production-ready Flutter UI component library with theme-aware widgets and extensive customization options.
Features #
- MaxUIAppBar — Custom app bar with gradients, shadows, and flexible layout
- MaxUISnackbar — Success, error, warning, and info snackbars
- MaxUIDropdown — Generic dropdown with custom item builders
- MaxUIDropdownField — Labeled pill-style dropdown with loading state
- MaxUITextField — Labeled text field with pill-shaped borders
- MaxUIBottomNavBar — Animated bottom navigation with SVG or icon support
- MaxUIContainer — Container, card, and gradient variants
- MaxUIBottomSheet — Modal bottom sheet with drag handle
- MaxUIImagePickerSheet — Camera / gallery picker UI (UI only)
- MaxUIColors — Global color palette for all form and nav components
Installation #
Add to pubspec.yaml:
dependencies:
max_ui_v1: ^1.0.0
flutter pub get
flutter_svgis included automatically. You only need to declare SVG assets in your app when usingMaxUIBottomNavDestination.iconPath.
Run the example #
cd example
flutter pub get
flutter run
Quick start #
import 'package:max_ui_v1/max_ui_v1.dart';
void main() {
MaxUIColors.configure(primary: const Color(0xFF009688));
runApp(const MyApp());
}
Components #
1. MaxUIAppBar #
Scaffold(
appBar: MaxUIAppBar(
title: 'My App',
actions: [IconButton(icon: Icon(Icons.search), onPressed: () {})],
backgroundColor: Colors.teal,
titleColor: Colors.white,
showShadow: true,
centerTitle: false,
),
body: const SizedBox(),
);
Use titleWidget for a custom title, or decoration to override the entire bar background.
2. MaxUISnackbar #
MaxUISnackbar.success(context: context, message: 'Saved!');
MaxUISnackbar.error(context: context, message: 'Failed!');
MaxUISnackbar.warning(context: context, message: 'Be careful!');
MaxUISnackbar.info(context: context, message: 'Note');
// Full control
MaxUISnackbar.show(
context: context,
message: 'Custom',
type: SnackbarType.info,
backgroundColor: Colors.black87,
duration: const Duration(seconds: 5),
action: SnackBarAction(label: 'Undo', onPressed: () {}),
);
3. MaxUITextField #
MaxUITextField(
label: 'Email',
hint: 'Enter your email',
keyboardType: TextInputType.emailAddress,
prefixIcon: const Icon(Icons.email_outlined),
validator: (v) => v?.isEmpty == true ? 'Required' : null,
onChanged: (v) => print(v),
);
// Full override
MaxUITextField(
label: 'Notes',
hint: 'Type here',
decoration: InputDecoration(
hintText: 'Type here',
border: OutlineInputBorder(borderRadius: BorderRadius.circular(8)),
),
);
4. MaxUIDropdown #
Generic dropdown for any type T.
MaxUIDropdown<String>(
items: const ['A', 'B', 'C'],
value: selected,
hint: 'Pick one',
onChanged: (v) => setState(() => selected = v),
);
// Custom rows
MaxUIDropdown<User>(
items: users,
value: selectedUser,
hint: 'Select user',
itemBuilder: (context, user) => MaxUIDropdownItem(
label: user.name,
leadingIcon: Icons.person,
),
onChanged: (user) => setState(() => selectedUser = user),
);
5. MaxUIDropdownField #
Labeled dropdown with pill styling and a built-in loading state.
MaxUIDropdownField(
label: 'Country',
hint: 'Select country',
value: country,
items: countries,
isLoading: countries.isEmpty,
onChanged: (v) => setState(() => country = v),
);
// Custom menu rows
MaxUIDropdownField(
label: 'City',
hint: 'Select city',
value: city,
items: cities,
itemBuilder: (context, item) => ListTile(title: Text(item)),
onChanged: (v) => setState(() => city = v),
);
6. MaxUIBottomNavBar #
int _index = 0;
Scaffold(
body: Center(child: Text('Tab $_index')),
bottomNavigationBar: MaxUIBottomNavBar(
currentIndex: _index,
onTap: (i) => setState(() => _index = i),
destinations: const [
MaxUIBottomNavDestination(icon: Icons.home_outlined, label: 'Home'),
MaxUIBottomNavDestination(icon: Icons.person_outline, label: 'Profile'),
],
),
);
// With SVG assets (declare in your app's pubspec.yaml)
MaxUIBottomNavDestination(
iconPath: 'assets/icons/home.svg',
label: 'Home',
)
Use itemBuilder for fully custom tab widgets, or pass colors via selectedColor / unselectedColor.
7. MaxUIContainer #
// Basic
MaxUIContainer(
padding: const EdgeInsets.all(16),
borderRadius: 12,
backgroundColor: Colors.white,
showShadow: true,
child: const Text('Hello'),
);
// Card (tappable with ripple)
MaxUICard(
onTap: () => print('tapped'),
child: const Text('Card content'),
);
// Gradient
MaxUIGradientContainer(
gradient: const LinearGradient(colors: [Colors.blue, Colors.purple]),
child: const Text('Gradient', style: TextStyle(color: Colors.white)),
);
Pass decoration on MaxUIContainer to override the entire box decoration.
8. MaxUIBottomSheet #
MaxUIBottomSheet.show(
context: context,
title: 'Options',
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
ListTile(title: const Text('Edit'), onTap: () => Navigator.pop(context)),
ListTile(title: const Text('Delete'), onTap: () => Navigator.pop(context)),
],
),
);
// Fully custom content
MaxUIBottomSheetBuilder.showCustom(
context: context,
builder: (context) => MyCustomSheet(),
);
9. MaxUIImagePickerSheet #
UI only — wire up your own image_picker or native logic in the callback.
MaxUIImagePickerSheet.show(
context: context,
onSourceSelected: (source) {
if (source == ImagePickerSource.camera) {
pickFromCamera();
} else {
pickFromGallery();
}
},
);
// Hide options / customize labels and icons
MaxUIImagePickerSheet.showAdvanced(
context: context,
title: 'Add Photo',
showCamera: true,
showGallery: true,
cameraIcon: Icons.camera_alt,
onSourceSelected: (source) => handleSource(source),
);
Theming #
MaxUIColors #
Set brand colors once for all form and navigation widgets:
MaxUIColors.configure(
primary: const Color(0xFF009688),
border: const Color(0xFFE0E0E0),
textDark: const Color(0xFF212121),
fieldFill: const Color(0xFFF8F8F8),
);
MaxUIColors.reset(); // restore defaults
Individual widgets also accept their own color, padding, and style parameters. Pass decoration, InputDecoration, or builder callbacks when you need full control.
Customization cheat sheet #
Quick reference for the most useful knobs per widget. All are optional unless marked required.
Global #
| Knob | Type | Purpose |
|---|---|---|
MaxUIColors.configure(...) |
static | Set primary, border, textDark, fieldFill app-wide |
MaxUIColors.reset() |
static | Restore default palette |
MaxUIAppBar #
| Knob | Purpose |
|---|---|
title required |
Title text |
titleWidget |
Replace default title widget |
leading / actions |
Left and right widgets |
backgroundColor / backgroundGradient |
Bar background |
titleColor / titleStyle |
Title appearance |
height / padding |
Size and insets |
showShadow / elevation / shadowColor / shadowOffset |
Shadow control |
centerTitle / onTitleTap |
Layout and interaction |
decoration |
Full background override |
bottom / bottomBorder / safeAreaTop |
Extra chrome |
MaxUISnackbar #
| Knob | Purpose |
|---|---|
.success / .error / .warning / .info |
Preset types |
message required |
Snackbar text |
backgroundColor / iconColor / textColor |
Override preset colors |
icon / leading / content |
Custom icon or entire content row |
duration / action |
Timing and action button |
margin / padding / width / elevation |
Layout |
borderRadius / shape / behavior |
Shape and floating style |
dismissDirection / showCloseIcon |
Dismiss behaviour |
MaxUITextField #
| Knob | Purpose |
|---|---|
label / hint required |
Label and placeholder |
controller / focusNode / validator |
Form wiring |
keyboardType / obscureText / maxLines / readOnly |
Input behaviour |
prefixIcon / suffixIcon / prefix / suffix |
Field adornments |
onChanged / onFieldSubmitted / onTap / onTapOutside |
Callbacks |
labelStyle / textStyle / hintStyle / errorStyle |
Typography |
fillColor / borderColor / focusedBorderColor / errorBorderColor |
Colors |
borderRadius / borderWidth / contentPadding |
Shape and spacing |
labelSpacing / bottomSpacing / showLabel / labelWidget |
Layout |
decoration |
Full InputDecoration override |
MaxUIDropdown<T> #
| Knob | Purpose |
|---|---|
items / onChanged required |
Data and selection callback |
value / hint |
Current selection and placeholder |
itemBuilder / selectedItemBuilder / hintBuilder |
Custom widgets per row |
enabled / isExpanded / isDense / alignment |
Behaviour and layout |
borderRadius / borderWidth / showBorder |
Shape |
backgroundColor / borderColor / dropdownColor |
Colors |
hintStyle / valueStyle |
Text styles |
dropdownIcon / icon / iconColor / iconSize |
Chevron |
contentPadding / menuMaxHeight / itemHeight / elevation |
Menu sizing |
decoration |
Full outer BoxDecoration override |
MaxUIDropdownField #
| Knob | Purpose |
|---|---|
label / hint / items / onChanged required |
Core field setup |
value |
Current selection |
isLoading / readOnly |
Loading spinner vs disabled |
labelWidget / labelStyle / showLabel |
Label area |
hintStyle / valueStyle / itemStyle |
Text styles |
fillColor / borderColor / dropdownColor / iconColor |
Colors |
borderRadius / fieldPadding / itemPadding |
Shape and insets |
boxShadow / elevation / menuMaxHeight |
Menu depth and size |
dropdownIcon / iconSize |
Chevron |
loadingWidget / loadingHeight |
Custom loading state |
itemBuilder / selectedBuilder |
Custom menu rows |
decoration / dropdownDecoration |
Outer and inner box overrides |
MaxUIBottomNavBar #
| Knob | Purpose |
|---|---|
currentIndex / onTap / destinations required |
Tab state |
MaxUIBottomNavDestination.label required |
Tab label |
icon / iconPath / iconWidget |
Icon source (Material, SVG, or custom widget) |
selectedColor / unselectedColor / backgroundColor |
Colors |
backgroundGradient / boxShadow / borderRadius / border |
Bar chrome |
padding / itemPadding / mainAxisAlignment |
Layout |
selectedScale / scaleDuration / scaleCurve |
Icon animation |
labelStyle / selectedLabelStyle / useMarquee |
Label appearance |
showSafeAreaPadding / extraBottomPadding |
Bottom inset |
itemBuilder |
Full custom tab widget |
decoration |
Full bar background override |
MaxUIContainer / MaxUICard / MaxUIGradientContainer #
| Knob | Purpose |
|---|---|
child required |
Inner content |
backgroundColor / backgroundGradient |
Fill |
padding / margin / width / height |
Size and spacing |
borderRadius / borderColor / borderWidth / border |
Borders |
showShadow / elevation / shadowColor / shadowOffset |
Shadow |
alignment / constraints / clipBehavior |
Layout |
onTap / enableTap |
Tap handling |
decoration |
Full BoxDecoration override (Container only) |
onTap / showRipple |
Tap + ripple (Card only) |
gradient |
Background gradient (GradientContainer only) |
MaxUIBottomSheet #
| Knob | Purpose |
|---|---|
context / child required |
Sheet host and body |
title / titleWidget / header |
Header area |
showDragIndicator / dragIndicatorWidth / dragIndicatorColor |
Drag handle |
maxHeight / constraints / contentPadding |
Size |
backgroundColor / borderRadius / shape |
Appearance |
showCloseButton / closeIcon / titleStyle |
Header controls |
showDivider / dividerColor |
Separator below title |
enableDrag / isDismissible / animationDuration |
Behaviour |
wrapper |
Wrap entire sheet content |
MaxUIBottomSheetBuilder.showCustom + builder |
Fully custom sheet |
MaxUIImagePickerSheet #
| Knob | Purpose |
|---|---|
context / onSourceSelected required |
Show sheet and handle pick |
title / titleWidget |
Header |
cameraLabel / galleryLabel + descriptions |
Option text |
showCamera / showGallery |
Toggle sources (advanced) |
cameraIcon / galleryIcon / cameraLeading / galleryLeading |
Icons |
optionStyle (MaxUIImagePickerOptionStyle) |
Row padding, borders, icon box, text |
optionBuilder |
Full custom option row |
maxHeight / backgroundColor / borderRadius |
Sheet chrome (passed to bottom sheet) |
CharacterBasedMarquee #
Used internally by bottom nav labels; can be used standalone.
| Knob | Purpose |
|---|---|
child required |
Usually a Text widget |
widthInCharacters required |
Scroll threshold |
duration / minDuration / maxDuration |
Scroll speed |
gap / widthFactor / curve |
Animation tuning |
Project structure #
lib/
├── max_ui_v1.dart
└── src/
├── components/
│ ├── appbar/
│ ├── snackbar/
│ ├── text_field/
│ ├── dropdown/
│ ├── dropdown_field/
│ ├── bottom_nav/
│ ├── container/
│ ├── bottom_sheet/
│ └── image_picker_sheet/
├── theme/
│ └── max_ui_colors.dart
└── widgets/
└── character_based_marquee.dart
test/components/ # Widget tests per component
example/ # Demo app (pub.dev standard)
Testing #
flutter test
Example app #
cd example && flutter run
The demo in example/lib/main.dart exercises every component interactively.
Publishing #
This package is configured for pub.dev. Before publishing:
dart pub publish --dry-run # verify no errors
dart pub publish # publish (requires pub.dev login)
Ensure you have publisher rights for the package name max_ui_v1 on pub.dev.
Changelog #
v1.0.0 #
- Initial release with AppBar, Snackbar, Dropdown, Container, Bottom Sheet, Image Picker
- Added MaxUITextField, MaxUIDropdownField, MaxUIBottomNavBar
- Added MaxUIColors and CharacterBasedMarquee
- Extensive customization parameters on all components
License #
MIT License — see LICENSE for details.