user_chat.dart 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import 'dart:async';
  2. import 'package:dash_chat/dash_chat.dart';
  3. import 'package:e2ee_chat/common/global.dart';
  4. import 'package:e2ee_chat/model/message.dart';
  5. import 'package:e2ee_chat/model/user.dart';
  6. import 'package:e2ee_chat/presenter/login.dart';
  7. import 'package:e2ee_chat/presenter/user_chat.dart';
  8. import 'package:flutter/material.dart';
  9. import 'package:provider/provider.dart';
  10. import '';
  11. class UserChatView extends StatefulWidget {
  12. UserChatView();
  13. @override
  14. _UserChatViewState createState() => _UserChatViewState();
  15. }
  16. class _UserChatViewState extends State<UserChatView> {
  17. final GlobalKey<DashChatState> _chatViewKey = GlobalKey<DashChatState>();
  18. final _presenter = UserChatPresenter();
  19. @override
  20. void initState() {
  21. super.initState();
  22. }
  23. @override
  24. Widget build(BuildContext context) {
  25. final String? to = ModalRoute.of(context)?.settings.arguments.toString();
  26. if (to != null) {
  27. _presenter.to = User(to);
  28. }
  29. assert(_presenter.to != null, "error! user chat view to == null!");
  30. return ChangeNotifierProvider<UserChatPresenter>(
  31. create: (context) => _presenter,
  32. child: Scaffold(
  33. appBar: AppBar(
  34. title: Text("Chat App"),
  35. ),
  36. body: Builder(builder: (context) {
  37. final presenter = Provider.of<UserChatPresenter>(context);
  38. final List<ChatMessage> messages = presenter.chatMessages;
  39. final user = presenter.from!.toChatUser();
  40. return DashChat(
  41. key: _chatViewKey,
  42. inverted: false,
  43. onSend: (message) {
  44. debug(message.toJson());
  45. presenter.sendMessage(message);
  46. },
  47. sendOnEnter: true,
  48. textInputAction: TextInputAction.send,
  49. user: user,
  50. inputDecoration: InputDecoration.collapsed(hintText: "Add message here..."),
  51. dateFormat: DateFormat('yyyy-MMM-dd'),
  52. timeFormat: DateFormat('HH:mm'),
  53. messages: messages,
  54. showUserAvatar: false,
  55. showAvatarForEveryMessage: false,
  56. scrollToBottom: false,
  57. onPressAvatar: (ChatUser user) {
  58. print("OnPressAvatar: ${user.name}");
  59. },
  60. onLongPressAvatar: (ChatUser user) {
  61. print("OnLongPressAvatar: ${user.name}");
  62. },
  63. inputMaxLines: 5,
  64. messageContainerPadding: EdgeInsets.only(left: 5.0, right: 5.0),
  65. alwaysShowSend: true,
  66. inputTextStyle: TextStyle(fontSize: 16.0),
  67. inputContainerStyle: BoxDecoration(
  68. border: Border.all(width: 0.0),
  69. color: Colors.white,
  70. ),
  71. onLoadEarlier: () {
  72. print("laoding...");
  73. },
  74. shouldShowLoadEarlier: false,
  75. showTraillingBeforeSend: true,
  76. );
  77. }),
  78. ));
  79. }
  80. }