Created
March 21, 2019 23:03
-
-
Save felangel/6a1acc7f312b5917ae034776970f8a1a to your computer and use it in GitHub Desktop.
BlocBuilder Race Condition Test
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
import 'package:flutter/material.dart'; | |
import 'package:bloc/bloc.dart'; | |
import 'package:flutter_bloc/flutter_bloc.dart'; | |
abstract class DataState {} | |
class InitialDataState extends DataState {} | |
class LoadedDataState extends DataState { | |
final String data; | |
LoadedDataState({@required this.data}); | |
} | |
abstract class DataEvent {} | |
class FetchData extends DataEvent {} | |
class DataBloc extends Bloc<DataEvent, DataState> { | |
@override | |
DataState get initialState => InitialDataState(); | |
@override | |
void onTransition(Transition<DataEvent, DataState> transition) { | |
print(transition); | |
} | |
@override | |
Stream<DataState> mapEventToState( | |
DataState currentState, | |
DataEvent event, | |
) async* { | |
if (event is FetchData) { | |
yield LoadedDataState(data: 'Cool Data'); | |
} | |
} | |
} | |
DataBloc dataBloc = DataBloc(); | |
void main() async { | |
dataBloc.dispatch(FetchData()); | |
await Future.delayed(Duration(seconds: 1)); | |
runApp(MyApp()); | |
} | |
class MyApp extends StatelessWidget { | |
@override | |
Widget build(BuildContext context) { | |
return MaterialApp( | |
home: HomePage(), | |
); | |
} | |
} | |
class HomePage extends StatelessWidget { | |
@override | |
Widget build(BuildContext context) { | |
print('building HomePage'); | |
return Scaffold( | |
appBar: AppBar( | |
title: Text('Flutter Demo'), | |
), | |
body: BlocBuilder( | |
bloc: dataBloc, | |
builder: (BuildContext context, DataState state) { | |
if (state is InitialDataState) { | |
return Center(child: CircularProgressIndicator()); | |
} | |
if (state is LoadedDataState) { | |
return Center(child: Text(state.data)); | |
} | |
return Container(); | |
}, | |
), | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment