Guest User

Untitled

a guest
May 5th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 2.13 KB | None | 0 0
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:provider/provider.dart';
  4.  
  5. void main() async {
  6.   final _mediaStreamController = StreamController<int>.broadcast();
  7.   runApp(
  8.     MultiProvider(
  9.       providers: [
  10.         Provider<StreamController<int>>.value(value: _mediaStreamController),
  11.         StreamProvider<int>.value(
  12.           value: _mediaStreamController.stream,
  13.           updateShouldNotify: (p1, p2) {
  14.             return true;
  15.           },
  16.         )
  17.       ],
  18.       child: MyHomePage(),
  19.     ),
  20.   );
  21. }
  22.  
  23. class MyHomePage extends StatelessWidget {
  24.   MyHomePage({Key key}) : super(key: key);
  25.  
  26.   @override
  27.   Widget build(BuildContext context) {
  28.     final _controller =
  29.         Provider.of<StreamController<int>>(context, listen: false);
  30.     int timesInsideOdds = 0;
  31.     int timesInsideEven = 0;
  32.     return MaterialApp(
  33.       home: Scaffold(
  34.         appBar: AppBar(
  35.           title: Text('Stream Bug'),
  36.         ),
  37.         body: Center(
  38.           child: Column(
  39.             crossAxisAlignment: CrossAxisAlignment.center,
  40.             children: [
  41.               Selector<int, int>(
  42.                 selector: (BuildContext context, int progress) => progress,
  43.                 shouldRebuild: (prev, next) => next % 2 == 0,
  44.                 builder: (context, progress, _) => Text(
  45.                     "Numbers Even from 1 to 100: ${++timesInsideEven} Last Received: $progress"),
  46.               ),
  47.               Selector<int, int>(
  48.                 selector: (BuildContext context, int progress) => progress,
  49.                 shouldRebuild: (prev, next) => next % 2 == 1,
  50.                 builder: (context, progress, _) => Text(
  51.                     "Numbers Odd from 1 to 100: ${++timesInsideOdds} Last Received: $progress"),
  52.               )
  53.             ],
  54.           ),
  55.         ),
  56.         floatingActionButton: FloatingActionButton(
  57.           onPressed: () async {
  58.             for (var i in List<int>.generate(100, (i) => i + 1)) {
  59.               await Future.delayed(Duration(milliseconds: 5));
  60.               _controller.add(i);
  61.             }
  62.           },
  63.         ),
  64.       ),
  65.     );
  66.   }
  67. }
Add Comment
Please, Sign In to add comment