import 'package:flutter/material.dart'; import 'package:ftc_mobile_app/ftc_mobile_app.dart'; import 'package:ftc_mobile_app/models/chat/ChatModel.dart'; import 'package:ftc_mobile_app/view/screens/chat/arguments/chat_screen_args.dart'; import 'package:ftc_mobile_app/web_services/chat_services.dart'; import 'package:get/get.dart'; import 'package:pull_to_refresh_flutter3/pull_to_refresh_flutter3.dart'; import '../../custom_widgets/my_circle_image.dart'; class InboxScreen extends StatefulWidget { const InboxScreen({Key? key}) : super(key: key); @override State createState() => _InboxScreenState(); } class _InboxScreenState extends State { final InboxScreenController controller = Get.put(InboxScreenController()); @override Widget build(BuildContext context) { return CustomScaffold( backgroundColor: CustomAppColors.kPrimaryColor, screenKey: controller.screenKey, // onBackButton: controller.onBackButtonPressed, onScreenTap: controller.removeFocus, showAppBar: false, body: Obx(() { final list = controller.chatsAndGroups(); list.sort((a, b) => b.date.compareTo(a.date)); final canLoadMore = controller.canLoadMore.value; return SmartRefresher( key: const ValueKey("clients_list"), controller: controller.listRC, scrollController: controller.listSC, header: FrequentFunctions.waterDropHeader, enablePullUp: canLoadMore, onRefresh: controller.onRefresh, onLoading: controller.onLoading, child: (list.isEmpty) ? Container( color: Colors.white, child: const Center( child: Text("Your inbox is empty"), ), ) : ListView.separated( shrinkWrap: true, itemCount: list.length, padding: REdgeInsets.symmetric(horizontal: 20), separatorBuilder: (_, int index) => 8.verticalSpace, itemBuilder: (BuildContext context, int index) { return SenderListWidget( messagesListModel: controller.chatsAndGroups[index], onTap: (messagesListModel) async { await Navigator.pushNamed( context, CustomRouteNames.kChatScreenRoute, arguments: ChatScreenArgs( name: messagesListModel.title, profilePicPath: messagesListModel.image, otherUserId: messagesListModel.otherUserId, groupData: messagesListModel.groupData, onLastMessageUpdate: (m) => _onLastMessageUpdate(index, m), ), ); }, ); }, ), ); }), floatingActionButton: FloatingActionButton( onPressed: () { Navigator.pushNamed( context, CustomRouteNames.kSelectUserForChatScreenRoute); }, child: const Icon(Icons.add), ), ); } _onLastMessageUpdate(int index, ChatModel model) { if (mounted) { controller.chatsAndGroups[index].previewOfLastMessage = model.message ?? ""; controller.chatsAndGroups[index].date = model.date ?? DateTime.now().millisecondsSinceEpoch; controller.chatsAndGroups.refresh(); } } } class SenderListWidget extends StatefulWidget { const SenderListWidget({ super.key, required this.messagesListModel, required this.onTap, }); final MessagesListModel messagesListModel; final ValueChanged onTap; @override State createState() => _SenderListWidgetState(); } class _SenderListWidgetState extends State { @override Widget build(BuildContext context) { return InkWell( onTap: () => widget.onTap(widget.messagesListModel), child: Container( padding: REdgeInsets.symmetric(vertical: 9), child: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ MyCircleImage( imageSize: 53.r, url: "${WebUrls.baseUrl}${widget.messagesListModel.image}", errorWidget: CustomImageWidget( imagePath: AssetsManager.kPersonMainIcon, imageColor: CustomAppColors.kDarkBlueTextColor, height: 53.r, width: 53.r, ), ), 12.horizontalSpace, Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ CustomTextWidget( text: widget.messagesListModel.title, fontColor: CustomAppColors.kDarkBlueTextColor, fontSize: 16.sp, fontWeight: FontWeight.w600, isExpanded: false, ), 4.verticalSpace, (widget.messagesListModel.messageType == MessageType.message.name) ? CustomTextWidget( text: widget.messagesListModel.previewOfLastMessage, fontColor: widget.messagesListModel.isRecent == true ? CustomAppColors.kDarkBlueTextColor : CustomAppColors.kLightGreyColor, fontSize: 12.sp, maxLines: 1, fontWeight: FontWeight.w600, textAlign: TextAlign.left, isExpanded: false, ) : FrequentFunctions.noWidget, ], ), ), Container( padding: REdgeInsets.only(right: 2), child: Column( children: [ CustomTextWidget( text: FrequentFunctions.toTimesAgo( DateTime.fromMillisecondsSinceEpoch( widget.messagesListModel.date) .toIso8601String()), fontColor: CustomAppColors.kLightGreyColor, fontSize: 12.sp, fontWeight: FontWeight.w600, isExpanded: false, ), widget.messagesListModel.noOfMessages != 0 ? Padding( padding: EdgeInsets.only(top: 8.0.h), child: CircleAvatar( minRadius: 8.sp, maxRadius: 8.sp, backgroundColor: CustomAppColors.kBlackColor, child: CustomTextWidget( text: "${widget.messagesListModel.noOfMessages}", isExpanded: false, fontSize: 8.sp, fontColor: CustomAppColors.kPrimaryColor, ), ), ) : Container(), ], ), ), ], ), ), ); } }