Create a new Isolate to send pictures
parent
eda27359af
commit
be64a626ce
|
@ -1,7 +1,7 @@
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:typed_data';
|
|
||||||
|
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:hive_flutter/hive_flutter.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 'package:together_mobile/utils/format_datetime.dart';
|
||||||
import 'input_icon_button.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 {
|
class MessageInputBox extends StatefulWidget {
|
||||||
const MessageInputBox({
|
const MessageInputBox({
|
||||||
super.key,
|
super.key,
|
||||||
|
@ -252,42 +267,45 @@ class _MessageInputBoxState extends State<MessageInputBox> {
|
||||||
'isShowTime': isShowTime,
|
'isShowTime': isShowTime,
|
||||||
};
|
};
|
||||||
|
|
||||||
final msg1 = {
|
|
||||||
'type': 'text/multipart',
|
|
||||||
'senderId': senderId,
|
|
||||||
'text': text,
|
|
||||||
'attachments': attachments,
|
|
||||||
'dateTime': now.toString(),
|
|
||||||
'isShowTime': isShowTime,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (widget.chatType == 0) {
|
if (widget.chatType == 0) {
|
||||||
msg['event'] = 'friend-chat-msg';
|
msg['event'] = 'friend-chat-msg';
|
||||||
msg['receiverId'] = widget.contactId;
|
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));
|
getIt.get<WebSocketManager>().channel.sink.add(json.encode(msg));
|
||||||
if (attachments.isNotEmpty) {
|
if (attachments.isNotEmpty) {
|
||||||
String baseImageDir = getIt.get<UserProfile>().baseImageDir;
|
String baseImageDir = getIt.get<UserProfile>().baseImageDir;
|
||||||
for (var i = 0; i < attachments.length; i++) {
|
List<String> encodedDatas = await compute(
|
||||||
Uint8List bytes = await _imageFileList[i].readAsBytes();
|
bytes2json,
|
||||||
File file = File('$baseImageDir/${attachments[i]}');
|
(
|
||||||
file.createSync(recursive: true);
|
0,
|
||||||
file.writeAsBytes(bytes);
|
[widget.contactId],
|
||||||
getIt.get<WebSocketManager>().channel.sink.add(
|
attachments,
|
||||||
json.encode(
|
_imageFileList,
|
||||||
{
|
baseImageDir,
|
||||||
'event': 'friend-chat-image',
|
|
||||||
'receiverId': widget.contactId,
|
|
||||||
'filename': attachments[i],
|
|
||||||
'bytes': bytes,
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
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 {
|
} else {
|
||||||
|
String baseImageDir = getIt.get<UserProfile>().baseImageDir;
|
||||||
List<String> receiverIds = getIt
|
List<String> receiverIds = getIt
|
||||||
.get<ContactAccountProfile>()
|
.get<ContactAccountProfile>()
|
||||||
.groupChats[widget.contactId]!
|
.groupChats[widget.contactId]!
|
||||||
|
@ -298,24 +316,38 @@ class _MessageInputBoxState extends State<MessageInputBox> {
|
||||||
msg['receiverIds'] = receiverIds;
|
msg['receiverIds'] = receiverIds;
|
||||||
getIt.get<WebSocketManager>().channel.sink.add(json.encode(msg));
|
getIt.get<WebSocketManager>().channel.sink.add(json.encode(msg));
|
||||||
if (attachments.isNotEmpty) {
|
if (attachments.isNotEmpty) {
|
||||||
String baseImageDir = getIt.get<UserProfile>().baseImageDir;
|
List<String> encodedDatas = await compute(
|
||||||
for (var i = 0; i < attachments.length; i++) {
|
bytes2json,
|
||||||
Uint8List bytes = await _imageFileList[i].readAsBytes();
|
(
|
||||||
File file = File('$baseImageDir/${attachments[i]}');
|
1,
|
||||||
file.createSync(recursive: true);
|
receiverIds,
|
||||||
file.writeAsBytes(bytes);
|
attachments,
|
||||||
getIt.get<WebSocketManager>().channel.sink.add(
|
_imageFileList,
|
||||||
json.encode(
|
baseImageDir,
|
||||||
{
|
|
||||||
'event': 'group-chat-image',
|
|
||||||
'groupChatId': widget.contactId,
|
|
||||||
'receiverIds': receiverIds,
|
|
||||||
'filename': attachments[i],
|
|
||||||
'bytes': bytes,
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
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