We want to connect the people who have knowledge to the people who need it, to bring together people with different perspectives so they can understand each other better, and to empower everyone to share their knowledge.
import 'package:bloc/bloc.dart'; import 'package:bloc_concurrency/bloc_concurrency.dart'; class TestEvent {} class TestBloc extends Bloc { TestBloc() : super(Object()) { on(_onTestEvent, transformer: restartable()); } var testCounter = 0; Future _onTestEvent(event, emit) async { final counter = testCounter++; print('Starting test count: $counter, is emitter alive: '); await Future.delayed(const Duration(seconds: 5)); if (emit.isDone) return; // We should reach here only for latest event print('Finished test count: $counter, is emitter alive: '); } } void main() { final bloc = TestBloc(); bloc.stream.listen(null); bloc.add(TestEvent()); bloc.add(TestEvent()); bloc.add(TestEvent()); }
Starting test count: 0, is emitter alive: true Starting test count: 1, is emitter alive: true Starting test count: 2, is emitter alive: true Finished test count: 2, is emitter alive: true
environment: sdk: '>=2.18.2 <3.0.0' dev_dependencies: lints: ^2.0.0 test: ^1.16.0 bloc: ^8.1.0 bloc_concurrency: ^0.2.0
import 'package:bloc/bloc.dart'; import 'package:bloc_concurrency/bloc_concurrency.dart'; abstract class BaseEvent {} class PickImageEvent extends BaseEvent {} class IdentifyImageEvent extends BaseEvent {} class ShowResultEvent extends BaseEvent {} class BaseState {} class TestBloc extends Bloc { TestBloc() : super(BaseState()) { on(_onPickImageEvent, transformer: restartable()); on(_onIdentifyImageEvent, transformer: restartable()); on(_onShowResultEvent, transformer: restartable()); } var testCounter = 0; Future _onPickImageEvent( PickImageEvent event, Emitter emit, ) async { final counter = ++testCounter; print('Start picking image | Counter $counter'); await Future.delayed(const Duration(seconds: 5)); print('Have picked an image | Counter $counter'); add(IdentifyImageEvent()); } Future _onIdentifyImageEvent( IdentifyImageEvent event, Emitter emit, ) async { print('> Start identifying that image | Counter $testCounter'); await Future.delayed(const Duration(seconds: 3)); print('> Finished identifying that image | Counter $testCounter'); add(ShowResultEvent()); } Future _onShowResultEvent( ShowResultEvent event, Emitter emit, ) async { print('>> Start showing result | Counter $testCounter'); await Future.delayed(const Duration(seconds: 2)); print('>> Stopped showing result | Counter $testCounter'); } } /// Expect result: /// Start picking image | Counter 1 /// Start picking image | Counter 2 /// Start picking image | Counter 3 /// /// Have picked an image | Counter 3 /// /// > Start identifying that image | Counter 3 /// > Finished identifying that image | Counter 3 /// /// >> Start showing result | Counter 3 /// >> Stopped showing result | Counter 3 void main() { final bloc = TestBloc(); bloc.stream.listen(null); bloc.add(PickImageEvent()); bloc.add(PickImageEvent()); bloc.add(PickImageEvent()); }
<span>import</span> <span>'package</span>:bloc/bloc.dart'; <span>import</span> <span>'package</span>:bloc_concurrency/bloc_concurrency.dart'; <span>abstract</span> <span><span>class</span> <span>BaseEvent</span> </span>{} <span><span>class</span> <span>PickImageEvent</span> <span>extends</span> <span>BaseEvent</span> </span>{} <span><span>class</span> <span>IdentifyImageEvent</span> <span>extends</span> <span>BaseEvent</span> </span>{} <span><span>class</span> <span>ShowResultEvent</span> <span>extends</span> <span>BaseEvent</span> </span>{} <span><span>class</span> <span>BaseState</span> </span>{ } <span><span>class</span> <span>BlockProxy</span> <span>extends</span> <span>Bloc<BaseEvent</span>, <span>BaseState></span> </span>{ <span>var</span> _counter = <span>0</span>; <span>BlockProxy</span>(<span>var</span> testCounter) : <span>super</span>(<span>BaseState</span>()) { _counter = testCounter; on<<span>PickImageEvent</span>>(_onPickImageEvent, transformer: restartable()); on<<span>IdentifyImageEvent</span>>(_onIdentifyImageEvent, transformer: restartable()); on<<span>ShowResultEvent</span>>(_onShowResultEvent, transformer: restartable()); } <span>Future</span> _onPickImageEvent(event, emit) async { print(<span>'Start</span> picking image | <span>Counter</span> $_counter'); await <span>Future</span>.delayed(const <span>Duration</span>(seconds: <span>5</span>)); <span>if</span> (!isClosed) { print(<span>'Have</span> picked an image | <span>Counter</span> $_counter'); add(<span>IdentifyImageEvent</span>()); } } <span>Future</span> _onIdentifyImageEvent(event, emit) async { print('> <span>Start</span> identifying that image | <span>Counter</span> $_counter'); await <span>Future</span>.delayed(const <span>Duration</span>(seconds: <span>3</span>)); <span>if</span> (!isClosed) { print('> <span>Finished</span> identifying that image | <span>Counter</span> $_counter'); add(<span>ShowResultEvent</span>()); } } <span>Future</span> _onShowResultEvent(event, emit) async { print('>> <span>Start</span> showing result | <span>Counter</span> $_counter'); await <span>Future</span>.delayed(const <span>Duration</span>(seconds: <span>2</span>)); <span>if</span> (!isClosed) { print('>> <span>Stopped</span> showing result | <span>Counter</span> $_counter'); } } } <span><span>class</span> <span>TestBloc</span> </span>{ <span>List</span><<span>BlockProxy</span>> blocList = []; <span>var</span> testCounter = <span>0</span>; void add(<span>PickImageEvent</span> event) async { <span>for</span> (<span>BlockProxy</span> element in blocList) { <span>if</span> (!element.isClosed) { element.close(); } } <span>var</span> bloc = <span>BlockProxy</span>(++testCounter); blocList.add(bloc); bloc.stream.listen(<span>null</span>); bloc.add(event); } } <span>/// Expect result:</span> <span>/// Start picking image | Counter 1</span> <span>/// Start picking image | Counter 2</span> <span>/// Start picking image | Counter 3</span> <span>///</span> <span>/// Have picked an image | Counter 3</span> <span>///</span> <span>/// > Start identifying that image | Counter 3</span> <span>/// > Finished identifying that image | Counter 3</span> <span>///</span> <span>/// >> Start showing result | Counter 3</span> <span>/// >> Stopped showing result | Counter 3</span> void main() { <span>final</span> bloc = <span>TestBloc</span>(); bloc.add(<span>PickImageEvent</span>()); bloc.add(<span>PickImageEvent</span>()); bloc.add(<span>PickImageEvent</span>()); }
2.2K Point(s)
1.2K Point(s)
313 Point(s)
178 Point(s)
138 Point(s)
Input your email to receive reset password link, or if you remember your password, you can click