feat: wallpaper padrao nas conversas, logo colorida na sidebar e ajustes na aba de espacos
Some checks failed
Main Deploy Workflow / deploy_web (push) Has been cancelled
Main Deploy Workflow / deploy_playstore_internal (push) Has been cancelled

This commit is contained in:
2026-09-23 14:14:02 -03:00
parent c0463e51f9
commit 288b5e70d4
8 changed files with 81 additions and 107 deletions

BIN
assets/logo/background.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

@@ -2010,7 +2010,7 @@
"select": "Selecionar",
"pleaseChooseAStrongPassword": "Escolha uma senha forte",
"blockUsername": "Ignorar nome de usuário",
"addChatOrSubSpace": "Adicionar conversa ou subespaço",
"addChatOrSubSpace": "Criar grupo aqui",
"groupName": "Nome do grupo",
"leaveEmptyToClearStatus": "Deixe em branco para limpar seu estado.",
"joinSpace": "Entrar no espaço",

View File

@@ -13,7 +13,6 @@ import 'package:tatchat/pages/chat/encryption_info.dart';
import 'package:tatchat/pages/chat/events/message.dart';
import 'package:tatchat/pages/chat/seen_by_row.dart';
import 'package:tatchat/pages/chat/typing_indicators.dart';
import 'package:tatchat/utils/account_config.dart';
import 'package:tatchat/utils/matrix_sdk_extensions/filtered_timeline_extension.dart';
import 'package:tatchat/utils/platform_infos.dart';
import 'package:material_ui/material_ui.dart';
@@ -53,8 +52,7 @@ class ChatEventList extends StatelessWidget {
thisEventsKeyMap[events[i].eventId] = i;
}
final hasWallpaper =
controller.room.client.applicationAccountConfig.wallpaperUrl != null;
const hasWallpaper = true;
return SelectionArea(
child: MediaQuery(

View File

@@ -352,25 +352,38 @@ class ChatView extends StatelessWidget {
top: false,
child: Stack(
children: <Widget>[
if (accountConfig.wallpaperUrl != null)
Opacity(
opacity: accountConfig.wallpaperOpacity ?? 0.5,
child: ImageFiltered(
imageFilter: ui.ImageFilter.blur(
sigmaX: accountConfig.wallpaperBlur ?? 0.0,
sigmaY: accountConfig.wallpaperBlur ?? 0.0,
),
child: MxcImage(
cacheKey: accountConfig.wallpaperUrl.toString(),
uri: accountConfig.wallpaperUrl,
fit: BoxFit.cover,
height: MediaQuery.sizeOf(context).height,
width: MediaQuery.sizeOf(context).width,
isThumbnail: false,
placeholder: (_) => Container(),
),
Opacity(
opacity: accountConfig.wallpaperUrl != null
? accountConfig.wallpaperOpacity ?? 0.5
: 0.3,
child: ImageFiltered(
imageFilter: ui.ImageFilter.blur(
sigmaX: accountConfig.wallpaperUrl != null
? accountConfig.wallpaperBlur ?? 0.0
: 0.0,
sigmaY: accountConfig.wallpaperUrl != null
? accountConfig.wallpaperBlur ?? 0.0
: 0.0,
),
child: accountConfig.wallpaperUrl != null
? MxcImage(
cacheKey: accountConfig.wallpaperUrl
.toString(),
uri: accountConfig.wallpaperUrl,
fit: BoxFit.cover,
height: MediaQuery.sizeOf(context).height,
width: MediaQuery.sizeOf(context).width,
isThumbnail: false,
placeholder: (_) => Container(),
)
: Image.asset(
'./assets/logo/background.png',
fit: BoxFit.cover,
height: MediaQuery.sizeOf(context).height,
width: MediaQuery.sizeOf(context).width,
),
),
),
GestureDetector(
onTap: controller.clearSingleSelectedEvent,
child: ChatEventList(controller: controller),

View File

@@ -4,11 +4,10 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import 'package:badges/badges.dart';
import 'package:tatchat/config/app_config.dart';
import 'package:tatchat/widgets/hover_builder.dart';
import 'package:tatchat/widgets/unread_rooms_badge.dart';
import 'package:material_ui/material_ui.dart';
import 'package:matrix/matrix.dart';
import 'package:tatchat/widgets/hover_builder.dart';
import 'package:tatchat/widgets/unread_rooms_badge.dart';
import '../../config/themes.dart';
@@ -33,7 +32,7 @@ class NaviRailItem extends StatelessWidget {
Widget build(BuildContext context) {
final theme = Theme.of(context);
final borderRadius = BorderRadius.circular(AppConfig.borderRadius);
final borderRadius = BorderRadius.circular(1000);
final icon = isSelected ? selectedIcon ?? this.icon : this.icon;
final unreadBadgeFilter = this.unreadBadgeFilter;
return HoverBuilder(
@@ -73,7 +72,7 @@ class NaviRailItem extends StatelessWidget {
borderRadius: borderRadius,
color: isSelected
? theme.colorScheme.secondaryContainer
: Colors.transparent,
: theme.colorScheme.surfaceContainerHighest,
child: Tooltip(
message: toolTip,
child: InkWell(

View File

@@ -36,19 +36,25 @@ class Sidebar extends StatelessWidget {
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 16,
vertical: 14,
vertical: 4,
),
child: Row(
children: [
Image.asset(
'./assets/logo/mini/logo_mini.png',
width: 28,
height: 28,
ColorFiltered(
colorFilter: ColorFilter.mode(
theme.colorScheme.primary,
BlendMode.srcIn,
),
child: Image.asset(
'./assets/logo/mini/logo_mini.png',
width: 58,
height: 58,
),
),
const SizedBox(width: 10),
Text(
'TatuChat',
style: theme.textTheme.titleMedium?.copyWith(
style: theme.textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.bold,
color: theme.colorScheme.onSurface,
),

View File

@@ -375,71 +375,43 @@ class _SpaceViewState extends State<SpaceView> {
theme.colorScheme.onPrimaryContainer,
),
),
suffixIcon: PopupMenuButton<SpaceActions>(
icon: Avatar(
size: avatarSize,
mxContent: room.avatar,
name: displayname,
shapeBorder: RoundedSuperellipseBorder(
side: BorderSide(
width: 1,
color: theme.dividerColor,
),
borderRadius: BorderRadius.circular(
AppConfig.spaceBorderRadius,
),
),
borderRadius: BorderRadius.circular(
AppConfig.spaceBorderRadius,
),
),
useRootNavigator: true,
onSelected: _onSpaceAction,
itemBuilder: (context) => [
if (isAdmin)
PopupMenuItem(
value: SpaceActions.addChild,
child: ListTile(
leading: Icon(Icons.edit_square),
title: Text(
L10n.of(
context,
).addChatOrSubSpace,
),
),
),
PopupMenuItem(
value: SpaceActions.settings,
child: ListTile(
leading: Icon(
Icons.settings_outlined,
),
title: Text(
L10n.of(context).settings,
),
),
),
PopupMenuItem(
value: SpaceActions.leave,
child: ListTile(
leading: Icon(Icons.delete_outlined),
title: Text(L10n.of(context).leave),
),
),
],
),
),
),
),
const SizedBox(width: 8),
if (isAdmin)
IconButton.filledTonal(
tooltip: L10n.of(context).addChatOrSubSpace,
onPressed: () => context.go(
'/rooms/newgroup?space_id=${widget.spaceId}',
PopupMenuButton<SpaceActions>(
tooltip: L10n.of(context).settings,
useRootNavigator: true,
onSelected: _onSpaceAction,
itemBuilder: (context) => [
if (isAdmin)
PopupMenuItem(
value: SpaceActions.addChild,
child: ListTile(
leading: Icon(Icons.add_circle_outline_rounded),
title: Text(
L10n.of(context).addChatOrSubSpace,
),
),
),
PopupMenuItem(
value: SpaceActions.settings,
child: ListTile(
leading: Icon(Icons.settings_outlined,),
title: Text(L10n.of(context).settings),
),
),
icon: const Icon(Icons.add),
),
PopupMenuItem(
value: SpaceActions.leave,
child: ListTile(
leading: Icon(Icons.delete_outlined,color: theme.colorScheme.error ),
title: Text(L10n.of(context).leave, style: TextStyle(color: theme.colorScheme.error),),
),
),
],
icon: const Icon(Icons.settings_outlined),
),
],
),
),
@@ -672,21 +644,6 @@ class _SpaceViewState extends State<SpaceView> {
bottom: 12,
child: Row(
children: [
Avatar(
mxContent: avatar,
name: displayname,
size: 56,
shapeBorder: RoundedSuperellipseBorder(
side: BorderSide(
width: 2,
color: theme.colorScheme.surface,
),
borderRadius: BorderRadius.circular(
AppConfig.spaceBorderRadius,
),
),
),
const SizedBox(width: 12),
Expanded(
child: Text(
displayname,

View File

@@ -136,6 +136,7 @@ class _SpacesTabState extends State<SpacesTab> {
child: Icon(Icons.add),
),
toolTip: L10n.of(context).createNewSpace,
),
const SizedBox(height: 8),
],