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", "select": "Selecionar",
"pleaseChooseAStrongPassword": "Escolha uma senha forte", "pleaseChooseAStrongPassword": "Escolha uma senha forte",
"blockUsername": "Ignorar nome de usuário", "blockUsername": "Ignorar nome de usuário",
"addChatOrSubSpace": "Adicionar conversa ou subespaço", "addChatOrSubSpace": "Criar grupo aqui",
"groupName": "Nome do grupo", "groupName": "Nome do grupo",
"leaveEmptyToClearStatus": "Deixe em branco para limpar seu estado.", "leaveEmptyToClearStatus": "Deixe em branco para limpar seu estado.",
"joinSpace": "Entrar no espaço", "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/events/message.dart';
import 'package:tatchat/pages/chat/seen_by_row.dart'; import 'package:tatchat/pages/chat/seen_by_row.dart';
import 'package:tatchat/pages/chat/typing_indicators.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/matrix_sdk_extensions/filtered_timeline_extension.dart';
import 'package:tatchat/utils/platform_infos.dart'; import 'package:tatchat/utils/platform_infos.dart';
import 'package:material_ui/material_ui.dart'; import 'package:material_ui/material_ui.dart';
@@ -53,8 +52,7 @@ class ChatEventList extends StatelessWidget {
thisEventsKeyMap[events[i].eventId] = i; thisEventsKeyMap[events[i].eventId] = i;
} }
final hasWallpaper = const hasWallpaper = true;
controller.room.client.applicationAccountConfig.wallpaperUrl != null;
return SelectionArea( return SelectionArea(
child: MediaQuery( child: MediaQuery(

View File

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

View File

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

View File

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

View File

@@ -375,24 +375,13 @@ class _SpaceViewState extends State<SpaceView> {
theme.colorScheme.onPrimaryContainer, 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,
),
), ),
const SizedBox(width: 8),
PopupMenuButton<SpaceActions>(
tooltip: L10n.of(context).settings,
useRootNavigator: true, useRootNavigator: true,
onSelected: _onSpaceAction, onSelected: _onSpaceAction,
itemBuilder: (context) => [ itemBuilder: (context) => [
@@ -400,45 +389,28 @@ class _SpaceViewState extends State<SpaceView> {
PopupMenuItem( PopupMenuItem(
value: SpaceActions.addChild, value: SpaceActions.addChild,
child: ListTile( child: ListTile(
leading: Icon(Icons.edit_square), leading: Icon(Icons.add_circle_outline_rounded),
title: Text( title: Text(
L10n.of( L10n.of(context).addChatOrSubSpace,
context,
).addChatOrSubSpace,
), ),
), ),
), ),
PopupMenuItem( PopupMenuItem(
value: SpaceActions.settings, value: SpaceActions.settings,
child: ListTile( child: ListTile(
leading: Icon( leading: Icon(Icons.settings_outlined,),
Icons.settings_outlined, title: Text(L10n.of(context).settings),
),
title: Text(
L10n.of(context).settings,
),
), ),
), ),
PopupMenuItem( PopupMenuItem(
value: SpaceActions.leave, value: SpaceActions.leave,
child: ListTile( child: ListTile(
leading: Icon(Icons.delete_outlined), leading: Icon(Icons.delete_outlined,color: theme.colorScheme.error ),
title: Text(L10n.of(context).leave), title: Text(L10n.of(context).leave, style: TextStyle(color: theme.colorScheme.error),),
), ),
), ),
], ],
), icon: const Icon(Icons.settings_outlined),
),
),
),
const SizedBox(width: 8),
if (isAdmin)
IconButton.filledTonal(
tooltip: L10n.of(context).addChatOrSubSpace,
onPressed: () => context.go(
'/rooms/newgroup?space_id=${widget.spaceId}',
),
icon: const Icon(Icons.add),
), ),
], ],
), ),
@@ -672,21 +644,6 @@ class _SpaceViewState extends State<SpaceView> {
bottom: 12, bottom: 12,
child: Row( child: Row(
children: [ 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( Expanded(
child: Text( child: Text(
displayname, displayname,

View File

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