I have a stock marketing project which uses web socket connection, so in order to get the continuous response I have been using bloc consumer("flutter_bloc").
But I am not able to parse the response from the socket , so is there any blog or any other reference regarding the same.
home_screen.dart
homeBloc = BlocProvider.of<HomeBloc>(context);
homeBloc.add(FetchHomeEvent());
homeBloc.listenMessages();
...
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => HomeBloc(HomeLoadedState()),
child: Scaffold();
home_bloc.dart
class HomeBloc extends Bloc<HomeEvent, HomeState> {
List<Home> homeList = [];
Home sendMessage=Home(id:'50003');
// HomeBloc():super[];
final TextEditingController messageTextTextEditingController=TextEditingController();
HomeBloc(HomeState initialState) : super(initialState);
HomeState get initialState=>HomeInitial();
final IOWebSocketChannel channel=IOWebSocketChannel.connect(ConstantBaseUrls.baseUrlWs);
final BehaviorSubject<String> messageTextBehaviorSubject=BehaviorSubject<String>();
Stream<String> get messageTextStream=>messageTextBehaviorSubject.stream;
StreamSink<String> get messageTextStreamSink=>messageTextBehaviorSubject.sink;
void dispose() {
channel.closeCode;
messageTextBehaviorSubject.close();
messageTextTextEditingController.dispose();
}
@override
Stream<HomeState> mapEventToState(HomeEvent event) async* {
if(event is FetchHomeEvent) {
print('~~~ FetchDirectEvent');
yield* mapFetchHomeEventToState(event);
}
}
Stream<HomeState> mapFetchHomeEventToState(FetchHomeEvent event) async* {
try {
yield HomeLoadedState(homeList: homeList);
} catch(e) {
print('~~init: ${e.toString()}');
// Screen.showToast(e.toString());
}
}
void listenMessages()async {
channel.stream.listen((data) async {
print('~~~ data: ${data.runtimeType} $data len: ${homeList.length}');
homeList.add(Home.fromJson(jsonDecode(data)));
print('~~~ 2 len: ${homeList.length}');
add(FetchHomeEvent());
});
}
}
home_event.dart
abstract class HomeEvent {}
class FetchHomeEvent extends HomeEvent {
FetchHomeEvent();
List<Object> get props=>[];
}
home_state.dart
abstract class HomeState {}
class HomeInitial extends HomeState {
List<Object> get props=>[];
}
class HomeLoadedState extends HomeState {
List<Home>? homeList;
HomeLoadedState({this.homeList});
List<Object> get props=>[homeList!];
}
class HomeErrorState extends HomeState {
String? id;
String? company;
String? time;
String? text;
List<Home>? homeList;
HomeErrorState({this.id, this.company, this.text, this.time});
List<Object> get props=>[homeList!, id! , company! , time!, text!];
}
Access the key in response and update my UI as per the response again and again as the stock value changes