'Bad state: add(ColorEvent) was called without a registered event handler. Make sure to register a handler via on<ColorEvent>((event, emit) {...})

i am trying to implement flutter_bloc in my app, but i got error which is :

The following StateError was thrown while handling a gesture:

Bad state: add(ColorEvent) was called without a registered event handler.

Make sure to register a handler via on<ColorEvent>((event, emit) {...})

Here is my code of main.dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:belajar_flutter/bloc_state_management_flutter_bloc.dart';
import 'package:belajar_flutter/color_bloc_flutter_bloc.dart';
 
void main() => runApp(
  const MyApp()
);
 
class MyApp extends StatelessWidget {
  const MyApp({key}) : super(key: key);
 
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: BlocProvider(
          create: (context) => ColorBlocFlutterBloc(),
          child: BlockStateManagementFlutterBloc()
      ),
    );
  }
}

Here is my code of bloc_state_management_flutter_bloc.dart

import 'package:belajar_flutter/color_bloc_flutter_bloc.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

class BlockStateManagementFlutterBloc extends StatelessWidget {
  const BlockStateManagementFlutterBloc({key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: Row(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          FloatingActionButton(
              backgroundColor: Colors.amber,
              onPressed: () {
                context.read<ColorBlocFlutterBloc>().add(ColorEvent.to_amber);
              }),
          const SizedBox(
            width: 10,
          ),
          FloatingActionButton(
              backgroundColor: Colors.lightBlue,
              onPressed: () {
                context.read<ColorBlocFlutterBloc>().add(ColorEvent.to_light_blue);
              }),
        ],
      ),
      appBar: AppBar(
        title: const Text('BLoC dengan flutter_bloc'),
      ),
      body: Center(
        child: BlocBuilder<ColorBlocFlutterBloc, Color>(
          builder: (context, state) => AnimatedContainer(
            duration: const Duration(milliseconds: 500),
            width: 100,
            height: 100,
            color: state,
          ),
        ),
      ),
    );
  }
}

and here is my code of color_bloc_flutter_bloc.dart

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

enum ColorEvent {to_amber, to_light_blue}

class ColorBlocFlutterBloc extends Bloc<ColorEvent, Color>{
  Color _color = Colors.amber;

  ColorBlocFlutterBloc() : super(Colors.amber);

  @override
  Color get initialState => Colors.amber;

  @override
  Stream<Color> mapEventToState(ColorEvent event) async* {
    _color = (event == ColorEvent.to_amber) ? Colors.amber : Colors.lightBlue;
    yield _color;
  }
}

I tried to replace flutter_bloc version with a higher one but got a problem instead



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source