You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			151 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			151 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Dart
		
	
| import 'package:easy_localization/easy_localization.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:mohem_flutter_app/app_state/app_state.dart';
 | |
| import 'package:mohem_flutter_app/classes/colors.dart';
 | |
| import 'package:mohem_flutter_app/classes/utils.dart';
 | |
| import 'package:mohem_flutter_app/extensions/int_extensions.dart';
 | |
| import 'package:mohem_flutter_app/extensions/string_extensions.dart';
 | |
| import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
 | |
| import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
 | |
| import 'package:mohem_flutter_app/provider/chat_provider_model.dart';
 | |
| import 'package:mohem_flutter_app/ui/chat/chat_home_screen.dart';
 | |
| import 'package:mohem_flutter_app/ui/chat/favorite_users_screen.dart';
 | |
| import 'package:mohem_flutter_app/ui/chat/group_chat.dart';
 | |
| import 'package:mohem_flutter_app/ui/chat/my_team_screen.dart';
 | |
| import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart';
 | |
| import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
 | |
| import 'package:provider/provider.dart';
 | |
| import 'package:signalr_netcore/signalr_client.dart';
 | |
| 
 | |
| class ChatHome extends StatefulWidget {
 | |
|   const ChatHome({Key? key}) : super(key: key);
 | |
| 
 | |
|   @override
 | |
|   State<ChatHome> createState() => _ChatHomeState();
 | |
| }
 | |
| 
 | |
| class _ChatHomeState extends State<ChatHome> {
 | |
|   int tabIndex = 0;
 | |
|   PageController controller = PageController();
 | |
|   late ChatProviderModel data;
 | |
| 
 | |
|   @override
 | |
|   void initState() {
 | |
|     super.initState();
 | |
| 
 | |
|     if (chatHubConnection.state == HubConnectionState.Connected) {
 | |
|       data = Provider.of<ChatProviderModel>(context, listen: false);
 | |
|       data.registerEvents();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   void dispose() {
 | |
|     super.dispose();
 | |
|     data.clearAll();
 | |
|   }
 | |
| 
 | |
|   void fetchAgain() {
 | |
|     if (chatHubConnection.state != HubConnectionState.Connected) {
 | |
|       data.getUserAutoLoginToken().whenComplete(() async {
 | |
|         await data.buildHubConnection();
 | |
|         data.getUserRecentChats();
 | |
|       });
 | |
|       return;
 | |
|     }
 | |
|     if (data.searchedChats == null || data.searchedChats!.isEmpty) {
 | |
|       data.isLoading = true;
 | |
|       data.getUserRecentChats().whenComplete(() async {
 | |
|         // String isAppOpendByChat = await Utils.getStringFromPrefs("isAppOpendByChat");
 | |
|         // String notificationData = await Utils.getStringFromPrefs("notificationData");
 | |
|         // if (isAppOpendByChat != "null" || isAppOpendByChat == "true" && notificationData != "null") {
 | |
|         //  data.openChatByNoti(context);
 | |
|         // }
 | |
|       });
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     fetchAgain();
 | |
|     return Scaffold(
 | |
|       backgroundColor: MyColors.white,
 | |
|       appBar: AppBarWidget(context, title: LocaleKeys.chat.tr(), showHomeButton: true),
 | |
|       body: Column(
 | |
|         children: <Widget>[
 | |
|           Container(
 | |
|             padding: const EdgeInsets.only(left: 21, right: 21, top: 16, bottom: 16),
 | |
|             decoration: const BoxDecoration(
 | |
|               borderRadius: BorderRadius.only(
 | |
|                 bottomLeft: Radius.circular(25),
 | |
|                 bottomRight: Radius.circular(25),
 | |
|               ),
 | |
|               gradient: LinearGradient(
 | |
|                 transform: GradientRotation(.83),
 | |
|                 begin: Alignment.topRight,
 | |
|                 end: Alignment.bottomLeft,
 | |
|                 colors: <Color>[
 | |
|                   MyColors.gradiantEndColor,
 | |
|                   MyColors.gradiantStartColor,
 | |
|                 ],
 | |
|               ),
 | |
|             ),
 | |
|             child: Row(
 | |
|               children: <Widget>[
 | |
|                 myTab(LocaleKeys.mychats.tr(), 0),
 | |
|                 // myTab(LocaleKeys.group.tr(), 1),
 | |
|                 myTab(LocaleKeys.favorite.tr(), 2),
 | |
|                 AppState().getempStatusIsManager ? myTab(LocaleKeys.myTeam.tr(), 3) : const SizedBox(),
 | |
|               ],
 | |
|             ),
 | |
|           ),
 | |
|           PageView(
 | |
|             controller: controller,
 | |
|             physics: const NeverScrollableScrollPhysics(),
 | |
|             onPageChanged: (int pageIndex) {
 | |
|               setState(() {
 | |
|                 tabIndex = pageIndex;
 | |
|               });
 | |
|             },
 | |
|             children: <Widget>[
 | |
|               ChatHomeScreen(),
 | |
|               // GropChatHomeScreen(),
 | |
|               ChatFavoriteUsersScreen(),
 | |
|               AppState().getempStatusIsManager ? const MyTeamScreen() : const SizedBox(),
 | |
|             ],
 | |
|           ).expanded,
 | |
|         ],
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   Widget myTab(String title, int index) {
 | |
|     bool isSelected = (index == tabIndex);
 | |
|     return Column(
 | |
|       mainAxisSize: MainAxisSize.min,
 | |
|       crossAxisAlignment: CrossAxisAlignment.center,
 | |
|       children: [
 | |
|         title.toText12(
 | |
|           color: isSelected ? MyColors.white : MyColors.white.withOpacity(.74),
 | |
|           isCenter: true,
 | |
|         ),
 | |
|         4.height,
 | |
|         Container(
 | |
|           height: 8,
 | |
|           width: 8,
 | |
|           decoration: BoxDecoration(
 | |
|             shape: BoxShape.circle,
 | |
|             color: isSelected ? MyColors.white : Colors.transparent,
 | |
|           ),
 | |
|         ).onPress(() {
 | |
|           setState(() {
 | |
|             // showFabOptions = true;
 | |
|           });
 | |
|         })
 | |
|       ],
 | |
|     ).onPress(() {
 | |
|       controller.jumpToPage(index);
 | |
|     }).expanded;
 | |
|   }
 | |
| }
 |