diff --git a/lib/home/cubit/home_cubit.dart b/lib/home/cubit/home_cubit.dart index d24e67e..a605076 100644 --- a/lib/home/cubit/home_cubit.dart +++ b/lib/home/cubit/home_cubit.dart @@ -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 { 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 { } void _onTCPResponse(TCPResponse response) { + if(response.status == TCPResponseStatus.err) { + return; + } switch(response.type) { case TCPResponseType.forwardMessage: { response as ForwardMessageResponse; diff --git a/lib/home/cubit/home_state.dart b/lib/home/cubit/home_state.dart index b01f524..64fec37 100644 --- a/lib/home/cubit/home_state.dart +++ b/lib/home/cubit/home_state.dart @@ -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 get props => [page]; + List get props => [page, status]; } diff --git a/lib/home/home_page.dart b/lib/home/home_page.dart index 89835ab..a9465af 100644 --- a/lib/home/home_page.dart +++ b/lib/home/home_page.dart @@ -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,16 +119,56 @@ class HomePageView extends StatelessWidget { ) ], ), - body: Center( - child: BlocBuilder( - builder:(context, state) => PageView( - controller: context.read().pageController, - children: [ - MessagePage(), - const ContactPage(), - MyProfilePage(userID: userID) - ], - ), + body: BlocBuilder( + builder:(context, state) => Stack( + children: [ + Positioned.fill( + child: Center( + child: PageView( + controller: context.read().pageController, + 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( diff --git a/lib/home/view/message_page/cubit/msg_list_cubit.dart b/lib/home/view/message_page/cubit/msg_list_cubit.dart index 08fe392..73db5ec 100644 --- a/lib/home/view/message_page/cubit/msg_list_cubit.dart +++ b/lib/home/view/message_page/cubit/msg_list_cubit.dart @@ -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 { } } 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;