Block user action when attachments isn't ready

This commit is contained in:
2024-08-01 22:36:00 +08:00
parent 8b3c45ab29
commit 27c60fc8cb
6 changed files with 40 additions and 6 deletions

View File

@ -455,11 +455,12 @@ class _AttachmentEditorPopupState extends State<AttachmentEditorPopup> {
const SizedBox(width: 10),
Obx(() {
if (_uploadController.isUploading.value) {
return const SizedBox(
return SizedBox(
width: 18,
height: 18,
child: CircularProgressIndicator(
strokeWidth: 2.5,
value: _uploadController.progressOfUpload.value,
),
);
}

View File

@ -5,9 +5,11 @@ import 'package:solian/exts.dart';
import 'package:solian/models/account.dart';
import 'package:solian/models/channel.dart';
import 'package:solian/models/event.dart';
import 'package:solian/providers/attachment_uploader.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/widgets/attachments/attachment_editor.dart';
import 'package:solian/widgets/chat/chat_event.dart';
import 'package:badges/badges.dart' as badges;
import 'package:uuid/uuid.dart';
class ChatMessageInput extends StatefulWidget {
@ -80,6 +82,14 @@ class _ChatMessageInputState extends State<ChatMessageInput> {
final prof = auth.userProfile.value!;
if (auth.isAuthorized.isFalse) return;
final AttachmentUploaderController uploader = Get.find();
if (uploader.queueOfUpload.any(
((x) => x.usage == 'm.attachment' && x.isUploading),
)) {
context.showErrorDialog('attachmentUploadInProgress'.tr);
return;
}
Response resp;
final mentionedUserNames = _findMentionedUsers(_textController.text);
@ -259,7 +269,18 @@ class _ChatMessageInputState extends State<ChatMessageInput> {
),
),
IconButton(
icon: const Icon(Icons.attach_file),
icon: badges.Badge(
badgeContent: Text(
_attachments.length.toString(),
style: const TextStyle(color: Colors.white),
),
showBadge: _attachments.isNotEmpty,
position: badges.BadgePosition.topEnd(
top: -12,
end: -8,
),
child: const Icon(Icons.file_present_rounded),
),
color: Colors.teal,
onPressed: () => _editAttachments(),
),