mirror of
https://github.com/Linloir/Simple-TCP-Client.git
synced 2025-12-18 17:28:11 +08:00
Improvements:
- Fetch message indicator when startup
This commit is contained in:
parent
a3d4311479
commit
01e7685a4d
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author : Linloir
|
||||
* @Date : 2022-10-13 14:02:28
|
||||
* @LastEditTime : 2022-10-17 19:26:13
|
||||
* @LastEditTime : 2022-10-21 23:31:43
|
||||
* @Description :
|
||||
*/
|
||||
|
||||
@ -9,8 +9,10 @@ import 'dart:async';
|
||||
|
||||
import 'package:bloc/bloc.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/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';
|
||||
|
||||
@ -19,11 +21,41 @@ class HomeCubit extends Cubit<HomeState> {
|
||||
required this.localServiceRepository,
|
||||
required this.tcpRepository,
|
||||
required this.pageController
|
||||
}): super(const HomeState(page: HomePagePosition.message)) {
|
||||
}): super(const HomeState(page: HomePagePosition.message, status: HomePageStatus.initializing)) {
|
||||
pageController.addListener(() {
|
||||
emit(state.copyWith(page: HomePagePosition.fromValue((pageController.page ?? 0).round())));
|
||||
});
|
||||
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;
|
||||
@ -40,6 +72,9 @@ class HomeCubit extends Cubit<HomeState> {
|
||||
}
|
||||
|
||||
void _onTCPResponse(TCPResponse response) {
|
||||
if(response.status == TCPResponseStatus.err) {
|
||||
return;
|
||||
}
|
||||
switch(response.type) {
|
||||
case TCPResponseType.forwardMessage: {
|
||||
response as ForwardMessageResponse;
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
/*
|
||||
* @Author : Linloir
|
||||
* @Date : 2022-10-13 14:02:24
|
||||
* @LastEditTime : 2022-10-13 16:55:05
|
||||
* @LastEditTime : 2022-10-21 23:28:33
|
||||
* @Description :
|
||||
*/
|
||||
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
enum HomePageStatus { initializing, done }
|
||||
|
||||
enum HomePagePosition {
|
||||
message(0),
|
||||
contact(1),
|
||||
@ -26,13 +28,14 @@ enum HomePagePosition {
|
||||
|
||||
class HomeState extends Equatable {
|
||||
final HomePagePosition page;
|
||||
final HomePageStatus status;
|
||||
|
||||
const HomeState({required this.page});
|
||||
const HomeState({required this.page, required this.status});
|
||||
|
||||
HomeState copyWith({HomePagePosition? page}) {
|
||||
return HomeState(page: page ?? this.page);
|
||||
HomeState copyWith({HomePagePosition? page, HomePageStatus? status}) {
|
||||
return HomeState(page: page ?? this.page, status: status ?? this.status);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object> get props => [page];
|
||||
List<Object> get props => [page, status];
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author : Linloir
|
||||
* @Date : 2022-10-11 11:05:08
|
||||
* @LastEditTime : 2022-10-19 11:08:50
|
||||
* @LastEditTime : 2022-10-21 23:56:24
|
||||
* @Description :
|
||||
*/
|
||||
|
||||
@ -119,9 +119,12 @@ class HomePageView extends StatelessWidget {
|
||||
)
|
||||
],
|
||||
),
|
||||
body: Center(
|
||||
child: BlocBuilder<HomeCubit, HomeState>(
|
||||
builder:(context, state) => PageView(
|
||||
body: BlocBuilder<HomeCubit, HomeState>(
|
||||
builder:(context, state) => Stack(
|
||||
children: [
|
||||
Positioned.fill(
|
||||
child: Center(
|
||||
child: PageView(
|
||||
controller: context.read<HomeCubit>().pageController,
|
||||
children: [
|
||||
MessagePage(),
|
||||
@ -131,6 +134,43 @@ class HomePageView extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
),
|
||||
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>(
|
||||
builder: (context, state) => BottomNavigationBar(
|
||||
items: const [
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author : Linloir
|
||||
* @Date : 2022-10-12 23:38:31
|
||||
* @LastEditTime : 2022-10-19 18:02:22
|
||||
* @LastEditTime : 2022-10-21 23:14:02
|
||||
* @Description :
|
||||
*/
|
||||
|
||||
@ -40,10 +40,7 @@ class MessageListCubit extends Cubit<MessageListState> {
|
||||
}
|
||||
}
|
||||
return msgList;
|
||||
}).then((msgList) => emit(state.updateWithList(orderedNewMessages: msgList)))
|
||||
.then((_) async => tcpRepository.pushRequest(FetchMessageRequest(
|
||||
token: (await SharedPreferences.getInstance()).getInt('token'))
|
||||
));
|
||||
}).then((msgList) => emit(state.updateWithList(orderedNewMessages: msgList)));
|
||||
}
|
||||
|
||||
final LocalServiceRepository localServiceRepository;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user