Bloc Library State
В приложении использую блок, для загрузки данных с Firestore использую Stream, все загружается, отображается. Но при переходе с HomeScreen на другой виджет и возвращении назад блок не отображает данные. нужно использовать хот релоад. Не могу понять в чем проблема?
Main widget.
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider(
create: (context) => DataBloc(),
),
],
child: MaterialApp(
home: HomeScreenTest(),
),
);
}
HomeScreen.
class HomeScreenTest extends StatelessWidget {
@override
Widget build(BuildContext context) {
BlocProvider.of<DataBloc>(context)..add(LoadData());
return Scaffold(
backgroundColor: Colors.grey.shade600,
body: Column(
children: <Widget>[
BlocBuilder<DataBloc, DataState>(
builder: (context, state) {
if (state is DataLoadedState) {
return dataColumn(context, state.dataTest);
} else {
return Container();
}
},
),
)
],
);
}
}
Bloc.
class DataBloc extends Bloc<DataEvent, DataState> {
StreamSubscription streamSubscription;
@override
DataState get initialState => DataState();
@override
Stream<DataState> mapEventToState(DataEvent event) async* {
if (event is LoadData) {
streamSubscription = Data().dataTest.listen(
(data) => add(DataLoaded(dataTest: data)));
} else if (event is DataLoaded) {
yield DataLoadedState(
dataTest: event.dataTest);
}
}
}
Event.
abstract class DataEvent extends Equatable {
const DataEvent();
}
class LoadData extends DataEvent {
List<DataTest> dataTest;
LoadData({this.dataTest});
@override
List<Object> get props => [dataTest];
}
class DataLoaded extends DataEvent {
List<DataTest> dataTest;
DataLoaded({this.dataTest});
@override
List<Object> get props => [dataTest];
}
State.
class DataState extends Equatable {
@override
List<Object> get props => [];
}
class DataLoadedState extends DataState {
List<DataTest> dataTest;
DataLoadedState({this.dataTest});
@override
List<Object> get props => [dataTest];
}