Chat message attachments

This commit is contained in:
2024-04-19 19:36:03 +08:00
parent 82fc191bad
commit ac280f2d40
12 changed files with 121 additions and 34 deletions

View File

@ -74,6 +74,7 @@ class _ChatScreenState extends State<ChatScreen> {
}
bool getMessageMergeable(Message? a, Message? b) {
if (a?.replyTo != null || b?.replyTo != null) return false;
if (a == null || b == null) return false;
if (a.senderId != b.senderId) return false;
return a.createdAt.difference(b.createdAt).inMinutes <= 5;

View File

@ -6,6 +6,7 @@ import 'package:solian/models/channel.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/router.dart';
import 'package:solian/utils/service_url.dart';
import 'package:solian/widgets/chat/chat_new.dart';
import 'package:solian/widgets/indent_wrapper.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:solian/widgets/signin_required.dart';
@ -40,6 +41,13 @@ class _ChatIndexScreenState extends State<ChatIndexScreen> {
}
}
void viewNewChatAction() {
showModalBottomSheet(
context: context,
builder: (context) => const ChatNewAction(),
);
}
@override
void initState() {
Future.delayed(Duration.zero, () {
@ -55,6 +63,20 @@ class _ChatIndexScreenState extends State<ChatIndexScreen> {
return IndentWrapper(
title: AppLocalizations.of(context)!.chat,
floatingActionButton: FutureBuilder(
future: auth.isAuthorized(),
builder: (context, snapshot) {
if (snapshot.hasData && snapshot.data!) {
return FloatingActionButton.extended(
icon: const Icon(Icons.add),
label: Text(AppLocalizations.of(context)!.chatNew),
onPressed: () => viewNewChatAction(),
);
} else {
return Container();
}
},
),
child: FutureBuilder(
future: auth.isAuthorized(),
builder: (context, snapshot) {

View File

@ -40,6 +40,7 @@ class _CommentEditorScreenState extends State<CommentEditorScreen> {
showModalBottomSheet(
context: context,
builder: (context) => AttachmentEditor(
provider: 'interactive',
current: _attachments,
onUpdate: (value) => _attachments = value,
),
@ -151,8 +152,7 @@ class _CommentEditorScreenState extends State<CommentEditorScreen> {
const Divider(thickness: 0.3),
Expanded(
child: Container(
padding:
const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: TextField(
maxLines: null,
autofocus: true,
@ -160,9 +160,9 @@ class _CommentEditorScreenState extends State<CommentEditorScreen> {
keyboardType: TextInputType.multiline,
controller: _textController,
decoration: InputDecoration.collapsed(
hintText:
AppLocalizations.of(context)!.postContentPlaceholder,
hintText: AppLocalizations.of(context)!.postContentPlaceholder,
),
onTapOutside: (_) => FocusManager.instance.primaryFocus?.unfocus(),
),
),
),

View File

@ -32,6 +32,7 @@ class _MomentEditorScreenState extends State<MomentEditorScreen> {
showModalBottomSheet(
context: context,
builder: (context) => AttachmentEditor(
provider: 'interactive',
current: _attachments,
onUpdate: (value) => _attachments = value,
),
@ -151,6 +152,7 @@ class _MomentEditorScreenState extends State<MomentEditorScreen> {
decoration: InputDecoration.collapsed(
hintText: AppLocalizations.of(context)!.postContentPlaceholder,
),
onTapOutside: (_) => FocusManager.instance.primaryFocus?.unfocus(),
),
),
),