1

i am Working on Flutter Chat Application and when i tried to implement the MessageBloc i found that mapEventToState is not Working anymore in Version 8.0 of Bloc

This is MessageEvent

import 'package:chat/chat.dart';
import 'package:equatable/equatable.dart';

abstract class MessageEvent extends Equatable {
  const MessageEvent();
  factory MessageEvent.onSubscribed(User user) => Subscribed(user);
  factory MessageEvent.onMessageSent(List<Message> messages) =>
      MessageSent(messages);
  @override
  List<Object?> get props => [];
}

class Subscribed extends MessageEvent {
  final User user;

  Subscribed(this.user);

  @override
  List<Object?> get props => [user];
}

class MessageSent extends MessageEvent {
  final List<Message> messages;
  MessageSent(this.messages);

  @override
  List<Object> get props => [messages];
}

class MessageReceived extends MessageEvent {
  MessageReceived(this.message);

  final Message message;

  @override
  List<Object> get props => [message];
}

And this is MessageState

import 'package:chat/chat.dart';
import 'package:equatable/equatable.dart';

abstract class MessageState extends Equatable {
  const MessageState();
  factory MessageState.initial() => MessageInitial();
  factory MessageState.sent(Message message) => MessageSentSuccesfully(message);
  factory MessageState.received(Message message) =>
      MessageReceivedSuccesfully(message);
  @override
  List<Object> get props => [];
}

class MessageInitial extends MessageState {}

class MessageSentSuccesfully extends MessageState {
  final Message message;
  const MessageSentSuccesfully(this.message);

  @override
  List<Object> get props => [message];
}

class MessageReceivedSuccesfully extends MessageState {
  final Message message;
  const MessageReceivedSuccesfully(this.message);

  @override
  List<Object> get props => [message];
}

and finally this is MessageBloc

import 'dart:async';

import 'package:bloc/bloc.dart';
import 'package:chat/chat.dart';
import 'package:flutter_newapp/src/blocs/message/message_event.dart';
import 'package:flutter_newapp/src/blocs/message/message_state.dart';

class MessageBloc extends Bloc<MessageEvent, MessageState> {
  final IMessageService _messageService;
  StreamSubscription? _subscription;
  MessageBloc(this._messageService) : super(MessageState.initial());

  @override
  Stream<MessageState> mapEventToState(MessageEvent event) async* {
    if (event is Subscribed) {
      await _subscription?.cancel();
      _subscription = _messageService
          .messages(activeUser: event.user)
          .listen((message) => add(MessageReceived(message)));
    }

    if (event is MessageReceived) {
      yield MessageState.received(event.message);
    }
    if (event is MessageSent) {
      final message = await _messageService.send(event.messages);
      yield MessageState.sent(message);
    }
  }

  @override
  Future<void> close() {
    _subscription?.cancel();
    _messageService.dispose();
    return super.close();
  }
}

Can anyone propose me a Solution to Rewrite the MessageBloc in the new Version of Bloc ?

i am trying to move from version 7.1 of Bloc to 8.1 or the Latest version of Bloc and try to learn the new implementation of Blocs in Flutter

0 Answers0