Create a new Isolate to send pictures
parent
eda27359af
commit
be64a626ce
|
@ -1,7 +1,7 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
|
@ -18,6 +18,21 @@ import 'package:together_mobile/utils/app_dir.dart';
|
|||
import 'package:together_mobile/utils/format_datetime.dart';
|
||||
import 'input_icon_button.dart';
|
||||
|
||||
class SendMessage {
|
||||
final int type;
|
||||
final List<String> receivers;
|
||||
final List<String> attachments;
|
||||
final String dir;
|
||||
|
||||
SendMessage(this.type, this.receivers, this.attachments, this.dir);
|
||||
|
||||
SendMessage.fromJson(Map<String, dynamic> json)
|
||||
: type = json['type'],
|
||||
receivers = json['receivers'],
|
||||
attachments = json['attachments'],
|
||||
dir = json['dir'];
|
||||
}
|
||||
|
||||
class MessageInputBox extends StatefulWidget {
|
||||
const MessageInputBox({
|
||||
super.key,
|
||||
|
@ -252,42 +267,45 @@ class _MessageInputBoxState extends State<MessageInputBox> {
|
|||
'isShowTime': isShowTime,
|
||||
};
|
||||
|
||||
final msg1 = {
|
||||
'type': 'text/multipart',
|
||||
'senderId': senderId,
|
||||
'text': text,
|
||||
'attachments': attachments,
|
||||
'dateTime': now.toString(),
|
||||
'isShowTime': isShowTime,
|
||||
};
|
||||
|
||||
if (widget.chatType == 0) {
|
||||
msg['event'] = 'friend-chat-msg';
|
||||
msg['receiverId'] = widget.contactId;
|
||||
msg1['event'] = 'friend-chat-msg';
|
||||
msg1['receiverId'] = getIt.get<UserAccount>().id;
|
||||
getIt.get<WebSocketManager>().channel.sink.add(json.encode(msg1));
|
||||
getIt.get<WebSocketManager>().channel.sink.add(json.encode(msg));
|
||||
if (attachments.isNotEmpty) {
|
||||
String baseImageDir = getIt.get<UserProfile>().baseImageDir;
|
||||
for (var i = 0; i < attachments.length; i++) {
|
||||
Uint8List bytes = await _imageFileList[i].readAsBytes();
|
||||
File file = File('$baseImageDir/${attachments[i]}');
|
||||
file.createSync(recursive: true);
|
||||
file.writeAsBytes(bytes);
|
||||
getIt.get<WebSocketManager>().channel.sink.add(
|
||||
json.encode(
|
||||
{
|
||||
'event': 'friend-chat-image',
|
||||
'receiverId': widget.contactId,
|
||||
'filename': attachments[i],
|
||||
'bytes': bytes,
|
||||
},
|
||||
List<String> encodedDatas = await compute(
|
||||
bytes2json,
|
||||
(
|
||||
0,
|
||||
[widget.contactId],
|
||||
attachments,
|
||||
_imageFileList,
|
||||
baseImageDir,
|
||||
),
|
||||
);
|
||||
|
||||
for (final data in encodedDatas) {
|
||||
getIt.get<WebSocketManager>().channel.sink.add(data);
|
||||
}
|
||||
// for (var i = 0; i < attachments.length; i++) {
|
||||
// Uint8List bytes = await _imageFileList[i].readAsBytes();
|
||||
// File file = File('$baseImageDir/${attachments[i]}');
|
||||
// file.createSync(recursive: true);
|
||||
// file.writeAsBytes(bytes);
|
||||
// getIt.get<WebSocketManager>().channel.sink.add(
|
||||
// json.encode(
|
||||
// {
|
||||
// 'event': 'friend-chat-image',
|
||||
// 'receiverId': widget.contactId,
|
||||
// 'filename': attachments[i],
|
||||
// 'bytes': bytes,
|
||||
// },
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
}
|
||||
} else {
|
||||
String baseImageDir = getIt.get<UserProfile>().baseImageDir;
|
||||
List<String> receiverIds = getIt
|
||||
.get<ContactAccountProfile>()
|
||||
.groupChats[widget.contactId]!
|
||||
|
@ -298,24 +316,38 @@ class _MessageInputBoxState extends State<MessageInputBox> {
|
|||
msg['receiverIds'] = receiverIds;
|
||||
getIt.get<WebSocketManager>().channel.sink.add(json.encode(msg));
|
||||
if (attachments.isNotEmpty) {
|
||||
String baseImageDir = getIt.get<UserProfile>().baseImageDir;
|
||||
for (var i = 0; i < attachments.length; i++) {
|
||||
Uint8List bytes = await _imageFileList[i].readAsBytes();
|
||||
File file = File('$baseImageDir/${attachments[i]}');
|
||||
file.createSync(recursive: true);
|
||||
file.writeAsBytes(bytes);
|
||||
getIt.get<WebSocketManager>().channel.sink.add(
|
||||
json.encode(
|
||||
{
|
||||
'event': 'group-chat-image',
|
||||
'groupChatId': widget.contactId,
|
||||
'receiverIds': receiverIds,
|
||||
'filename': attachments[i],
|
||||
'bytes': bytes,
|
||||
},
|
||||
List<String> encodedDatas = await compute(
|
||||
bytes2json,
|
||||
(
|
||||
1,
|
||||
receiverIds,
|
||||
attachments,
|
||||
_imageFileList,
|
||||
baseImageDir,
|
||||
),
|
||||
);
|
||||
|
||||
for (final data in encodedDatas) {
|
||||
getIt.get<WebSocketManager>().channel.sink.add(data);
|
||||
}
|
||||
// String baseImageDir = getIt.get<UserProfile>().baseImageDir;
|
||||
// for (var i = 0; i < attachments.length; i++) {
|
||||
// Uint8List bytes = await _imageFileList[i].readAsBytes();
|
||||
// File file = File('$baseImageDir/${attachments[i]}');
|
||||
// file.createSync(recursive: true);
|
||||
// file.writeAsBytes(bytes);
|
||||
// getIt.get<WebSocketManager>().channel.sink.add(
|
||||
// json.encode(
|
||||
// {
|
||||
// 'event': 'group-chat-image',
|
||||
// 'groupChatId': widget.contactId,
|
||||
// 'receiverIds': receiverIds,
|
||||
// 'filename': attachments[i],
|
||||
// 'bytes': bytes,
|
||||
// },
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -360,3 +392,44 @@ class _MessageInputBoxState extends State<MessageInputBox> {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<String>> bytes2json(
|
||||
(
|
||||
int,
|
||||
List<String>,
|
||||
List<String>,
|
||||
List<XFile>,
|
||||
String,
|
||||
) args) async {
|
||||
List<String> encodedJson = [];
|
||||
for (var i = 0; i < args.$3.length; i++) {
|
||||
Uint8List bytes = await args.$4[i].readAsBytes();
|
||||
File file = File('${args.$5}/${args.$3[i]}');
|
||||
await file.create(recursive: true);
|
||||
await file.writeAsBytes(bytes);
|
||||
if (args.$1 == 0) {
|
||||
encodedJson.add(
|
||||
json.encode(
|
||||
{
|
||||
'event': 'friend-chat-image',
|
||||
'receiverId': args.$2[0],
|
||||
'filename': args.$3[i],
|
||||
'bytes': bytes,
|
||||
},
|
||||
),
|
||||
);
|
||||
} else {
|
||||
encodedJson.add(
|
||||
json.encode(
|
||||
{
|
||||
'event': 'friend-chat-image',
|
||||
'receiverIds': args.$2,
|
||||
'filename': args.$3[i],
|
||||
'bytes': bytes,
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
return encodedJson;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue