import 'dart:async'; import 'package:dash_chat/dash_chat.dart'; import 'package:e2ee_chat/common/global.dart'; import 'package:e2ee_chat/model/message.dart'; import 'package:e2ee_chat/model/user.dart'; import 'package:e2ee_chat/presenter/login.dart'; import 'package:e2ee_chat/presenter/user_chat.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import ''; class UserChatView extends StatefulWidget { UserChatView(); @override _UserChatViewState createState() => _UserChatViewState(); } class _UserChatViewState extends State { final GlobalKey _chatViewKey = GlobalKey(); final _presenter = UserChatPresenter(); @override void initState() { super.initState(); } @override Widget build(BuildContext context) { final String? to = ModalRoute.of(context)?.settings.arguments.toString(); if (to != null) { _presenter.to = User(to); } assert(_presenter.to != null, "error! user chat view to == null!"); return ChangeNotifierProvider( create: (context) => _presenter, child: Scaffold( appBar: AppBar( title: Text("Chat App"), ), body: Builder(builder: (context) { final presenter = Provider.of(context); final List messages = presenter.chatMessages; final user = presenter.from!.toChatUser(); return DashChat( key: _chatViewKey, inverted: false, onSend: (message) { debug(message.toJson()); presenter.sendMessage(message); }, sendOnEnter: true, textInputAction: TextInputAction.send, user: user, inputDecoration: InputDecoration.collapsed(hintText: "Add message here..."), dateFormat: DateFormat('yyyy-MMM-dd'), timeFormat: DateFormat('HH:mm'), messages: messages, showUserAvatar: false, showAvatarForEveryMessage: false, scrollToBottom: false, onPressAvatar: (ChatUser user) { print("OnPressAvatar: ${user.name}"); }, onLongPressAvatar: (ChatUser user) { print("OnLongPressAvatar: ${user.name}"); }, inputMaxLines: 5, messageContainerPadding: EdgeInsets.only(left: 5.0, right: 5.0), alwaysShowSend: true, inputTextStyle: TextStyle(fontSize: 16.0), inputContainerStyle: BoxDecoration( border: Border.all(width: 0.0), color: Colors.white, ), onLoadEarlier: () { print("laoding..."); }, shouldShowLoadEarlier: false, showTraillingBeforeSend: true, ); }), )); } }