mirror of
https://github.com/Linloir/Simple-TCP-Client.git
synced 2025-12-19 09:48:11 +08:00
Improvements:
- Fetch message indicator when startup
This commit is contained in:
parent
ba452c7fd8
commit
ba59d23484
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* @Author : Linloir
|
* @Author : Linloir
|
||||||
* @Date : 2022-10-13 14:02:28
|
* @Date : 2022-10-13 14:02:28
|
||||||
* @LastEditTime : 2022-10-17 19:26:13
|
* @LastEditTime : 2022-10-21 23:31:43
|
||||||
* @Description :
|
* @Description :
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -9,8 +9,10 @@ import 'dart:async';
|
|||||||
|
|
||||||
import 'package:bloc/bloc.dart';
|
import 'package:bloc/bloc.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:tcp_client/home/cubit/home_state.dart';
|
import 'package:tcp_client/home/cubit/home_state.dart';
|
||||||
import 'package:tcp_client/repositories/local_service_repository/local_service_repository.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/models/tcp_response.dart';
|
||||||
import 'package:tcp_client/repositories/tcp_repository/tcp_repository.dart';
|
import 'package:tcp_client/repositories/tcp_repository/tcp_repository.dart';
|
||||||
|
|
||||||
@ -19,11 +21,41 @@ class HomeCubit extends Cubit<HomeState> {
|
|||||||
required this.localServiceRepository,
|
required this.localServiceRepository,
|
||||||
required this.tcpRepository,
|
required this.tcpRepository,
|
||||||
required this.pageController
|
required this.pageController
|
||||||
}): super(const HomeState(page: HomePagePosition.message)) {
|
}): super(const HomeState(page: HomePagePosition.message, status: HomePageStatus.initializing)) {
|
||||||
pageController.addListener(() {
|
pageController.addListener(() {
|
||||||
emit(state.copyWith(page: HomePagePosition.fromValue((pageController.page ?? 0).round())));
|
emit(state.copyWith(page: HomePagePosition.fromValue((pageController.page ?? 0).round())));
|
||||||
});
|
});
|
||||||
subscription = tcpRepository.responseStreamBroadcast.listen(_onTCPResponse);
|
subscription = tcpRepository.responseStreamBroadcast.listen(_onTCPResponse);
|
||||||
|
Future(() async {
|
||||||
|
// var cloned = await tcpRepository.clone();
|
||||||
|
// cloned.pushRequest(FetchMessageRequest(
|
||||||
|
// token: (await SharedPreferences.getInstance()).getInt('token')
|
||||||
|
// ));
|
||||||
|
// await for(var response in cloned.responseStreamBroadcast) {
|
||||||
|
// if(response.type == TCPResponseType.fetchMessage) {
|
||||||
|
// if(response.status == TCPResponseStatus.ok) {
|
||||||
|
// response as FetchMessageResponse;
|
||||||
|
// localServiceRepository.storeMessages(response.messages);
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// cloned.dispose();
|
||||||
|
tcpRepository.pushRequest(FetchMessageRequest(
|
||||||
|
token: (await SharedPreferences.getInstance()).getInt('token')
|
||||||
|
));
|
||||||
|
await for(var response in tcpRepository.responseStreamBroadcast) {
|
||||||
|
if(response.type == TCPResponseType.fetchMessage) {
|
||||||
|
if(response.status == TCPResponseStatus.ok) {
|
||||||
|
response as FetchMessageResponse;
|
||||||
|
localServiceRepository.storeMessages(response.messages);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).then((_) {
|
||||||
|
emit(state.copyWith(status: HomePageStatus.done));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
final LocalServiceRepository localServiceRepository;
|
final LocalServiceRepository localServiceRepository;
|
||||||
@ -40,6 +72,9 @@ class HomeCubit extends Cubit<HomeState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _onTCPResponse(TCPResponse response) {
|
void _onTCPResponse(TCPResponse response) {
|
||||||
|
if(response.status == TCPResponseStatus.err) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
switch(response.type) {
|
switch(response.type) {
|
||||||
case TCPResponseType.forwardMessage: {
|
case TCPResponseType.forwardMessage: {
|
||||||
response as ForwardMessageResponse;
|
response as ForwardMessageResponse;
|
||||||
|
|||||||
@ -1,12 +1,14 @@
|
|||||||
/*
|
/*
|
||||||
* @Author : Linloir
|
* @Author : Linloir
|
||||||
* @Date : 2022-10-13 14:02:24
|
* @Date : 2022-10-13 14:02:24
|
||||||
* @LastEditTime : 2022-10-13 16:55:05
|
* @LastEditTime : 2022-10-21 23:28:33
|
||||||
* @Description :
|
* @Description :
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
|
||||||
|
enum HomePageStatus { initializing, done }
|
||||||
|
|
||||||
enum HomePagePosition {
|
enum HomePagePosition {
|
||||||
message(0),
|
message(0),
|
||||||
contact(1),
|
contact(1),
|
||||||
@ -26,13 +28,14 @@ enum HomePagePosition {
|
|||||||
|
|
||||||
class HomeState extends Equatable {
|
class HomeState extends Equatable {
|
||||||
final HomePagePosition page;
|
final HomePagePosition page;
|
||||||
|
final HomePageStatus status;
|
||||||
|
|
||||||
const HomeState({required this.page});
|
const HomeState({required this.page, required this.status});
|
||||||
|
|
||||||
HomeState copyWith({HomePagePosition? page}) {
|
HomeState copyWith({HomePagePosition? page, HomePageStatus? status}) {
|
||||||
return HomeState(page: page ?? this.page);
|
return HomeState(page: page ?? this.page, status: status ?? this.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [page];
|
List<Object> get props => [page, status];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* @Author : Linloir
|
* @Author : Linloir
|
||||||
* @Date : 2022-10-11 11:05:08
|
* @Date : 2022-10-11 11:05:08
|
||||||
* @LastEditTime : 2022-10-19 11:08:50
|
* @LastEditTime : 2022-10-21 23:56:24
|
||||||
* @Description :
|
* @Description :
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -119,16 +119,56 @@ class HomePageView extends StatelessWidget {
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: Center(
|
body: BlocBuilder<HomeCubit, HomeState>(
|
||||||
child: BlocBuilder<HomeCubit, HomeState>(
|
builder:(context, state) => Stack(
|
||||||
builder:(context, state) => PageView(
|
children: [
|
||||||
controller: context.read<HomeCubit>().pageController,
|
Positioned.fill(
|
||||||
children: [
|
child: Center(
|
||||||
MessagePage(),
|
child: PageView(
|
||||||
const ContactPage(),
|
controller: context.read<HomeCubit>().pageController,
|
||||||
MyProfilePage(userID: userID)
|
children: [
|
||||||
],
|
MessagePage(),
|
||||||
),
|
const ContactPage(),
|
||||||
|
MyProfilePage(userID: userID)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if(state.status == HomePageStatus.initializing)
|
||||||
|
Positioned.fill(
|
||||||
|
child: AbsorbPointer(
|
||||||
|
child: Center(
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.grey[800]!.withOpacity(0.5),
|
||||||
|
borderRadius: BorderRadius.circular(8.0)
|
||||||
|
),
|
||||||
|
height: 200,
|
||||||
|
width: 200,
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: const [
|
||||||
|
CircularProgressIndicator(
|
||||||
|
color: Colors.white,
|
||||||
|
strokeWidth: 4.0,
|
||||||
|
),
|
||||||
|
SizedBox(height: 16.0,),
|
||||||
|
Text(
|
||||||
|
'Fetching Messages',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: 18.0
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
bottomNavigationBar: BlocBuilder<HomeCubit, HomeState>(
|
bottomNavigationBar: BlocBuilder<HomeCubit, HomeState>(
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* @Author : Linloir
|
* @Author : Linloir
|
||||||
* @Date : 2022-10-12 23:38:31
|
* @Date : 2022-10-12 23:38:31
|
||||||
* @LastEditTime : 2022-10-19 18:02:22
|
* @LastEditTime : 2022-10-21 23:14:02
|
||||||
* @Description :
|
* @Description :
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -40,10 +40,7 @@ class MessageListCubit extends Cubit<MessageListState> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return msgList;
|
return msgList;
|
||||||
}).then((msgList) => emit(state.updateWithList(orderedNewMessages: msgList)))
|
}).then((msgList) => emit(state.updateWithList(orderedNewMessages: msgList)));
|
||||||
.then((_) async => tcpRepository.pushRequest(FetchMessageRequest(
|
|
||||||
token: (await SharedPreferences.getInstance()).getInt('token'))
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final LocalServiceRepository localServiceRepository;
|
final LocalServiceRepository localServiceRepository;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user