save_points_extensions_utils 1.0.2+1
save_points_extensions_utils: ^1.0.2+1 copied to clipboard
Extensions and reusable widgets. Provides 100+ widget extensions, data type extensions, form validators, spacing utilities, and more. Zero dependencies, fully documented, production-ready.
example/main.dart
// Example demonstrating save_points_extensions_utils
//
// This example showcases various extensions and utilities from the package.
import 'package:flutter/material.dart';
import 'package:save_points_extensions_utils/save_points_extensions_utils.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Save Points Extensions Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
useMaterial3: true,
),
home: const ExamplePage(),
);
}
}
class ExamplePage extends StatelessWidget {
const ExamplePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Extensions Example'),
backgroundColor: context.colorScheme.inversePrimary,
),
body: SingleChildScrollView(
padding: Spacing.all(Spacing.md),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Widget Extensions Example
const Text('Widget Extensions')
.padding(all: Spacing.md)
.center()
.clipRRect(borderRadius: 12)
.decoratedBox(
color: context.colorScheme.primaryContainer,
borderRadius: BorderRadius.circular(12),
)
.margin(bottom: Spacing.md),
// String Extensions Example
_buildSection(
context,
title: 'String Extensions',
children: [
Text('Capitalize: ${"hello world".capitalize()}'),
Text('Capitalize Words: ${"hello world".capitalizeWords()}'),
Text('Is Email: ${"test@example.com".isValidEmail}'),
Text('Is URL: ${"https://example.com".isValidUrl}'),
Text('Truncate: ${"very long text here".truncate(10)}'),
],
),
Spacing.vertical(Spacing.md),
// Number Extensions Example
_buildSection(
context,
title: 'Number Extensions',
children: [
Text('Format: ${42.format(prefix: "Count: ")}'),
Text('Format Currency: ${1234.formatCurrency()}'),
Text('Is Even: ${42.isEven}'),
Text('Is Positive: ${5.isPositive}'),
Text('Duration: ${5.minutes.inSeconds} seconds'),
],
),
Spacing.vertical(Spacing.md),
// DateTime Extensions Example
_buildSection(
context,
title: 'DateTime Extensions',
children: [
Text('Is Today: ${DateTime.now().isToday}'),
Text('Is Past: ${DateTime(2020).isPast}'),
Text('Formatted: ${DateTime.now().toFormattedString()}'),
Text(
'Time Ago: ${DateTime.now().subtract(const Duration(hours: 2)).timeAgo}',
),
],
),
Spacing.vertical(Spacing.md),
// List Extensions Example
_buildSection(
context,
title: 'List Extensions',
children: [
Text('First Or Null: ${[1, 2, 3].firstOrNull}'),
Text('Last Or Null: ${[1, 2, 3].lastOrNull}'),
Text('Distinct: ${[1, 2, 2, 3].distinct}'),
Text('Chunk: ${[1, 2, 3, 4, 5].chunk(2)}'),
],
),
Spacing.vertical(Spacing.md),
// Color Extensions Example
_buildSection(
context,
title: 'Color Extensions',
children: [
Container(
width: 100,
height: 50,
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(8),
),
),
const Text('Original'),
Container(
width: 100,
height: 50,
decoration: BoxDecoration(
color: Colors.blue.darken(0.2),
borderRadius: BorderRadius.circular(8),
),
),
const Text('Darkened'),
Container(
width: 100,
height: 50,
decoration: BoxDecoration(
color: Colors.blue.lighten(0.2),
borderRadius: BorderRadius.circular(8),
),
),
const Text('Lightened'),
],
),
Spacing.vertical(Spacing.md),
// Validators Example
_buildSection(
context,
title: 'Validators',
children: [
Text(
'Email Valid: ${Validators.email("test@example.com") == null}',
),
Text('Required Valid: ${Validators.required("value") == null}'),
Text('Phone Valid: ${Validators.phone("+1234567890") == null}'),
],
),
Spacing.vertical(Spacing.md),
// Debounce & Throttle Example
_buildSection(
context,
title: 'Debounce & Throttle',
children: [
ElevatedButton(
onPressed: () {
final debounce = Debounce(
const Duration(milliseconds: 300),
);
debounce(() {
context.showSnackBar('Debounced action executed!');
});
},
child: const Text('Test Debounce'),
),
Spacing.vertical(Spacing.sm),
ElevatedButton(
onPressed: () {
final throttle = Throttle(
const Duration(milliseconds: 500),
);
throttle(() {
context.showSnackBar('Throttled action executed!');
});
},
child: const Text('Test Throttle'),
),
],
),
],
),
),
);
}
Widget _buildSection(
BuildContext context, {
required String title,
required List<Widget> children,
}) {
return Container(
padding: Spacing.all(Spacing.md),
decoration: BoxDecoration(
color: context.colorScheme.surfaceContainerHighest,
borderRadius: BorderRadius.circular(12),
border: Border.all(
color: context.colorScheme.outline.withValues(alpha: 0.2),
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: context.textTheme.titleMedium?.copyWith(
fontWeight: FontWeight.bold,
),
),
Spacing.vertical(Spacing.sm),
...children,
],
),
);
}
}