advanced_forms 0.2.0 copy "advanced_forms: ^0.2.0" to clipboard
advanced_forms: ^0.2.0 copied to clipboard

Flutter form validation and state management — typed controllers for text, checkbox, dropdown and multi-select fields, async and cross-field validators, and subforms.

example/lib/main.dart

import 'package:advanced_forms_example/screens/complex_form.dart';
import 'package:advanced_forms_example/screens/delivery_form.dart';
import 'package:advanced_forms_example/screens/home_page.dart';
import 'package:advanced_forms_example/screens/optimized_rendering_form.dart';
import 'package:advanced_forms_example/screens/password_form.dart';
import 'package:advanced_forms_example/screens/quiz_form.dart';
import 'package:advanced_forms_example/screens/scroll_form.dart';
import 'package:advanced_forms_example/screens/simple_form.dart';
import 'package:advanced_forms_example/screens/step_form.dart';
import 'package:flutter/material.dart';

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

class Routes {
  static const home = '/';
  static const simple = '/simple';
  static const password = '/password';
  static const delivery = '/delivery';
  static const quiz = '/quiz';
  static const complex = '/complex';
  static const scroll = '/scroll';
  static const optimized = '/optimized';
  static const step = '/step';
}

enum ValidationError {
  //common
  empty,
  toShort,
  toLong,

  //password related
  noNumber,
  noSpecialChar,
  noUpperCase,
  noLowerCase,
  doesNotMatch,

  //email related
  invalidEmail,
  emailTaken,
  emailCheckUnavailable,

  //quiz related
  invalidAnswer,

  //step form related
  mustAccept,
}

/// Would be replaced by mapping an error to a string in a translation file
String validatorTranslator(ValidationError error) {
  return switch (error) {
    ValidationError.empty => 'This value is required',
    ValidationError.toShort => 'This value is too short',
    ValidationError.toLong => 'This value is too long',
    ValidationError.noNumber => 'This value must contain a number',
    ValidationError.noSpecialChar =>
      'This value must contain a special character',
    ValidationError.noUpperCase =>
      'This value must contain an uppercase letter',
    ValidationError.noLowerCase => 'This value must contain a lowercase letter',
    ValidationError.doesNotMatch => 'Passwords must match',
    ValidationError.invalidEmail => 'Invalid email',
    ValidationError.emailTaken => 'Email already taken',
    ValidationError.emailCheckUnavailable =>
      'We could not check this email right now',
    ValidationError.invalidAnswer => 'Invalid answer',
    ValidationError.mustAccept => 'You have to accept the terms',
  };
}

class MainApp extends StatelessWidget {
  const MainApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      routes: <String, WidgetBuilder>{
        Routes.home: (context) => const HomePage(),
        Routes.simple: (context) => const SimpleFormScreen(),
        Routes.password: (context) => const PasswordFormScreen(),
        Routes.delivery: (context) => const DeliveryListFormScreen(),
        Routes.quiz: (context) => const QuizFormScreen(),
        Routes.complex: (context) => const ComplexFormScreen(),
        Routes.scroll: (context) => const ScrollFormScreen(),
        Routes.optimized: (context) => const OptimizedRenderingFormScreen(),
        Routes.step: (context) => const StepFormScreen(),
      },
    );
  }
}
17
likes
0
points
27
downloads

Publisher

verified publisherleancode.co

Weekly Downloads

Flutter form validation and state management — typed controllers for text, checkbox, dropdown and multi-select fields, async and cross-field validators, and subforms.

Repository (GitHub)
View/report issues

Topics

#form #validation #state-management #ui #widget

License

unknown (license)

Dependencies

collection, equatable, flutter, meta

More

Packages that depend on advanced_forms