add client chat page & chat overlay window

This commit is contained in:
csf
2022-03-03 14:58:57 +08:00
parent b106ed5717
commit e9f8fd1175
8 changed files with 351 additions and 66 deletions

View File

@@ -1,5 +1,44 @@
import 'package:dash_chat/dash_chat.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hbb/pages/chat_page.dart';
import 'model.dart';
import 'native_model.dart';
class ChatModel with ChangeNotifier {
final List<ChatMessage> _messages = [];
final ChatUser me = ChatUser(
name:"me",
);
get messages => _messages;
receive(String text){
if (text.isEmpty) return;
// first message show overlay icon
if (iconOverlayEntry == null){
showChatIconOverlay();
}
_messages.add(ChatMessage(text: text, user: ChatUser(
name:FFI.ffiModel.pi.username,
uid: FFI.getId(),
)));
notifyListeners();
}
send(ChatMessage message){
_messages.add(message);
if(message.text != null && message.text!.isNotEmpty){
PlatformFFI.setByName("chat",message.text!);
}
notifyListeners();
}
release(){
hideChatIconOverlay();
hideChatWindowOverlay();
_messages.clear();
notifyListeners();
}
}

View File

@@ -1,5 +1,6 @@
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_hbb/models/chat_model.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:math';
import 'dart:convert';
@@ -128,6 +129,9 @@ class FfiModel with ChangeNotifier {
Clipboard.setData(ClipboardData(text: evt['content']));
} else if (name == 'permission') {
FFI.ffiModel.updatePermission(evt);
} else if (name == 'chat'){
// FFI.setByName("chat",msg);
FFI.chatModel.receive(evt['text']??"");
}
}
if (pos != null) FFI.cursorModel.updateCursorPosition(pos);
@@ -703,6 +707,7 @@ class FFI {
static final cursorModel = CursorModel();
static final canvasModel = CanvasModel();
static final serverModel = ServerModel();
static final chatModel = ChatModel();
static String getId() {
return getByName('remote_id');
@@ -797,6 +802,7 @@ class FFI {
}
static void close() {
chatModel.release();
if (FFI.imageModel.image != null && !isDesktop) {
savePreference(
id,