title: state change not prompting ondidchange
body: <p>I have a page which is connected to appstate and viewmodel ,</p>
  
  <p>what i'm doing in this page is picking an image from gallery and then sending it to the server , when i send i prompt a message to the user so he can see the loading , 
  when the upload epic ends there is an action than goes to the reducer which change the state so the ui in the page will change , </p>
  
  <p>the reducer receives it and return a state , but the onDidChange not prompt right after ,</p>
  
  <p>here's some code:</p>
  
  <p>page build method : </p>
  
  <pre><code>@override
  Widget build(BuildContext context) {
  return new StoreConnector&lt;AppState, AddRefundViewModel&gt;(
      converter: addRefundConverter,
      onInitialBuild: (AddRefundViewModel vm) =&gt; {vm.doInitializeDto()},
      builder: (context, vm) {
        return MaterialApp(
            title: 'Test',
            home: Scaffold(
              body: Column(
                children: &lt;Widget&gt;[
                  Container(
                    child: new Column(
                      children: &lt;Widget&gt;[
                        RefundHeader1(context, vm),
                        RefundHeader(context, vm),
                      ],
                    ),
                    decoration: new BoxDecoration(
                      gradient: LinearGradient(
                          begin: Alignment.centerRight,
                          end: Alignment.bottomLeft,
                          colors: [primary, primaryGradient]),
                    ),
                    width: MediaQuery.of(context).size.width * 1,
                    height: MediaQuery.of(context).size.width * 0.4,
                  ),
                  //Text(vm.c),
                  refundRowSum(vm),
                  refundRowDate(context, vm),
                  refundRowCurrent(context, vm),
                  refundRowRefund(context, vm),
                  refundRowAtm(context, vm),
  
                  Expanded(child: Container(
                    child: GestureDetector(onTap: () {
                      //print("tap");}
                      // myFocusNode.dispose();},
                      if (myFocusNode != null) {
                        FocusScope.of(context).requestFocus(new FocusNode());
                      }
                    }),
                  )),
                  proceedMessage(context, vm),
                ],
              ),
              bottomNavigationBar: BottomAppBar(
                child: proceedButton(context, vm),
              ),
              resizeToAvoidBottomPadding: false,
            ));
      },
  
      onDidChange: (vm) {
        print('---!!!!-----&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;  onDidChange  &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;-----!!!------');
        if (vm.addRefundDto.tmpFileStat == TmpFileStat.BadExt) {
          showSendReceiptDialog2(context, TmpFileStat.BadExt);
          vm.doInitTmpFileStat();
        } else if (vm.addRefundDto.tmpFileStat == TmpFileStat.TooLarge) {
          showSendReceiptDialog2(context, TmpFileStat.TooLarge);
          vm.doInitTmpFileStat();
        }
        else if (vm.addRefundDto.uploadRefundStatus ==
                RefundUpload.Success ||vm.addRefundDto.uploadRefundStatus ==
            RefundUpload.Started ||
            vm.addRefundDto.uploadRefundStatus == RefundUpload.Failed) {
  
          Navigator.pop(context);
          showSendReceiptDialog(context, vm.addRefundDto.uploadRefundStatus);
        }
      },
  
  
      );}
  </code></pre>
  
  <p>reducer : </p>
  
  <pre><code>  case GotRefund:
        print('----=== GotRefund add new refund reducer ===-----');
        AddRefundDto refundDto = state.refundDto;
        refundDto.uploadRefundStatus=RefundUpload.Success;
        state.refundDto= refundDto;
        return new AddRefundState(
          fileDto: null,
          byteImage: null,
          refundDto: state.refundDto,
  
    );
  </code></pre>
  
  <p>ADDED ViewModel : </p>
  
  <pre><code>import 'package:flutter/widgets.dart';
  import 'package:iai/models/add_refund_dto.dart';
  import 'package:iai/store/ui/ui_state.dart';
  import 'package:iai/theme/images.dart';
  import 'package:font_awesome_flutter/font_awesome_flutter.dart';
  import 'package:iai/models/currency.dart';
  
  class AddRefundViewModel {
    bool fileAttachment;
  
    DateTime pickedDate;
    double amount;
  
    bool isAtm;
    bool canProceed;
    AddRefundDto addRefundDto;
  
    //final List&lt;String&gt; refundList;
    final Map&lt;String, AssetImage&gt; refundList;
    final Map&lt;String, IconData&gt; currencyList;
    final List&lt;Currency&gt; currencyList2;
    Function saveCurrentViewModel;
    Function sendDtoToServer;
    Function openGallery;
    Function openCamera;
    Function doInitializeDto;
    Function doRemoveTmpImage;
    Function doInitTmpFileStat;
    final Function search;
    final String searchTerm;
  
    final bool showSearch;
    AddRefundViewModel({
      this.openCamera,
      this.openGallery,
      this.addRefundDto,
      this.search,
      this.searchTerm,
      this.showSearch,
      this.doInitializeDto,
      this.doRemoveTmpImage,
      this.doInitTmpFileStat,
      this.refundList,
      this.sendDtoToServer,
      this.saveCurrentViewModel,
      this.pickedDate,
      this.amount,
      this.currencyList,
      this.isAtm,
      this.canProceed,
      this.currencyList2,
      this.fileAttachment,
    });
  
  
  }
  </code></pre>
  
  <p>thanks to everyone that can contribute</p>