feat: menu de contexto em bottom sheet, painel de anexos, perfil e feed do mural
Some checks failed
Main Deploy Workflow / deploy_web (push) Has been cancelled
Main Deploy Workflow / deploy_playstore_internal (push) Has been cancelled
Close stale issues and PRs / stale (push) Has been cancelled

- Salas (chat, canais, murais e salas de espacos) abrem bottom sheet com grid de acoes
- Botao + da barra de digitacao abre painel de anexos em grid de 3 colunas que empurra a caixa de texto
- Modal do perfil permite editar nome/status e ler QR code (mobile)
- Alterar status atualiza localmente via extensao do SDK matrix
- Mural pre-carrega historico para exibir todas as midias em dispositivos sem cache
This commit is contained in:
2026-09-21 14:30:47 -03:00
parent 762178d9f9
commit 5a72c71cfc
14 changed files with 861 additions and 584 deletions

View File

@@ -0,0 +1,33 @@
// SPDX-FileCopyrightText: 2019-Present Christian Kußowski
// SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat
//
// SPDX-License-Identifier: AGPL-3.0-or-later
import 'package:matrix/matrix.dart';
extension ClientPresenceExtension on Client {
/// Sets the own presence status message.
///
/// The SDK's [Client.setPresence] only performs the HTTP request and does not
/// update the local presence cache, the database or the
/// [Client.onPresenceChanged] stream. As a result
/// [Client.fetchCurrentPresence] keeps returning the previous status until the
/// homeserver echoes it back over `/sync`. This helper updates all local
/// caches after a successful request so the new status is shown immediately.
Future<void> setStatusMessage(String statusMsg) async {
final userId = userID;
if (userId == null) return;
await setPresence(userId, PresenceType.online, statusMsg: statusMsg);
final presence = CachedPresence(
PresenceType.online,
null,
statusMsg,
null,
userId,
);
// ignore: deprecated_member_use
presences[userId] = presence;
await database.storePresence(userId, presence);
onPresenceChanged.add(presence);
}
}