title: Does stream builder build my widgets again and again without any change in stream?
body: <p>Stream builder in Flutter is getting recalled. I am not sure why. I believe the problem might be that i have a bloc provider in stream builder. My stream dataBloc.dataStream is not changing, to cause the streambuilder to build again. Not sure, what i am doing wrong. Does stream builder build my widgets again and again without any change in stream. Obviously that's not true! Right?</p>
  
  <pre><code>Widget build(context) {
          final DataBloc dataBloc = DataBlocProvider.of(context);
          print("dropdown build called again");                         
          // this doesn't print recursively so this is perfect.
          // So my build is not getting called again. 
  
          return StreamBuilder(
              stream: dataBloc.dataStream,
              builder: (context, snapshot) {
  
                //ToDo remove prints
                print("dropdown ${snapshot.data}");                     
               // there is no change in snapshot.data, however print is getting called recursively. This is bad and wrong
               // so my stream builder is getting called again, and this is wrong
  
  
                String key = dataElement.conditionalField;
                String _valueArray = dataElement.conditionalValues.toString();
                String conditionalValue =
                    _valueArray.substring(1, _valueArray.length - 1);
                Map&lt;String, String&gt; dataMap = snapshot.hasData ? snapshot.data : {};
                bool isVisible = true;
  
                if (key != "" &amp;&amp;
                    dataMap.containsKey(key) &amp;&amp;
                    dataMap[key] == conditionalValue.toString()) {
                  isVisible = true;
                } else if (key != "") {
                  isVisible = false;
                }
  
                return Visibility(
                  child: BlocDropDownProvider(
                    fieldName: dataElement.key,
                    dataBloc: dataBloc,
                    child: Card(
                      color: Colors.grey[100],
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        mainAxisAlignment: MainAxisAlignment.start,
                        children: &lt;Widget&gt;[
                          label,
                          new Container(
                            height: 8.0,
                          ),
                          dropDown,
                        ],
                      ),
                    ),
                  ),
                  visible: isVisible? true:false,
                );
  </code></pre>
  
  <p>output on console is : </p>
  
  <pre><code>I/flutter (14422): dropdown {idnumber: 10}
  I/flutter (14422): dropdown {idnumber: 10}
  </code></pre>