form_bloc_allenlinli 0.36.1 copy "form_bloc_allenlinli: ^0.36.1" to clipboard
form_bloc_allenlinli: ^0.36.1 copied to clipboard

Core package for form_bloc, providing form state management and validation.

example/lib/main.dart

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

class LoginFormBloc extends FormBloc<String, String> {
  final email = TextFieldBloc<dynamic>(
    validators: [
      FieldBlocValidators.required,
      FieldBlocValidators.email,
    ],
  );

  final password = TextFieldBloc<dynamic>(
    validators: [
      FieldBlocValidators.required,
    ],
  );

  LoginFormBloc() {
    addFieldBlocs(
      fieldBlocs: [
        email,
        password,
      ],
    );
  }

  @override
  void onSubmitting() {
    print(email.value);
    print(password.value);
    emitSuccess();
  }
}

void main() => runApp(const MyApp());

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BlocProvider(
        create: (context) => LoginFormBloc(),
        child: const LoginFormScreen(),
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    final formBloc = BlocProvider.of<LoginFormBloc>(context);
    return Scaffold(
      appBar: AppBar(title: const Text('Login Form')),
      body: FormBlocListener<LoginFormBloc, String, String>(
        onSuccess: (context, state) {
          ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text('Login Success!')),
          );
        },
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              TextFieldBlocBuilder(
                textFieldBloc: formBloc.email,
                decoration: const InputDecoration(
                  labelText: 'Email',
                  prefixIcon: Icon(Icons.email),
                ),
              ),
              TextFieldBlocBuilder(
                textFieldBloc: formBloc.password,
                decoration: const InputDecoration(
                  labelText: 'Password',
                  prefixIcon: Icon(Icons.lock),
                ),
                obscureText: true,
              ),
              const SizedBox(height: 24),
              ElevatedButton(
                onPressed: formBloc.submit,
                child: const Text('Login'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
1
likes
140
points
43
downloads

Publisher

unverified uploader

Weekly Downloads

Core package for form_bloc, providing form state management and validation.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

bloc, collection, equatable, meta, rxdart, uuid

More

Packages that depend on form_bloc_allenlinli