forms/forms library

Jet Forms Module

A comprehensive form management solution for Flutter applications using the Jet framework.

This module provides:

  • State Management: AsyncFormValue pattern for form states
  • Form Notifiers: JetFormNotifier for handling form logic
  • Form Builder: JetFormBuilder for constructing forms
  • Input Widgets: Pre-built form fields with validation

Basic Usage

// 1. Define your form notifier
class LoginFormNotifier extends JetFormNotifier<LoginRequest, LoginResponse> {
  @override
  LoginRequest decoder(Map<String, dynamic> json) {
    return LoginRequest.fromJson(json);
  }

  @override
  Future<LoginResponse> action(LoginRequest data) async {
    return await apiService.login(data);
  }
}

// 2. Create a provider
final loginFormProvider = JetFormProvider<LoginRequest, LoginResponse>(
  (ref) => LoginFormNotifier(ref),
);

// 3. Build your form UI
JetFormBuilder<LoginRequest, LoginResponse>(
  provider: loginFormProvider,
  builder: (context, ref, form, state) {
    return [
      JetTextField(name: 'email'),
      JetPasswordField(name: 'password'),
    ];
  },
  onSuccess: (response, request) {
    // Handle success
  },
)

Classes

AsyncFormData<Request, Response>
Represents the data state of a form.
AsyncFormError<Request, Response>
Represents the error state of a form.
AsyncFormIdle<Request, Response>
Represents the idle state of a form (initial state, not yet submitted).
AsyncFormLoading<Request, Response>
Represents the loading state of a form.
AsyncFormValue<Request, Response>
A class that represents the state of a form, inspired by AsyncValue from Riverpod.
JetFormBuilder<Request, Response>
JetFormNotifier<Request, Response>
JetPasswordField
A customizable password field widget with built-in validation and visibility toggle.
JetPhoneField
A customizable phone number field widget with built-in validation.
JetPinField
A customizable PIN field widget with built-in validation using Pinput.

Typedefs

JetForm<Request, Response> = JetFormNotifier<Request, Response>
JetFormProvider<Request, Response> = Provider<AsyncFormValue<Request, Response>>