This repository has been archived on 2024-10-18. You can view files and clone it, but cannot push or open issues or pull requests.
ftc_patient_app/lib/view/screens/home/inbox_screen.dart

203 lines
7.5 KiB
Dart

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<InboxScreen> createState() => _InboxScreenState();
}
class _InboxScreenState extends State<InboxScreen> {
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<MessagesListModel> onTap;
@override
State<SenderListWidget> createState() => _SenderListWidgetState();
}
class _SenderListWidgetState extends State<SenderListWidget> {
@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(),
],
),
),
],
),
),
);
}
}