title: BlocBuilder not updating after change
body: <p>I have a bloc to manage all the quotations in the application. The quotation class, bloc, and events are given below:</p>
  <p>I have a form in which on selecting the text field, I show a list view to the user, and the value of the selected list view is assigned to the bloc and displayed in the text field.</p>
  <p>Everything works fine but when I assign the value to the bloc variable and return it back to the form the text field value does update BUT ONLY FOR SINGLE TIME. If I do select some other list option for the same or another field the field value doesn't update.</p>
  <p>CAN ANYONE SUGGEST A FIX?</p>
  <p>I have a custom textField created as shown below and I'm calling this inside a bloc builder:</p>
  <pre><code>BlocBuilder&lt;QuoteBloc, QuoteState&gt;(builder: (context, state) {
    if (state is QuoteInitialized) {
      return Column(
        children: [
          BookingFormField(
            labelText: &quot;Flying From&quot;,
            onTap: () =&gt; Navigator.push(
              context,
              AirportCityPlaceSelection.route(
                'tq-fb-flight-from',
              ),
            ),
            controller: TextEditingController(
              text: BlocProvider.of&lt;QuoteBloc&gt;(context)
                  .quote
                  .flight
                  .flightFrom,
            ),
          ),
          BookingFormField(
            labelText: &quot;Flying To&quot;,
            onTap: () {
              Navigator.push(
                context,
                AirportCityPlaceSelection.route(
                  'tq-fb-flight-to',
                ),
              );
            },
            controller: TextEditingController(
              text: BlocProvider.of&lt;QuoteBloc&gt;(context)
                  .quote
                  .flight
                  .flightTo,
            ),
          ),
        ],
      );
    }
  }),
  
  
  
  class BookingFormField extends StatelessWidget {
    final Function onTap;
    final TextEditingController controller;
    final String labelText;
  
    BookingFormField({
      @required this.onTap,
      @required this.controller,
      @required this.labelText,
    });
  
    @override
    Widget build(BuildContext context) {
      return Container(
        margin: EdgeInsets.only(
          top: 10.0,
          bottom: 10.0,
        ),
        child: TextField(
          controller: controller,
          readOnly: true,
          onTap: () =&gt; onTap(),
          style: Theme.of(context).textTheme.bodyText2.copyWith(
                fontSize: 13.0,
                fontWeight: FontWeight.w600,
                color: Theme.of(context).primaryColor,
              ),
      );
    }
  }
  </code></pre>
  <p>And this is how I'm updating the value in the list view which is a new screen:</p>
  <pre><code>BlocProvider.of&lt;QuoteBloc&gt;(context).quote.flight.flightFrom = value;
  BlocProvider.of&lt;QuoteBloc&gt;(context).add(QuoteUpdated());
  Navigator.pop(context);
  </code></pre>
  <p>Quote Class:-</p>
  <pre><code>part 'flight.dart';
  part 'car.dart';
  part 'cruise.dart';
  part 'hotel.dart';
  part 'visa.dart';
  part 'insurance.dart';
  part 'transfer.dart';
  
  class Quote {
    String name;
    String contactNumber;
    String email;
    Flight flight;
    Car car;
    Hotel hotel;
    Cruise cruise;
    Transfer transfer;
    Visa visa;
    Insurance insurance;    
  // Constructors &amp; other functions    
  }
  </code></pre>
  <p>The events related to the quote bloc are:</p>
  <pre><code>abstract class QuoteEvent extends Equatable {
    List&lt;Object&gt; get props =&gt; [];
  }
  
  
  class QuoteUpdated extends QuoteEvent {
    List&lt;Object&gt; get props =&gt; [];
  }
  </code></pre>
  <p>The quote State is</p>
  <pre><code>abstract class QuoteState extends Equatable {
    List&lt;Object&gt; get props =&gt; [];
  }
  
  class QuoteInitialized extends QuoteState {
    final Quote quote;
  
    QuoteInitialized({
      @required this.quote,
    });
  
    List&lt;Object&gt; get props =&gt; [this.quote];
  }
  
  class QuoteSubmissionInProgress extends QuoteState {}
  
  class QuoteSubmissionSuccessful extends QuoteState {}
  
  class QuoteSubmissionFailed extends QuoteState {}
  </code></pre>
  <p>Quote Bloc:</p>
  <pre><code>class QuoteBloc extends Bloc&lt;QuoteEvent, QuoteState&gt; {
    final Quote quote;
  
    QuoteBloc(Quote quote)
        : assert(quote != null),
          this.quote = quote,
          super(QuoteInitialized(quote: quote));
  
    @override
    Stream&lt;QuoteState&gt; mapEventToState(QuoteEvent event) async* {
      if (event is QuoteUpdated) {
        yield QuoteInitialized(quote: this.quote);
      }
    }
  }
  </code></pre>