Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'dart:async';
- import 'package:flutter/material.dart';
- import 'package:provider/provider.dart';
- void main() async {
- final _mediaStreamController = StreamController<int>.broadcast();
- runApp(
- MultiProvider(
- providers: [
- Provider<StreamController<int>>.value(value: _mediaStreamController),
- StreamProvider<int>.value(
- value: _mediaStreamController.stream,
- updateShouldNotify: (p1, p2) {
- return true;
- },
- )
- ],
- child: MyHomePage(),
- ),
- );
- }
- class MyHomePage extends StatelessWidget {
- MyHomePage({Key key}) : super(key: key);
- @override
- Widget build(BuildContext context) {
- final _controller =
- Provider.of<StreamController<int>>(context, listen: false);
- int timesInsideOdds = 0;
- int timesInsideEven = 0;
- return MaterialApp(
- home: Scaffold(
- appBar: AppBar(
- title: Text('Stream Bug'),
- ),
- body: Center(
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Selector<int, int>(
- selector: (BuildContext context, int progress) => progress,
- shouldRebuild: (prev, next) => next % 2 == 0,
- builder: (context, progress, _) => Text(
- "Numbers Even from 1 to 100: ${++timesInsideEven} Last Received: $progress"),
- ),
- Selector<int, int>(
- selector: (BuildContext context, int progress) => progress,
- shouldRebuild: (prev, next) => next % 2 == 1,
- builder: (context, progress, _) => Text(
- "Numbers Odd from 1 to 100: ${++timesInsideOdds} Last Received: $progress"),
- )
- ],
- ),
- ),
- floatingActionButton: FloatingActionButton(
- onPressed: () async {
- for (var i in List<int>.generate(100, (i) => i + 1)) {
- await Future.delayed(Duration(milliseconds: 5));
- _controller.add(i);
- }
- },
- ),
- ),
- );
- }
- }
Add Comment
Please, Sign In to add comment