title: WebSocketChannel stream returns a Bad state: stream has already been listened to error even if I set it to be a broadcast stream
body: <p>I recently added a feature in my app to logout. When I press the button to logout I Navigate back to  the LoginScreen and display a username and password prompt.
  I know the WebSocketChannel channel.stream can't be listened to more than once, so I created a broadcast stream and set it to the channel.stream.
  Here is my initState() and dispose() code:</p>
  <pre><code>  @override
    void initState()
    {
      super.initState();
      _hasToken();
      broadcastStream = channel.stream.asBroadcastStream();
    }
  
    @override
    void dispose() {
      channel.sink.close();
      super.dispose();
    }
  </code></pre>
  <p>And here is my LoginScreen build method and the widgets:</p>
  <pre><code>  List&lt;Widget&gt; getLoginScreen()
    {
      List&lt;Widget&gt; kids = [];
  
      if(hereAuthenticated == 0)
      {
        kids.add(new Container
        (
          height: double.infinity,
          width: double.infinity,
          decoration: BoxDecoration
          (
            gradient: LinearGradient
            (
              begin: Alignment.topCenter,
              end: Alignment.bottomCenter,
              colors:
              [
                Color(0xFF73AEF5),
                Color(0xFF61A4F1),
                Color(0xFF478DE0),
                Color(0xFF398AE5),
              ],
              stops: [0.1, 0.4, 0.7, 0.9],
            ),
          ),
        ));
      }
  
      if(hereAuthenticated == 0)
      {
        kids.add(new Container
        (
          height: double.infinity,
          child: SingleChildScrollView
          (
            physics: AlwaysScrollableScrollPhysics(),
            padding: EdgeInsets.symmetric
            (
              horizontal: 40.0,
              vertical: 120.0,
            ),
            child: Column
            (
              mainAxisAlignment: MainAxisAlignment.center,
              children: &lt;Widget&gt;
              [
                Text('XXXX',style: TextStyle(color: Colors.white,fontFamily: 'OpenSans',fontSize: 30.0,fontWeight: FontWeight.bold,),),
                SizedBox(height: 30.0),
                _buildEmailTF(),
                SizedBox(height: 30.0,),
                _buildPasswordTF(),
                _buildForgotPasswordBtn(),
                _buildLoginBtn(),
              ],
            ),
          ),
        ));
      }
  
      if(hereAuthenticated == 2)
      {
        kids.add(Container
        (
          alignment: Alignment.center,
          child: CircularProgressIndicator(backgroundColor: Colors.blue,)
        ));
      }
      
      kids.add(new StreamBuilder
      (
        stream: broadcastStream,
        builder: (context, snapshot)
        {
          if(snapshot.hasData)
          {
            String rawJson = snapshot.data;
            Map&lt;String, dynamic&gt; inputMap = jsonDecode(rawJson);
            print('RAWJSON: $rawJson');
            if(hereAuthenticated == 0)
            {
              if(inputMap['type'] == 'auth_response') hereAuthenticated = inputMap['access'];
              if(inputMap.containsKey('token')) storage.write(key: 'xxxx', value: inputMap['token']);
            }
            else if(hereAuthenticated == 2)
            {
              if(inputMap['type'] == 'auth_response') hereAuthenticated = inputMap['access'];
              if(inputMap.containsKey('token'))
              {
                storage.delete(key: 'xxxx');
                storage.write(key: 'xxxx', value: inputMap['token']);
              }
            }
          }
          if(hereAuthenticated == 1)
          {
            return(StreamBuilder&lt;BluetoothState&gt;(
              stream: FlutterBlue.instance.state,
              initialData: BluetoothState.unknown,
              builder: (c, snapshot) 
              {
                final state = snapshot.data;
                if (state == BluetoothState.on) return FindDevicesScreen();
                return BluetoothOffScreen(state: state);
              }
            ));
          }
          else return(Text(''));
        },
      ));
      return kids;
    }
  
    @override
    Widget build(BuildContext context) {
      return Scaffold
      (
        body: AnnotatedRegion&lt;SystemUiOverlayStyle&gt;(
          value: SystemUiOverlayStyle.light,
          child: GestureDetector(
            onTap: () =&gt; FocusScope.of(context).unfocus(),
            child: Stack(
              children: getLoginScreen(),
            ),
          ),
        )
      );
    }
  }
  </code></pre>