Hibok
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 
 

113 строки
3.0 KiB

  1. import 'package:chat/models/ChatMsg.dart';
  2. import 'package:chat/utils/MessageMgr.dart';
  3. import 'package:chat/utils/msgHandler.dart';
  4. import 'package:chat/utils/upload_util.dart';
  5. import 'package:flutter/cupertino.dart';
  6. import 'package:flutter/material.dart';
  7. class MsgStateWidget extends StatefulWidget {
  8. final MsgModel msg;
  9. MsgStateWidget(this.msg);
  10. @override
  11. _MsgStateWidgetState createState() => _MsgStateWidgetState();
  12. }
  13. class _MsgStateWidgetState extends State<MsgStateWidget> {
  14. int sendState = MsgState.None;
  15. @override
  16. void initState() {
  17. super.initState();
  18. sendState = widget.msg.state;
  19. MessageMgr().on('Update Chat Message State', updateSendState);
  20. }
  21. @override
  22. void dispose() {
  23. MessageMgr().off('Update Chat Message State', updateSendState);
  24. super.dispose();
  25. }
  26. updateSendState(msg) {
  27. if (widget.msg.time == msg['time'] &&
  28. widget.msg.sessionId == msg['sessionId']) {
  29. widget.msg.state = msg['state'];
  30. if (mounted) {
  31. setState(() {
  32. sendState = widget.msg.state;
  33. });
  34. }
  35. }
  36. }
  37. @override
  38. Widget build(BuildContext context) {
  39. if (sendState == MsgState.UploadFailed) {
  40. return Container(
  41. child: IconButton(
  42. iconSize: 22,
  43. icon: Icon(
  44. Icons.error_outline,
  45. color: Colors.red,
  46. ),
  47. onPressed: () {
  48. setState(() {
  49. sendState = MsgState.Uploading;
  50. });
  51. MessageMgr().emit('ReUpload Msg', widget.msg);
  52. },
  53. ),
  54. );
  55. }
  56. if (sendState == MsgState.SendingFailed) {
  57. return Container(
  58. child: IconButton(
  59. iconSize: 22,
  60. icon: Icon(
  61. Icons.error_outline,
  62. color: Colors.red,
  63. ),
  64. onPressed: () {
  65. print('重新发送');
  66. setState(() {
  67. sendState = MsgState.Sending;
  68. });
  69. MsgHandler.sendChatMsg(widget.msg);
  70. },
  71. ),
  72. );
  73. } else if (sendState == MsgState.SendingSuccess) {
  74. return Container(width: 0, height: 0);
  75. } else {
  76. if (widget.msg.state == MsgState.Uploading) {
  77. return Container(
  78. child: IconButton(
  79. iconSize: 22,
  80. icon: Icon(
  81. Icons.pause_circle_outline,
  82. color: Colors.red,
  83. ),
  84. onPressed: () {
  85. print('暂停发送');
  86. UploadUtil().cancelSendMsg(widget.msg);
  87. setState(() {
  88. sendState = MsgState.UploadFailed;
  89. });
  90. MsgHandler.sendChatMsg(widget.msg);
  91. },
  92. ),
  93. );
  94. } else {
  95. return Align(
  96. alignment: Alignment.center,
  97. child: Padding(
  98. padding: EdgeInsets.only(top: 5),
  99. child: CupertinoActivityIndicator()));
  100. }
  101. }
  102. }
  103. }