Hibok
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

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