mirror of
https://github.com/Linloir/Simple-TCP-Client.git
synced 2025-12-17 08:48:11 +08:00
60 lines
1.9 KiB
Dart
60 lines
1.9 KiB
Dart
/*
|
|
* @Author : Linloir
|
|
* @Date : 2022-10-13 14:01:45
|
|
* @LastEditTime : 2022-10-14 23:03:02
|
|
* @Description :
|
|
*/
|
|
|
|
import 'dart:async';
|
|
|
|
import 'package:bloc/bloc.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'package:tcp_client/home/view/contact_page/cubit/contact_state.dart';
|
|
import 'package:tcp_client/repositories/local_service_repository/local_service_repository.dart';
|
|
import 'package:tcp_client/repositories/tcp_repository/models/tcp_request.dart';
|
|
import 'package:tcp_client/repositories/tcp_repository/models/tcp_response.dart';
|
|
import 'package:tcp_client/repositories/tcp_repository/tcp_repository.dart';
|
|
|
|
class ContactCubit extends Cubit<ContactState> {
|
|
ContactCubit({
|
|
required this.localServiceRepository,
|
|
required this.tcpRepository
|
|
}): super(ContactState.empty()) {
|
|
subscription = tcpRepository.responseStreamBroadcast.listen(_onResponse);
|
|
updateContacts();
|
|
timer = Timer.periodic(const Duration(seconds: 10), (timer) {updateContacts();});
|
|
}
|
|
|
|
final LocalServiceRepository localServiceRepository;
|
|
final TCPRepository tcpRepository;
|
|
late final StreamSubscription subscription;
|
|
late final Timer timer;
|
|
|
|
void _onResponse(TCPResponse response) {
|
|
switch(response.type) {
|
|
case TCPResponseType.fetchContact: {
|
|
response as FetchContactResponse;
|
|
emit(ContactState(
|
|
contacts: response.addedContacts,
|
|
pending: response.pendingContacts,
|
|
requesting: response.requestingContacts
|
|
));
|
|
break;
|
|
}
|
|
default: break;
|
|
}
|
|
}
|
|
|
|
Future<void> updateContacts() async {
|
|
tcpRepository.pushRequest(FetchContactRequest(token: (await SharedPreferences.getInstance()).getInt('token')));
|
|
}
|
|
|
|
//Override dispose to cancel the subscription
|
|
@override
|
|
Future<void> close() {
|
|
subscription.cancel();
|
|
timer.cancel();
|
|
return super.close();
|
|
}
|
|
}
|