save_points_extensions_utils 1.0.2+1 copy "save_points_extensions_utils: ^1.0.2+1" to clipboard
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,
        ],
      ),
    );
  }
}
1
likes
140
points
6
downloads

Publisher

unverified uploader

Weekly Downloads

Extensions and reusable widgets. Provides 100+ widget extensions, data type extensions, form validators, spacing utilities, and more. Zero dependencies, fully documented, production-ready.

Homepage

Topics

#extensions #widget #utils #validators #spacing

Documentation

API reference

License

MIT (license)

Dependencies

cupertino_icons, flutter

More

Packages that depend on save_points_extensions_utils