mobikul_flutter_form_validator 0.0.1 copy "mobikul_flutter_form_validator: ^0.0.1" to clipboard
mobikul_flutter_form_validator: ^0.0.1 copied to clipboard

Enterprise-ready Flutter form validation foundation with planned sync, async, localized, and extensible validators.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:mobikul_flutter_form_validator/mobikul_flutter_form_validator.dart';

void main() {
  runApp(const MobikulValidatorExampleApp());
}

/// Runnable pub.dev example for the package.
final class MobikulValidatorExampleApp extends StatelessWidget {
  /// Creates the example app.
  const MobikulValidatorExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Mobikul Validator Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF006B5F)),
        useMaterial3: true,
      ),
      home: const _ExampleHomeScreen(),
    );
  }
}

final class _ExampleHomeScreen extends StatefulWidget {
  const _ExampleHomeScreen();

  @override
  State<_ExampleHomeScreen> createState() => _ExampleHomeScreenState();
}

final class _ExampleHomeScreenState extends State<_ExampleHomeScreen> {
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  final TextEditingController _nameController = TextEditingController();
  final TextEditingController _emailController = TextEditingController();
  final TextEditingController _passwordController = TextEditingController();
  final TextEditingController _confirmPasswordController =
      TextEditingController();

  String _submitStatus = 'Complete the form and submit it.';
  String _structuredSummary = 'Run the structured validation example.';

  @override
  void dispose() {
    _nameController.dispose();
    _emailController.dispose();
    _passwordController.dispose();
    _confirmPasswordController.dispose();
    super.dispose();
  }

  void _submitBasicForm() {
    final isValid = _formKey.currentState?.validate() ?? false;
    setState(() {
      _submitStatus = isValid
          ? 'The native Flutter form is valid.'
          : 'Fix the highlighted fields.';
    });
  }

  void _runStructuredExample() {
    final form = DynamicValidationForm()
      ..register<String>(
        DynamicValidationField<String>(
          key: 'username',
          label: 'Username',
          value: '',
          validators: [Validators.required<String>()],
        ),
      )
      ..register<String>(
        DynamicValidationField<String>(
          key: 'email',
          label: 'Email',
          value: 'developer@example.com',
          validators: [Validators.required<String>(), Validators.email()],
        ),
      );

    final summary = form.accessibilitySummary();
    setState(() {
      _structuredSummary = '${summary.errorCount} error needs attention. '
          'First invalid field: ${summary.firstInvalidFieldKey}. '
          '${summary.announcement}';
    });
  }

  @override
  Widget build(BuildContext context) {
    final theme = Theme.of(context);

    return Scaffold(
      appBar: AppBar(title: const Text('Mobikul Validator Example')),
      body: SafeArea(
        child: SingleChildScrollView(
          padding: const EdgeInsets.all(20),
          child: Center(
            child: ConstrainedBox(
              constraints: const BoxConstraints(maxWidth: 560),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: [
                  Text(
                    'Native Flutter form',
                    style: theme.textTheme.titleLarge?.copyWith(
                      fontWeight: FontWeight.w700,
                    ),
                  ),
                  const SizedBox(height: 12),
                  Form(
                    key: _formKey,
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.stretch,
                      children: [
                        TextFormField(
                          key: const ValueKey('name-field'),
                          controller: _nameController,
                          decoration: const InputDecoration(
                            labelText: 'Name',
                            border: OutlineInputBorder(),
                          ),
                          textInputAction: TextInputAction.next,
                          validator: Validators.required<String>()
                              .toFlutterValidator(),
                        ),
                        const SizedBox(height: 10),
                        TextFormField(
                          key: const ValueKey('email-field'),
                          controller: _emailController,
                          decoration: const InputDecoration(
                            labelText: 'Email',
                            border: OutlineInputBorder(),
                          ),
                          keyboardType: TextInputType.emailAddress,
                          textInputAction: TextInputAction.next,
                          validator: Validators.compose<String>([
                            Validators.required<String>(),
                            Validators.email(),
                          ]).toFlutterValidator(),
                        ),
                        const SizedBox(height: 10),
                        TextFormField(
                          key: const ValueKey('password-field'),
                          controller: _passwordController,
                          decoration: const InputDecoration(
                            labelText: 'Password',
                            border: OutlineInputBorder(),
                          ),
                          obscureText: true,
                          textInputAction: TextInputAction.next,
                          validator: Validators.compose<String>([
                            Validators.required<String>(),
                            Validators.password(
                              minLength: 8,
                              requireUppercase: true,
                              requireLowercase: true,
                              requireNumber: true,
                              requireSpecialCharacter: true,
                            ),
                          ]).toFlutterValidator(),
                        ),
                        const SizedBox(height: 10),
                        TextFormField(
                          key: const ValueKey('confirm-password-field'),
                          controller: _confirmPasswordController,
                          decoration: const InputDecoration(
                            labelText: 'Confirm password',
                            border: OutlineInputBorder(),
                          ),
                          obscureText: true,
                          textInputAction: TextInputAction.done,
                          validator: Validators.compose<String>([
                            Validators.required<String>(),
                            Validators.matchesField<String>('password'),
                          ]).toFlutterValidator(
                            contextBuilder: () => ValidationContext(
                              values: {
                                'password': _passwordController.text,
                              },
                            ),
                          ),
                        ),
                        const SizedBox(height: 12),
                        FilledButton(
                          key: const ValueKey('submit-basic-form'),
                          onPressed: _submitBasicForm,
                          child: const Text('Validate form'),
                        ),
                        const SizedBox(height: 8),
                        Text(_submitStatus),
                      ],
                    ),
                  ),
                  const SizedBox(height: 24),
                  Text(
                    'Structured validation',
                    style: theme.textTheme.titleMedium?.copyWith(
                      fontWeight: FontWeight.w700,
                    ),
                  ),
                  const SizedBox(height: 8),
                  Text(_structuredSummary),
                  const SizedBox(height: 10),
                  OutlinedButton(
                    key: const ValueKey('run-structured-example'),
                    onPressed: _runStructuredExample,
                    child: const Text('Run structured validation'),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}
0
likes
160
points
16
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Enterprise-ready Flutter form validation foundation with planned sync, async, localized, and extensible validators.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter

More

Packages that depend on mobikul_flutter_form_validator