stx_form_bloc 3.3.2 copy "stx_form_bloc: ^3.3.2" to clipboard
stx_form_bloc: ^3.3.2 copied to clipboard

Easy Form State Management using BLoC pattern. Separate the Form State and Business Logic from the User Interface.

example/stx_form_bloc_example.dart

// ignore_for_file: unnecessary_overrides

import 'package:bloc/bloc.dart';
import 'package:stx_form_bloc/stx_form_bloc.dart';

class SimpleBlocObserver extends BlocObserver {
  @override
  void onCreate(BlocBase bloc) {
    super.onCreate(bloc);
    // print('onCreate -- bloc: ${bloc.runtimeType}, change: ${bloc.state}');
  }

  @override
  void onEvent(Bloc bloc, Object? event) {
    super.onEvent(bloc, event);
    //print('onEvent -- bloc: ${bloc.runtimeType}, event: $event');
  }

  @override
  void onChange(BlocBase bloc, Change change) {
    super.onChange(bloc, change);
    //print('onChange -- bloc: ${bloc.runtimeType}, change: ${change.nextState}');
  }

  @override
  void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
    super.onError(bloc, error, stackTrace);
    //print('onError -- bloc: ${bloc.runtimeType}, error: $error');
  }

  @override
  void onClose(BlocBase bloc) {
    super.onClose(bloc);
    //print('onClose -- bloc: ${bloc.runtimeType}');
  }
}

class LoginFormBloc extends FormBloc<String, String> {
  late TextFieldBloc email;
  late TextFieldBloc password;
  late List<TextFieldBloc> additionalFields;

  LoginFormBloc({
    String? emailData,
  }) {
    email = TextFieldBloc(
      initialValue: emailData ?? 'volodymyr@gmail.com',
      customValidators: {FieldBlocValidators.email},
      rules: {ValidationType.onChange},
    );

    password = TextFieldBloc(
      initialValue: 'qwerty123',
      customValidators: {FieldBlocValidators.passwordMin6Chars},
      rules: {ValidationType.onChange},
    );

    additionalFields = List.generate(
      100000,
      (index) {
        return TextFieldBloc(
          initialValue: 'qwerty123',
          customValidators: {FieldBlocValidators.passwordMin6Chars},
          rules: {ValidationType.onChange},
        );
      },
    );

    addFields([
      email,
      password,
      ...additionalFields,
    ]);
  }

  @override
  void onSubmit() {
    emitSuccess('Ok');
  }
}

void main() {
  Bloc.observer = SimpleBlocObserver();
  formMain();
}

void formMain() async {
  final stopwatch = Stopwatch()..start();

  final formBloc = LoginFormBloc(emailData: 'sdcwcdscvd@dsvv.rvevr');

  print('Executed in ${stopwatch.elapsedMilliseconds}');

  stopwatch
    ..reset()
    ..start();

  print(formBloc.email.extraData);

  print('change');
  formBloc.password.changeValue('qwerty12345');

  print('reset');
  formBloc.password.reset();

  print('clear');
  formBloc.password.clear();

  print('submit');
  formBloc.submit();

  await formBloc.close();

  print('Executed in ${stopwatch.elapsedMilliseconds}');
}
2
likes
0
points
59
downloads

Publisher

unverified uploader

Weekly Downloads

Easy Form State Management using BLoC pattern. Separate the Form State and Business Logic from the User Interface.

Repository (GitHub)
View/report issues

Documentation

Documentation

License

unknown (license)

Dependencies

bloc, bloc_test, darq, equatable, intl, rxdart, uuid

More

Packages that depend on stx_form_bloc