add your schema

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

  @override
  Widget build(BuildContext context) {
    return FlSchemaProivder(
      schema: {
        'email': (value) {
          return switch (value) {
            final String text when RegExp(r'^\S+@\S+\.\S+$').hasMatch(text) =>
              null,
            _ => 'Invalid email address'
          };
        },
      },
      child: const MaterialApp(
        home: Scaffold(
          body: MyHome(),
        ),
      ),
    );
  }
}

class MyHome extends HookWidget {
  const MyHome({super.key});

  @override
  Widget build(BuildContext context) {
    return const FlFormBuilder(
      child: Body(),
    );
  }
}

create FlFormTextEditingController and assign it to textField

class Body extends HookWidget {
  const Body({super.key});

  @override
  Widget build(BuildContext context) {
    final controller = useFlFormTextEditingController(
      name: 'email_controller',
      schemaName: 'email',
    );

    final isFormValid = useIsFormValid();
    final formData = useFormData();

    return Column(
      children: [
        TextFormField(
          controller: controller,
          decoration: InputDecoration(
            errorText: controller.errorMessage,
          ),
        ),
        FilledButton(
          onPressed: !isFormValid ? null : () {},
          child: const Text('Confirm'),
        ),
        Text(formData.toString()),
      ],
    );
  }
}

Available Hooks

Libraries

fl_formz