A streamlined Flutter package designed to minimize the code required for creating stunning user interfaces.
Tired of wrapping your widgets inside a Expand widget to make them expanded? You can use the expanded
widget to avoid wrapping multiple layers of widgets around your widget and make it more readable.
// Before
Expanded(child: YourCustomWidget())
// After
YourCustomWidget().expanded
Extensions don't end there. You can also recursively call extensions on extensions to achieve the UI you desire and make your code more readable. For example:
// Before
Column(
children: [
Expanded(
child: Padding(
padding: EdgeInsets.all(16),
child: Container(
child: Align(
alignment: Alignment.topCenter,
child: Text('Test'),
),
),
),
),
Expanded(
child: Padding(
padding: EdgeInsets.all(8),
child: Container(
child: Align(
alignment: Alignment.centerRight,
child: Text('Test'),
),
),
),
)
],
);
// After using extensions
Column(
children: [
Container(
child: Text('Test').alignTop,
).withPadding(s16Padding).expanded,
Container(
child: Text('Test').alignRight,
).withPadding(s8Padding).expanded,
],
);
As you saw from the code above, you can use the pre-defined constants in Moye for padding, dimensions, and spaces. Moye currently has lots of extensions to meet your demands, however, please open a new request if your use-case has not been covered yet.
Pre-defined constants in Moye allow you to easily integrate them with your projects and keep it clean.
High usage padding patterns has been covered in this package. You can see the difference between before and after here:
// Before
1. const EdgeInsets.all(8)
2. const EdgeInsets.symmetric(vertical: s8)
3. const EdgeInsets.symmetric(horizontal: s8)
// After
1. s8Padding
2. s8VerticalPadding
3. s8HorizontalPadding
Boxes allow you to define spaces between different widgets.
// Before
1. SizedBox()
2. SizedBox(width: 8)
3. SizedBox(height: 8)
// After
1. empty
2. s8WidthBox
3. s8HeightBox
Add gradient overlays on top of your widgets to make them unique. You can apply these shaders on top of Text, Image, and any widget that you currently have. Gradient overlay also has an extension which can easily be invoked on any widget!
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text('Gradient Overlay', style: context.textTheme.headlineLarge.bold),
s8HeightBox,
Text('Here is how gradient overlay looks' * 5)
],
).withGradientOverlay(
gradient: LinearGradient(
colors: [
context.colorScheme.primary,
context.colorScheme.tertiary,
context.colorScheme.primary,
],
),
)
Add a backdrop glow to any widget of your choice. Enhances your UI/UX and makes it more futurisic! You can customize the color, blur radius, and spared radius, and it comes with its own extension!
YourWidget().withGlowContainer(blurRadius: 10)
Make your linear progress bars support both gradient colors and a back glow!
LinearGradientProgressBar(
value: 0.3,
borderRadius: BorderRadius.circular(56),
gradient: LinearGradient(
colors: [
context.colorScheme.primary,
context.colorScheme.tertiary,
],
),
)
Show a feedback to your user while performing an action and debounce any incoming presses onto the button for that duration.
ProgressButton(
onPressed: () async {
await Future.delayed(const Duration(seconds: 1));
},
child: const Text('Progress button - inside loading'),
icon: Icon(Icons.send),
)
Easily show 3 different types of bottom sheets: default, wrap, and scrollable.
BottomSheetUtils.showBottomSheet(
context: context,
borderRadius: BorderRadius.circular(16),
config: WrapBottomSheetConfig(
builder: (context, controller) {
return buildBottomSheetContent(context, 'Wrap',
'This type of bottom sheet wraps its content');
},
),
);
Blur any image and put it behind any widget to enhance your UI/UX.
Container(
width: 100,
height: 100,
).withBackBlurImage(
imageProvider: NetworkImage(
'https://i.natgeofe.com/n/b103fff5-6a84-4d19-b65e-5856998816c3/PIA19952.jpg?w=1440&h=1440')),
)