Flutter – Streambuilder

import 'dart:async';
import 'dart:math';
import 'package:flutter/material.dart';

class StreambuilderTest extends StatefulWidget {
  @override
  _StreambuilderTestState createState() => _StreambuilderTestState();
}

class _StreambuilderTestState extends State<StreambuilderTest> {
  var streamController = StreamController();

  bool streamActive = true;

  @override
  void initState() {
    myStream();
    super.initState();
  }

  void myStream() async {
    var random = Random();
    while (streamActive) {
      await Future.delayed(Duration(milliseconds: 500));
      streamController.add(random.nextInt(1000));
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton: FloatingActionButton.extended(
        onPressed: () => streamActive = false,
        icon: Icon(Icons.pause),
        label: Text('Pause stream'),
      ),
      body: Container(
        margin: EdgeInsets.all(20),
        child: StreamBuilder(
            stream: streamController.stream,
            builder: (context, snapshot) {
              switch (snapshot.connectionState) {
                case ConnectionState.active:
                  {
                    if (snapshot.hasData) {
                      return Text('Active (snapshot=${snapshot.data})');
                    } else if (snapshot.hasError) {
                      return Text('Stream error: ${snapshot.error}');
                    }
                  }
                  break;
                case ConnectionState.done:
                  {
                    return Text('Done');
                  }
                  break;
                case ConnectionState.waiting:
                  {
                    return Center(
                      child: CircularProgressIndicator(),
                    );
                  }
                  break;
                default:
                  {
                    return Text('Undefined');
                  }
              }
            }),
      ),
    );
  }
}