form_engine 0.0.2 copy "form_engine: ^0.0.2" to clipboard
form_engine: ^0.0.2 copied to clipboard

Headless, controller-free, declarative form engine for Flutter and Dart.

example/lib/main.dart

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

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(home: FormExamplePage());
  }
}

class FormExamplePage extends StatefulWidget {
  const FormExamplePage({super.key});

  @override
  State<FormExamplePage> createState() => _FormExamplePageState();
}

class _FormExamplePageState extends State<FormExamplePage> {
  late final FormEngine form;

  final emailController = TextEditingController();
  final passwordController = TextEditingController();

  @override
  void initState() {
    super.initState();

    form = FormEngine(
      schema: FormSchema(
        fields: {
          'email': FieldSchema<String>(
            validators: const [RequiredValidator(), EmailValidator()],
          ),
          'password': FieldSchema<String>(
            validators: const [RequiredValidator(), MinLengthValidator(6)],
          ),
        },
      ),
    );
  }

  @override
  void dispose() {
    emailController.dispose();
    passwordController.dispose();
    super.dispose();
  }

  void _submit() {
    setState(() {
      form.updateValue('email', emailController.text);
      form.updateValue('password', passwordController.text);
    });

    final isValid = form.validateAll();

    if (isValid) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Form valid: ${form.state.values}')),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    final errors = form.state.errors;

    return Scaffold(
      appBar: AppBar(title: const Text('form_engine example')),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          children: [
            TextField(
              controller: emailController,
              decoration: InputDecoration(
                labelText: 'Email',
                errorText: errors['email'],
              ),
            ),
            const SizedBox(height: 12),
            TextField(
              controller: passwordController,
              obscureText: true,
              decoration: InputDecoration(
                labelText: 'Password',
                errorText: errors['password'],
              ),
            ),
            const SizedBox(height: 24),
            ElevatedButton(onPressed: _submit, child: const Text('Submit')),
          ],
        ),
      ),
    );
  }
}
3
likes
160
points
153
downloads

Publisher

unverified uploader

Weekly Downloads

Headless, controller-free, declarative form engine for Flutter and Dart.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on form_engine