Created
February 2, 2019 06:56
-
-
Save MeandNi/1161560bf90c5bc7f341844e8126a8f4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void main() => runApp(new MyApp()); | |
class MyApp extends StatelessWidget { | |
@override | |
Widget build(BuildContext context) { | |
return new MaterialApp( | |
title: 'Streams Demo', | |
theme: new ThemeData( | |
primarySwatch: Colors.blue, | |
), | |
home: BlocProvider<IncrementBloc>( | |
bloc: IncrementBloc(), | |
child: CounterPage(), | |
), | |
); | |
} | |
} | |
class CounterPage extends StatelessWidget { | |
@override | |
Widget build(BuildContext context) { | |
final IncrementBloc bloc = BlocProvider.of<IncrementBloc>(context); | |
return Scaffold( | |
appBar: AppBar(title: Text('Stream version of the Counter App')), | |
body: Center( | |
child: StreamBuilder<int>( | |
stream: bloc.outCounter, | |
initialData: 0, | |
builder: (BuildContext context, AsyncSnapshot<int> snapshot){ | |
return Text('You hit me: ${snapshot.data} times'); | |
} | |
), | |
), | |
floatingActionButton: FloatingActionButton( | |
child: const Icon(Icons.add), | |
onPressed: (){ | |
bloc.incrementCounter.add(null); | |
}, | |
), | |
); | |
} | |
} | |
class IncrementBloc implements BlocBase { | |
int _counter; | |
// | |
// Stream to handle the counter | |
// | |
StreamController<int> _counterController = StreamController<int>(); | |
StreamSink<int> get _inAdd => _counterController.sink; | |
Stream<int> get outCounter => _counterController.stream; | |
// | |
// Stream to handle the action on the counter | |
// | |
StreamController _actionController = StreamController(); | |
StreamSink get incrementCounter => _actionController.sink; | |
// | |
// Constructor | |
// | |
IncrementBloc(){ | |
_counter = 0; | |
_actionController.stream | |
.listen(_handleLogic); | |
} | |
void dispose(){ | |
_actionController.close(); | |
_counterController.close(); | |
} | |
void _handleLogic(data){ | |
_counter = _counter + 1; | |
_inAdd.add(_counter); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment