title: Reducing verbosity of states in flutter_bloc library
body: <p>I'm implementing a simple chat screen that lists messages and has a textbox and button to send.</p>
  <p>I have the following states:</p>
  <pre><code>abstract class ChatState extends Equatable {
    const ChatState();
  
    @override
    List&lt;Object&gt; get props =&gt; [];
  }
  
  class ChatFailure extends ChatState {
    final Exception reason;
    const ChatFailure({this.reason});
  
    @override
    List&lt;Object&gt; get props =&gt; [reason];
  }
  
  class ChatInProgress extends ChatState {}
  
  class ChatSuccess extends ChatState {
    final Chat chat;
    final List&lt;Message&gt; messages;
    final Map&lt;int, User&gt; users;
  
    const ChatSuccess({
      @required this.chat,
      @required this.messages,
      @required this.users,
    });
  
    @override
    List&lt;Object&gt; get props =&gt; [chat, messages, users];
  }
  </code></pre>
  <p>However, I now want to be able to show the messages in all the states (if not null), even error or loading states - it might be displaying a cache.</p>
  <p>It seems I have two ways to do this, but neither seem like a good option:</p>
  <ol>
  <li>Make <code>ChatState</code> the only state, and shove everything in there. Seems like an anti-pattern.</li>
  <li>Put <code>chat</code>, <code>messages</code> and <code>users</code> in <code>ChatState</code> so all the states have them. However, then every state has a huge long constructor and it's really verbose, especially as this screen will become more complex.</li>
  </ol>
  <p>I'm going with 2 for now, but is that really the best way? Am I using <code>bloc_library</code> in the correct way?</p>