VeryGoodOpenSource / formz

A unified form representation in Dart used at Very Good Ventures 🦄

Home Page:https://pub.dev/packages/formz

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Different types of error

dbof10 opened this issue · comments

FormzStatus has very limited use cases. My case I need to identify different types of error to show different UI. submissionFailure seems not exapandale. Any ideas?

Hi @dbof10 👋
Thanks for opening an issue!

You should be able to leverage the error property on your custom FormzInput to differentiate between different errors on at the individual input level. For broad form-level errors you can define your own state to encapsulate the FormzStatus along with any additional meta data. Let me know if that helps and if not, could you please share the link to a sample app which illustrates the issue you're facing? Thanks! 🙏

I have a simple class

enum SymbolValidationError { invalid }

class Symbol extends FormzInput<String, SymbolValidationError> {
  const Symbol.pure() : super.pure('');

  const Symbol.dirty([String value = '']) : super.dirty(value);

  @override
  SymbolValidationError validator(String value) {
    return value.isNotEmpty ? null : SymbolValidationError.invalid;
  }
}
 BlocListener<QuoteDownloadCubit, QuoteDownloadState>(
      listener: (context, state) {
        
      },
    );

State class

class QuoteDownloadState extends Equatable {

  Symbol symbol;
  FormzStatus status;

}

I just follow your example for login. Symbol returns SymbolValidationError. I dont see a place where I can access the a specific error type like you answered above. State has status. Status is a predefine enum. If I add more fields in the State class, it will solve my problem. I just want to leverage what the lib offers or what is recommended to do with this library.

@dbof10, using your example, You can check for the error status like this:

BlocListener<QuoteDownloadCubit, QuoteDownloadState>(
  listener: (context, state) {
    if (state.symbol.error == SymbolValidationError.invalid) {
      // Handle invalid error
    }
    // Add more if statements as required
  },
);