message_list.dart 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import 'package:easy_localization/easy_localization.dart';
  2. import 'package:easy_refresh/easy_refresh.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:provider/provider.dart';
  5. import 'package:telnow_mobile_new/src/layouts/functions/message.dart';
  6. import 'package:telnow_mobile_new/src/layouts/mobile/message_chat.dart';
  7. import 'package:telnow_mobile_new/src/layouts/components/template.dart';
  8. import 'package:telnow_mobile_new/src/utils/U.dart';
  9. import 'package:telnow_mobile_new/src/utils/provider.dart';
  10. class MobMessageListPage extends StatefulWidget {
  11. Map<String, dynamic>? user;
  12. MobMessageListPage(this.user, {super.key});
  13. @override
  14. State<MobMessageListPage> createState() => _MobMessageListPageState();
  15. }
  16. class _MobMessageListPageState extends State<MobMessageListPage> {
  17. final MessageFunction messageFunc = MessageFunction();
  18. @override
  19. void initState() {
  20. Provider.of<MessageModule>(context, listen: false).reset();
  21. if(widget.user == null){
  22. messageFunc.getUser(context);
  23. }
  24. else{
  25. Provider.of<MessageModule>(context, listen: false).setUser(widget.user!);
  26. messageFunc.getDataMessages(context);
  27. }
  28. // TODO: implement initState
  29. super.initState();
  30. }
  31. @override
  32. Widget build(BuildContext context) {
  33. return Scaffold(
  34. backgroundColor: Colors.white,
  35. appBar: appBarTemplate(context: context, title: 'message'.tr()),
  36. body: Column(
  37. children: [
  38. divider(),
  39. Expanded(
  40. child: Container(
  41. alignment: Alignment.topCenter,
  42. width: U.bodyWidth(context),
  43. child: EasyRefresh(
  44. header: MaterialHeader(clamping: true, color: primaryColor),
  45. onRefresh: () => messageFunc.onRefresh(context),
  46. child: Provider.of<MessageModule>(context).data().isEmpty && !Provider.of<MessageModule>(context).firstLoad()? loadingTemplate() : Provider.of<MessageModule>(context).data().isEmpty ? Center(
  47. child: Text('noMessageText').tr(),
  48. ) : ListView(
  49. padding: EdgeInsets.only(top: 12.0),
  50. children: List.generate(Provider.of<MessageModule>(context).data().length, (i) {
  51. bool _isMe = Provider.of<MessageModule>(context, listen: false).data()[i]['userId'] == Provider.of<MessageModule>(context, listen: false).user()['userId'] ? true : false;
  52. return GestureDetector(
  53. child: Container(
  54. child: ListTile(
  55. leading: Provider.of<MessageModule>(context).data()[i]['senderAvatar'] != null && Provider.of<MessageModule>(context).data()[i]['senderAvatar'] != '' ? CircleAvatar(
  56. backgroundImage: NetworkImage(Provider.of<MessageModule>(context).data()[i]['senderAvatar']),
  57. radius: 24,
  58. ) : Container(
  59. height: 48,
  60. width: 48,
  61. child: Center(child: Text(_isMe ? Provider.of<MessageModule>(context).data()[i]['recipientName'] == "all_informants" ? "allInformants".tr()[0] : Provider.of<MessageModule>(context).data()[i]['recipientName'][0] : Provider.of<MessageModule>(context).data()[i]['senderName'][0], style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold, fontSize: 18))),
  62. decoration: BoxDecoration(shape: BoxShape.circle, color: Color(U.getColor(_isMe ? Provider.of<MessageModule>(context).data()[i]['recipient'] : Provider.of<MessageModule>(context).data()[i]['recipientId']))),
  63. ),
  64. title: Text(_isMe ? Provider.of<MessageModule>(context).data()[i]['recipientName'] == "all_informants" ? "allInformants".tr() : Provider.of<MessageModule>(context).data()[i]['recipientName'] : Provider.of<MessageModule>(context).data()[i]['senderName']),
  65. subtitle: Row(
  66. children: [
  67. _isMe ? Padding(
  68. padding: EdgeInsets.only(right: 4),
  69. child: Icon(Icons.done_all, size: 18, color: Colors.blueGrey),
  70. ) : Container(),
  71. Provider.of<MessageModule>(context).data()[i]['isImage'] ? Align(
  72. alignment: Alignment.centerLeft,
  73. child: Row(
  74. children: [
  75. Icon(Provider.of<MessageModule>(context).data()[i]['fileType'] == 'pdf' ? Icons.picture_as_pdf : Icons.image, color: Colors.black45, size: 16),
  76. SizedBox(width: 6),
  77. Provider.of<MessageModule>(context).data()[i]['lastText'] == '' ? Provider.of<MessageModule>(context).data()[i]['fileType'] == 'pdf' ? Text('pdfFile'.tr()) : Text('photo'.tr()) : Container()
  78. ],
  79. ),
  80. ) : Container(),
  81. Expanded(
  82. child: Text(Provider.of<MessageModule>(context).data()[i]['lastText'], style: TextStyle(fontSize: 13), maxLines: 1, overflow: TextOverflow.ellipsis),
  83. )
  84. ],
  85. ),
  86. trailing: Column(
  87. mainAxisAlignment: MainAxisAlignment.center,
  88. crossAxisAlignment: CrossAxisAlignment.end,
  89. children: [
  90. Text(messageFunc.timeSet(Provider.of<MessageModule>(context).data()[i]['lastDateTimeSend']), style: TextStyle(fontSize: 11, color: Provider.of<MessageModule>(context).data()[i]['lastReadStatus'] == 'UNREAD' && !_isMe ? Colors.green : Colors.black45)),
  91. SizedBox(height: 4),
  92. Icon(Icons.circle, color: Colors.green.withOpacity(Provider.of<MessageModule>(context).data()[i]['lastReadStatus'] == 'UNREAD' && !_isMe ? 1 : 0))
  93. ],
  94. ),
  95. ),
  96. ),
  97. onTap: () async {
  98. navigateTo(context, MobMessageChatPage(Provider.of<MessageModule>(context, listen: false).user(), Provider.of<MessageModule>(context, listen: false).data()[i]['chatId'], _isMe ? Provider.of<MessageModule>(context, listen: false).data()[i]['recipientName'] : Provider.of<MessageModule>(context, listen: false).data()[i]['senderName'], Provider.of<MessageModule>(context, listen: false).data()[i]['id'].toString(), _isMe, Provider.of<MessageModule>(context, listen: false).data()[i]['recipient']));
  99. messageFunc.onRefresh(context);
  100. });
  101. })
  102. ),
  103. ),
  104. ),
  105. )
  106. ],
  107. ),
  108. floatingActionButton: Provider.of<MessageModule>(context).user().isNotEmpty && Provider.of<MessageModule>(context).user()['canSendMessage'] ? FloatingActionButton(
  109. child: U.iconsax('message', color: Colors.white),
  110. backgroundColor: primaryColor,
  111. onPressed: () => messageFunc.createMessage(context),
  112. ):null,
  113. );
  114. }
  115. }