feat: adiciona menu Desenvolvedor as configuracoes, nova modal Sobre e icones da marca TatuChat
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

- Submenu Desenvolvedor em Configuracoes (Sobre o servidor, Registros, Variaveis e ambiente)
- Modal Sobre maior com logo, descricao com link e rodape (codigo-fonte, licenca, fechar)
- Descricao legivel no tema dark
- Drawer com a logo do projeto e links de support/formulario atualizados
- flutter_launcher_icons: regenera icones Android (mipmap + adaptive), Web, iOS, macOS, Windows
This commit is contained in:
2026-09-20 18:16:35 -03:00
parent 6c689d1f34
commit 762178d9f9
55 changed files with 221 additions and 191 deletions

View File

@@ -1,4 +1,4 @@
- [ ] I have read and understood the [contributing guidelines](https://github.com/krille-chan/fluffychat/blob/main/CONTRIBUTING.md). - [ ] I have read and understood the [contributing guidelines](https://gitea.weltonmoura.com.br/welton/tatuchat/blob/main/CONTRIBUTING.md).
### Pull Request has been tested on: ### Pull Request has been tested on:

View File

@@ -5,4 +5,4 @@ SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
--> -->
Has been moved to https://fluffychat.im/privacy Has been moved to https://tatuchat.weltonmoura.com.br/home/politica-de-privacidade/

View File

@@ -5,7 +5,7 @@ SPDX-FileCopyrightText: 2019-Present Contributors to FluffyChat
SPDX-License-Identifier: AGPL-3.0-or-later SPDX-License-Identifier: AGPL-3.0-or-later
--> -->
[TatuChat](https://fluffy.chat) is an open source, nonprofit and cute [[matrix](https://matrix.org)] client written in [Flutter](https://flutter.dev). The goal of the app is to create an easy to use instant messenger which is open source and accessible for everyone. [TatuChat](https://tatuchat.weltonmoura.com.br/home/) is an open source, nonprofit and cute [[matrix](https://matrix.org)] client written in [Flutter](https://flutter.dev). The goal of the app is to create an easy to use instant messenger which is open source and accessible for everyone.
### Links: ### Links:
@@ -18,8 +18,7 @@ SPDX-License-Identifier: AGPL-3.0-or-later
### Screenshots: ### Screenshots:
<img src="https://github.com/krille-chan/fluffychat-website/blob/main/public/img/screenshot_mobile.png?raw=true" height="300"> <img src="https://tatuchat.weltonmoura.com.br/home/assets/logo.png" height="300">
<img src="https://github.com/krille-chan/fluffychat-website/blob/main/public/img/screenshot_desktop.png?raw=true" height="300">
# Features # Features
@@ -45,7 +44,7 @@ SPDX-License-Identifier: AGPL-3.0-or-later
Please visit the website for installation instructions: Please visit the website for installation instructions:
- https://fluffy.chat - https://tatuchat.weltonmoura.com.br/home/
# Configuration and Mobile Device Management (MDM) # Configuration and Mobile Device Management (MDM)
@@ -58,8 +57,8 @@ An example configuration can be found in the `config.sample.json` file.
2. Clone the repo: 2. Clone the repo:
``` ```
git clone https://github.com/krille-chan/fluffychat.git git clone https://gitea.weltonmoura.com.br/welton/tatuchat.git
cd fluffychat cd tatuchat
``` ```
3. Choose your target platform below and enable support for it. 3. Choose your target platform below and enable support for it.
3.1 If you want, enable Googles Firebase Cloud Messaging: 3.1 If you want, enable Googles Firebase Cloud Messaging:

View File

@@ -11,7 +11,7 @@ If you believe you have discovered a security vulnerability in this project, **d
To report a security issue responsibly, please go to the Security tab or visit: To report a security issue responsibly, please go to the Security tab or visit:
https://github.com/krille-chan/fluffychat/security/advisories/new https://gitea.weltonmoura.com.br/welton/tatuchat
The following information can help us address the issue: The following information can help us address the issue:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 KiB

After

Width:  |  Height:  |  Size: 56 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -2,8 +2,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200">
<defs> <defs>
<linearGradient id="background" x1="0%" y1="0%" x2="0%" y2="100%"> <linearGradient id="background" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0" style="stop-color:#7c67e4; stop-opacity:1" /> <stop offset="0" style="stop-color:#7c67e4; stop-opacity:0" />
<stop offset="1" style="stop-color:#261386; stop-opacity:1" /> <stop offset="1" style="stop-color:#261386; stop-opacity:0" />
</linearGradient> </linearGradient>
</defs> </defs>
<rect width="200" height="200" fill="url(#background)" /> <rect width="200" height="200" fill="url(#background)" />

Before

Width:  |  Height:  |  Size: 418 B

After

Width:  |  Height:  |  Size: 419 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -3,7 +3,7 @@
"defaultHomeserver": "https://matrix.weltonmoura.com.br", "defaultHomeserver": "https://matrix.weltonmoura.com.br",
"presetHomeserver": "https://matrix.weltonmoura.com.br", "presetHomeserver": "https://matrix.weltonmoura.com.br",
"welcomeText": "", "welcomeText": "",
"privacyUrl": "https://github.com/krille-chan/fluffychat/blob/main/PRIVACY.md", "privacyUrl": "https://tatuchat.weltonmoura.com.br/home/politica-de-privacidade/",
"audioRecordingNumChannels": 1, "audioRecordingNumChannels": 1,
"audioRecordingAutoGain": true, "audioRecordingAutoGain": true,
"audioRecordingEchoCancel": false, "audioRecordingEchoCancel": false,

View File

@@ -36,10 +36,13 @@ abstract class AppConfig {
static const String muralTag = 'tatuchat_mural'; static const String muralTag = 'tatuchat_mural';
static const String sourceCodeUrl = static const String sourceCodeUrl =
'https://github.com/krille-chan/fluffychat'; 'https://gitea.weltonmoura.com.br/welton/tatuchat';
static const String licenseUrl =
'https://gitea.weltonmoura.com.br/welton/tatuchat/src/branch/main/LICENSE';
static const String supportUrl = static const String supportUrl =
'https://github.com/krille-chan/fluffychat/issues'; 'https://gitea.weltonmoura.com.br/welton/tatuchat/issues';
static const String changelogUrl = 'https://fluffychat.im/changelog/'; static const String changelogUrl =
'https://tatuchat.weltonmoura.com.br/home/';
static const String helpUrl = static const String helpUrl =
'https://ko-fi.com/post/How-can-I-support-FluffyChat-J2G325WE6I'; 'https://ko-fi.com/post/How-can-I-support-FluffyChat-J2G325WE6I';
@@ -47,8 +50,8 @@ abstract class AppConfig {
static final Uri newIssueUrl = Uri( static final Uri newIssueUrl = Uri(
scheme: 'https', scheme: 'https',
host: 'github.com', host: 'gitea.weltonmoura.com.br',
path: '/krille-chan/fluffychat/issues/new', path: '/welton/tatuchat/issues/new',
); );
static final Uri homeserverList = Uri( static final Uri homeserverList = Uri(

View File

@@ -67,14 +67,14 @@ enum AppSettings<T> {
'https://matrix.weltonmoura.com.br', 'https://matrix.weltonmoura.com.br',
), ),
welcomeText<String>('chat.fluffy.welcome_text', ''), welcomeText<String>('chat.fluffy.welcome_text', ''),
website<String>('chat.fluffy.website_url', 'https://tatuchat.weltonmoura.com.br'), website<String>('chat.fluffy.website_url', 'https://tatuchat.weltonmoura.com.br/home'),
logoUrl<String>( logoUrl<String>(
'chat.fluffy.logo_url', 'chat.fluffy.logo_url',
'https://tatuchat.weltonmoura.com.br/assets/assets/logo/mini/logo_mini.png', 'https://tatuchat.weltonmoura.com.br/assets/assets/logo/mini/logo_mini.png',
), ),
privacyPolicy<String>( privacyPolicy<String>(
'chat.fluffy.privacy_policy_url', 'chat.fluffy.privacy_policy_url',
'http://tatuchat.weltonmoura.com.br/politica-de-privacidade/', 'https://tatuchat.weltonmoura.com.br/home/politica-de-privacidade/',
), ),
tos<String>('chat.fluffy.tos_url', 'https://tatuchat.weltonmoura.com.br/tos'), tos<String>('chat.fluffy.tos_url', 'https://tatuchat.weltonmoura.com.br/tos'),
sendTimelineEventTimeout<int>('chat.fluffy.send_timeline_event_timeout', 15), sendTimelineEventTimeout<int>('chat.fluffy.send_timeline_event_timeout', 15),

View File

@@ -1,9 +1,12 @@
{ {
"developer": "Developer",
"editImage": "Edit image", "editImage": "Edit image",
"@editImage": { "@editImage": {
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"environmentVariables": "Environment variables",
"licence": "Licence",
"rotateLeft": "Rotate left", "rotateLeft": "Rotate left",
"@rotateLeft": { "@rotateLeft": {
"type": "String", "type": "String",

View File

@@ -999,7 +999,7 @@
"placeholders": {} "placeholders": {}
}, },
"scanQrCode": "Scan cód QR", "scanQrCode": "Scan cód QR",
"inviteText": "Thug {username} cuireadh duit chuig FluffyChat.\n1. Tabhair cuairt ar fluffychat.im agus a shuiteáil an app\n2. Cláraigh nó sínigh isteach\n3. Oscail an nasc cuirí:\n {link}", "inviteText": "Thug {username} cuireadh duit chuig FluffyChat.\n1. Tabhair cuairt ar tatuchat.weltonmoura.com.br/home/ agus a shuiteáil an app\n2. Cláraigh nó sínigh isteach\n3. Oscail an nasc cuirí:\n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -814,7 +814,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} convidoute a FluffyChat.\n1. Visita fluffychat.im e instala a app\n2. Crea unha conta ou Accede\n3. Abre a ligazón do convite: \n {link}", "inviteText": "{username} convidoute a FluffyChat.\n1. Visita tatuchat.weltonmoura.com.br/home/ e instala a app\n2. Crea unha conta ou Accede\n3. Abre a ligazón do convite: \n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -619,7 +619,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} הזמין אותך ל-FluffyChat.\n1. התקן את FluffyChat: https://fluffychat.im\n2. הירשם או היכנס\n3. פתח את קישור ההזמנה: {link}", "inviteText": "{username} הזמין אותך ל-FluffyChat.\n1. התקן את FluffyChat: https://tatuchat.weltonmoura.com.br/home/\n2. הירשם או היכנס\n3. פתח את קישור ההזמנה: {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -800,7 +800,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} te je pozvao/la u FluffyChat. \n1. Posjeti strnicu fluffychat.im i instaliraj aplikaciju \n2. Registriraj ili prijavi se \n3. Otvori poveznicu poziva: \n {link}", "inviteText": "{username} te je pozvao/la u FluffyChat. \n1. Posjeti strnicu tatuchat.weltonmoura.com.br/home/ i instaliraj aplikaciju \n2. Registriraj ili prijavi se \n3. Otvori poveznicu poziva: \n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -569,7 +569,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} meghívta a FluffyChat-be.\n1. Keresse fel a fluffychat.im oldalt, és telepítse az alkalmazást \n2. Regisztráljon vagy jelentkezzen be \n3. Nyissa meg a meghívó linket: \n {link}", "inviteText": "{username} meghívta a FluffyChat-be.\n1. Keresse fel a tatuchat.weltonmoura.com.br/home/ oldalt, és telepítse az alkalmazást \n2. Regisztráljon vagy jelentkezzen be \n3. Nyissa meg a meghívó linket: \n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -88,7 +88,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} mengundang kamu ke FluffyChat. \n1. Kunjungi fluffychat.im dan instal aplikasi\n2. Daftar atau masuk \n3. Buka tautan undangan: \n {link}", "inviteText": "{username} mengundang kamu ke FluffyChat. \n1. Kunjungi tatuchat.weltonmoura.com.br/home/ dan instal aplikasi\n2. Daftar atau masuk \n3. Buka tautan undangan: \n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -690,7 +690,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} ti ha invitato/a a FluffyChat.\n1. Visita fluffychat.im e installa l'applicazione\n2. Iscriviti o accedi\n3. Apri il collegamento di invito: \n {link}", "inviteText": "{username} ti ha invitato/a a FluffyChat.\n1. Visita tatuchat.weltonmoura.com.br/home/ e installa l'applicazione\n2. Iscriviti o accedi\n3. Apri il collegamento di invito: \n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -697,7 +697,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username}があなたをFluffyChatに招待しました。\n1. FluffyChatをインストール: fluffychat.im \n2. アカウントの作成、またはサインインを行う\n3. 招待リンクを開く\n {link}", "inviteText": "{username}があなたをFluffyChatに招待しました。\n1. FluffyChatをインストール: tatuchat.weltonmoura.com.br/home/ \n2. アカウントの作成、またはサインインを行う\n3. 招待リンクを開く\n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -1139,7 +1139,7 @@
} }
}, },
"noChatDescriptionYet": "Ulac aglam n udiwenni i d-yenulfan yakan.", "noChatDescriptionYet": "Ulac aglam n udiwenni i d-yenulfan yakan.",
"inviteText": "{username} yeɛreḍ-ik·m ɣer FluffyChat.\n1. Rzu ɣer fluffychat.im syin sbedd asnas \n2. Jerred neɣ kcem \n3. Ldi aseɣwen n tinubga: \n {link}", "inviteText": "{username} yeɛreḍ-ik·m ɣer FluffyChat.\n1. Rzu ɣer tatuchat.weltonmoura.com.br/home/ syin sbedd asnas \n2. Jerred neɣ kcem \n3. Ldi aseɣwen n tinubga: \n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -1493,7 +1493,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username}님이 당신을 FluffyChat에 초대했습니다.\n1. FluffyChat 설치: https://fluffychat.im \n2. 가입하거나 로그인 \n3. 초대 링크 열기: \n {link}", "inviteText": "{username}님이 당신을 FluffyChat에 초대했습니다.\n1. FluffyChat 설치: https://tatuchat.weltonmoura.com.br/home/ \n2. 가입하거나 로그인 \n3. 초대 링크 열기: \n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -1461,7 +1461,7 @@
} }
} }
}, },
"inviteText": "{username} pakvietė jus prisijungti prie FluffyChat. \n1. Įdiekite FluffyChat: https://fluffychat.im \n2. Prisiregistruokite arba prisijunkite \n3. Atidarykite pakvietimo nuorodą: {link}", "inviteText": "{username} pakvietė jus prisijungti prie FluffyChat. \n1. Įdiekite FluffyChat: https://tatuchat.weltonmoura.com.br/home/ \n2. Prisiregistruokite arba prisijunkite \n3. Atidarykite pakvietimo nuorodą: {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -515,7 +515,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} uzaicināja pievienoties FluffyChat.\n1. Jāapmeklē fluffychat.im un jāuzstāda lietotne \n2. Jāizveido konts vai jāpiesakās \n3. Jāatver uzaicinājuma saite: \n {link}", "inviteText": "{username} uzaicināja pievienoties FluffyChat.\n1. Jāapmeklē tatuchat.weltonmoura.com.br/home/ un jāuzstāda lietotne \n2. Jāizveido konts vai jāpiesakās \n3. Jāatver uzaicinājuma saite: \n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -663,7 +663,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} har invitert deg til FluffyChat. \n1. Installer FluffyChat: https://fluffychat.im \n2. Registrer deg eller logg inn \n3. Åpne invitasjonslenken: \n {link}", "inviteText": "{username} har invitert deg til FluffyChat. \n1. Installer FluffyChat: https://tatuchat.weltonmoura.com.br/home/ \n2. Registrer deg eller logg inn \n3. Åpne invitasjonslenken: \n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -814,7 +814,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} heeft je uitgenodigd voor FluffyChat.\n1. Bezoek https://fluffychat.im en installeer de app\n2. Registreer of log in\n3. Open deze uitnodigingslink:\n{link}", "inviteText": "{username} heeft je uitgenodigd voor FluffyChat.\n1. Bezoek https://tatuchat.weltonmoura.com.br/home/ en installeer de app\n2. Registreer of log in\n3. Open deze uitnodigingslink:\n{link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -726,7 +726,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} zaprosił/-a Cię do FluffyChat.\n1. Odwiedź fluffychat.im i zainstaluj aplikację\n2. Zarejestuj się lub zaloguj\n3. Otwórz link zaproszenia:\n{link}", "inviteText": "{username} zaprosił/-a Cię do FluffyChat.\n1. Odwiedź tatuchat.weltonmoura.com.br/home/ i zainstaluj aplikację\n2. Zarejestuj się lub zaloguj\n3. Otwórz link zaproszenia:\n{link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -563,6 +563,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"developer": "Desenvolvedor",
"devices": "Dispositivos", "devices": "Dispositivos",
"@devices": { "@devices": {
"type": "String", "type": "String",
@@ -672,6 +673,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"environmentVariables": "Variáveis e ambiente",
"errorObtainingLocation": "Erro ao obter localização: {error}", "errorObtainingLocation": "Erro ao obter localização: {error}",
"@errorObtainingLocation": { "@errorObtainingLocation": {
"type": "String", "type": "String",
@@ -892,6 +894,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"licence": "Licença",
"lightTheme": "Claro", "lightTheme": "Claro",
"@lightTheme": { "@lightTheme": {
"type": "String", "type": "String",

View File

@@ -714,7 +714,7 @@
} }
} }
}, },
"inviteText": "{username} v-a invitat la FluffyChat.\n1. Instalați FluffyChat: https://fluffychat.im\n2. Înregistrați-vă sau conectați-vă\n3. Deschideți invitația: {link}", "inviteText": "{username} v-a invitat la FluffyChat.\n1. Instalați FluffyChat: https://tatuchat.weltonmoura.com.br/home/\n2. Înregistrați-vă sau conectați-vă\n3. Deschideți invitația: {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -814,7 +814,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} пригласил(а) вас в FluffyChat. \n1. Посетите https://fluffychat.im и установите приложение \n2. Зарегистрируйтесь или войдите \n3. Откройте ссылку приглашения: \n {link}", "inviteText": "{username} пригласил(а) вас в FluffyChat. \n1. Посетите https://tatuchat.weltonmoura.com.br/home/ и установите приложение \n2. Зарегистрируйтесь или войдите \n3. Откройте ссылку приглашения: \n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -516,7 +516,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} vás pozval na FluffyChat.\n1. Nainštalujte si FluffyChat: https://fluffychat.im\n2. Zaregistrujte sa alebo sa prihláste\n3. Otvorte odkaz na pozvánku: {link}", "inviteText": "{username} vás pozval na FluffyChat.\n1. Nainštalujte si FluffyChat: https://tatuchat.weltonmoura.com.br/home/\n2. Zaregistrujte sa alebo sa prihláste\n3. Otvorte odkaz na pozvánku: {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -766,7 +766,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} вас позива у FluffyChat. \n1. Инсталирајте FluffyChat: https://fluffychat.im \n2. Региструјте се или пријавите \n3. Отворите везу позивнице: {link}", "inviteText": "{username} вас позива у FluffyChat. \n1. Инсталирајте FluffyChat: https://tatuchat.weltonmoura.com.br/home/ \n2. Региструјте се или пријавите \n3. Отворите везу позивнице: {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -648,7 +648,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} bjöd in dig till FluffyChat.\n1. Besök fluffychat.im och installera appen\n2. Registrera dig eller logga in\n3. Öppna inbjudningslänk:\n {link}", "inviteText": "{username} bjöd in dig till FluffyChat.\n1. Besök tatuchat.weltonmoura.com.br/home/ och installera appen\n2. Registrera dig eller logga in\n3. Öppna inbjudningslänk:\n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -815,7 +815,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} sizi FluffyChat'e davet etti.\n1. fluffychat.im adresini ziyaret edin ve uygulamayı kurun \n2. Kaydolun veya oturum açın \n3. Davet bağlantısını açın: \n {link}", "inviteText": "{username} sizi FluffyChat'e davet etti.\n1. tatuchat.weltonmoura.com.br/home/ adresini ziyaret edin ve uygulamayı kurun \n2. Kaydolun veya oturum açın \n3. Davet bağlantısını açın: \n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -534,7 +534,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} запрошує вас у FluffyChat. \n1. Перейдіть на fluffychat.im й установіть застосунок \n2. Зареєструйтесь або ввійдіть \n3. Відкрийте запрошувальне посилання:\n {link}", "inviteText": "{username} запрошує вас у FluffyChat. \n1. Перейдіть на tatuchat.weltonmoura.com.br/home/ й установіть застосунок \n2. Зареєструйтесь або ввійдіть \n3. Відкрийте запрошувальне посилання:\n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -844,7 +844,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} sizni FluffyChat’ga taklif qildi.\n1. fluffychat.im saytiga tashrif buyuring va ilovani oʻrnating.\n2. Roʻyxatdan oʻting yoki tizimga kiring.\n3. Taklif havolasini oching:\n{link}", "inviteText": "{username} sizni FluffyChat’ga taklif qildi.\n1. tatuchat.weltonmoura.com.br/home/ saytiga tashrif buyuring va ilovani oʻrnating.\n2. Roʻyxatdan oʻting yoki tizimga kiring.\n3. Taklif havolasini oching:\n{link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -786,7 +786,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} 邀请你使用 FluffyChat。 \n1. 安装 FluffyChat:https://fluffychat.im \n2. 注册或登录 \n3. 打开邀请链接:\n {link}", "inviteText": "{username} 邀请你使用 FluffyChat。 \n1. 安装 FluffyChat:https://tatuchat.weltonmoura.com.br/home/ \n2. 注册或登录 \n3. 打开邀请链接:\n {link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -685,7 +685,7 @@
"type": "String", "type": "String",
"placeholders": {} "placeholders": {}
}, },
"inviteText": "{username} 邀請您使用 FluffyChat\n1. 安裝 FluffyChat:https://fluffychat.im\n2. 登入或註冊\n3. 打開該邀請網址:\n{link}", "inviteText": "{username} 邀請您使用 FluffyChat\n1. 安裝 FluffyChat:https://tatuchat.weltonmoura.com.br/home/\n2. 登入或註冊\n3. 打開該邀請網址:\n{link}",
"@inviteText": { "@inviteText": {
"type": "String", "type": "String",
"placeholders": { "placeholders": {

View File

@@ -12,7 +12,6 @@ import 'package:tatchat/l10n/l10n.dart';
import 'package:tatchat/utils/tatu_share.dart'; import 'package:tatchat/utils/tatu_share.dart';
import 'package:tatchat/widgets/avatar.dart'; import 'package:tatchat/widgets/avatar.dart';
import 'package:tatchat/widgets/matrix.dart'; import 'package:tatchat/widgets/matrix.dart';
import 'package:url_launcher/url_launcher_string.dart';
import 'chat_list.dart'; import 'chat_list.dart';
@@ -109,16 +108,6 @@ class ClientChooserButton extends StatelessWidget {
], ],
), ),
), ),
PopupMenuItem(
value: SettingsAction.support,
child: Row(
children: [
Icon(Icons.favorite, color: Colors.red),
const SizedBox(width: 18),
Text(L10n.of(context).supportFluffyChat),
],
),
),
const PopupMenuDivider(), const PopupMenuDivider(),
..._bundleEntries(context, matrix, bundles), ..._bundleEntries(context, matrix, bundles),
PopupMenuItem( PopupMenuItem(
@@ -249,11 +238,6 @@ class ClientChooserButton extends StatelessWidget {
case SettingsAction.invite: case SettingsAction.invite:
TatuShare.shareInviteLink(context); TatuShare.shareInviteLink(context);
break; break;
case SettingsAction.support:
launchUrlString(
'https://ko-fi.com/post/How-can-I-support-FluffyChat-J2G325WE6I',
);
break;
case SettingsAction.settings: case SettingsAction.settings:
context.go('/rooms/settings'); context.go('/rooms/settings');
break; break;
@@ -271,13 +255,4 @@ class ClientChooserButton extends StatelessWidget {
} }
} }
enum SettingsAction { enum SettingsAction { addAccount, newGroup, setStatus, invite, settings, archive, apps }
addAccount,
newGroup,
setStatus,
invite,
support,
settings,
archive,
apps,
}

View File

@@ -11,7 +11,6 @@ import 'package:tatchat/l10n/l10n.dart';
import 'package:tatchat/utils/tatu_share.dart'; import 'package:tatchat/utils/tatu_share.dart';
import 'package:tatchat/widgets/avatar.dart'; import 'package:tatchat/widgets/avatar.dart';
import 'package:tatchat/widgets/matrix.dart'; import 'package:tatchat/widgets/matrix.dart';
import 'package:url_launcher/url_launcher_string.dart';
import 'chat_list.dart'; import 'chat_list.dart';
@@ -41,10 +40,10 @@ class Sidebar extends StatelessWidget {
), ),
child: Row( child: Row(
children: [ children: [
Icon( Image.asset(
Icons.chat_bubble_outline, './assets/logo/mini/logo_mini.png',
size: 22, width: 28,
color: theme.colorScheme.primary, height: 28,
), ),
const SizedBox(width: 10), const SizedBox(width: 10),
Text( Text(
@@ -115,14 +114,6 @@ class _AccountSection extends StatelessWidget {
label: L10n.of(context).settings, label: L10n.of(context).settings,
onTap: () => context.go('/rooms/settings'), onTap: () => context.go('/rooms/settings'),
), ),
_ActionTile(
icon: Icons.favorite,
iconColor: Colors.red,
label: L10n.of(context).supportFluffyChat,
onTap: () => launchUrlString(
'https://ko-fi.com/post/How-can-I-support-FluffyChat-J2G325WE6I',
),
),
const Divider(), const Divider(),
for (final bundle in bundles.keys) ...[ for (final bundle in bundles.keys) ...[
if (bundles[bundle]!.length != 1 || if (bundles[bundle]!.length != 1 ||

View File

@@ -4,15 +4,15 @@
// SPDX-License-Identifier: AGPL-3.0-or-later // SPDX-License-Identifier: AGPL-3.0-or-later
import 'package:async/async.dart'; import 'package:async/async.dart';
import 'package:tatchat/config/setting_keys.dart';
import 'package:tatchat/l10n/l10n.dart';
import 'package:tatchat/utils/tatu_share.dart';
import 'package:tatchat/utils/platform_infos.dart';
import 'package:tatchat/widgets/avatar.dart';
import 'package:tatchat/widgets/matrix.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:material_ui/material_ui.dart'; import 'package:material_ui/material_ui.dart';
import 'package:matrix/matrix.dart' hide Result; import 'package:matrix/matrix.dart' hide Result;
import 'package:tatchat/config/setting_keys.dart';
import 'package:tatchat/l10n/l10n.dart';
import 'package:tatchat/utils/platform_infos.dart';
import 'package:tatchat/utils/tatu_share.dart';
import 'package:tatchat/widgets/avatar.dart';
import 'package:tatchat/widgets/matrix.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import 'package:url_launcher/url_launcher_string.dart'; import 'package:url_launcher/url_launcher_string.dart';
@@ -183,18 +183,6 @@ class SettingsView extends StatelessWidget {
: null, : null,
), ),
Divider(color: theme.dividerColor), Divider(color: theme.dividerColor),
ListTile(
leading: const Icon(Icons.dns_outlined),
title: Text(
L10n.of(context).aboutHomeserver(
Matrix.of(context).client.userID?.domain ?? 'homeserver',
),
),
onTap: () => context.go('/rooms/settings/homeserver'),
tileColor: activeRoute.startsWith('/rooms/settings/homeserver')
? theme.colorScheme.surfaceContainerHigh
: null,
),
ListTile( ListTile(
leading: const Icon(Icons.privacy_tip_outlined), leading: const Icon(Icons.privacy_tip_outlined),
title: Text(L10n.of(context).privacy), title: Text(L10n.of(context).privacy),
@@ -205,6 +193,57 @@ class SettingsView extends StatelessWidget {
title: Text(L10n.of(context).about), title: Text(L10n.of(context).about),
onTap: () => PlatformInfos.showDialog(context), onTap: () => PlatformInfos.showDialog(context),
), ),
Theme(
data: theme.copyWith(dividerColor: Colors.transparent),
child: ExpansionTile(
key: const Key('DeveloperMenu'),
leading: const Icon(Icons.code_outlined),
title: Text(L10n.of(context).developer),
tilePadding: const EdgeInsets.symmetric(horizontal: 16),
childrenPadding: const EdgeInsets.symmetric(vertical: 4),
controlAffinity: ListTileControlAffinity.trailing,
children: [
ListTile(
leading: const Icon(Icons.dns_outlined),
title: Text(
L10n.of(context).aboutHomeserver(
Matrix.of(
context,
).client.userID?.domain ?? 'homeserver',
),
),
dense: true,
contentPadding: const EdgeInsets.only(left: 40, right: 16),
onTap: () => context.go('/rooms/settings/homeserver'),
tileColor: activeRoute.startsWith(
'/rooms/settings/homeserver',
)
? theme.colorScheme.surfaceContainerHigh
: null,
),
ListTile(
leading: const Icon(Icons.list_alt_outlined),
title: Text(L10n.of(context).logs),
dense: true,
contentPadding: const EdgeInsets.only(left: 40, right: 16),
onTap: () => context.go('/logs'),
tileColor: activeRoute.startsWith('/logs')
? theme.colorScheme.surfaceContainerHigh
: null,
),
ListTile(
leading: const Icon(Icons.settings_applications_outlined),
title: Text(L10n.of(context).environmentVariables),
dense: true,
contentPadding: const EdgeInsets.only(left: 40, right: 16),
onTap: () => context.go('/configs'),
tileColor: activeRoute.startsWith('/configs')
? theme.colorScheme.surfaceContainerHigh
: null,
),
],
),
),
Divider(color: theme.dividerColor), Divider(color: theme.dividerColor),
ListTile( ListTile(
leading: const Icon(Icons.logout_outlined), leading: const Icon(Icons.logout_outlined),

View File

@@ -5,12 +5,13 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
import 'package:material_ui/material_ui.dart';
import 'package:material_ui/material_ui.dart' as m show Dialog, showDialog;
import 'package:package_info_plus/package_info_plus.dart';
import 'package:tatchat/config/setting_keys.dart'; import 'package:tatchat/config/setting_keys.dart';
import 'package:tatchat/l10n/l10n.dart'; import 'package:tatchat/l10n/l10n.dart';
import 'package:flutter/foundation.dart';
import 'package:go_router/go_router.dart';
import 'package:material_ui/material_ui.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:url_launcher/url_launcher_string.dart'; import 'package:url_launcher/url_launcher_string.dart';
import '../config/app_config.dart'; import '../config/app_config.dart';
@@ -56,53 +57,107 @@ abstract class PlatformInfos {
return version; return version;
} }
static const String aboutDescription =
'O TatuChat é um cliente de mensagens instantâneas focado em '
'privacidade, simplicidade e código aberto, desenvolvido como um fork do '
'aclamado projeto FluffyChat. Utilizando o protocolo descentralizado '
'Matrix, ele oferece criptografia de ponta a ponta (E2EE) para proteger '
'conversas, arquivos e mídias. Além do bate-papo tradicional, o projeto '
'se destaca por recursos como canais de transmissão, organização em '
'espaços, murais visuais em formato de grid e suporte a mini-apps '
'desenvolvidos pela comunidade. Acesse Aqui. '
'https://tatuchat.weltonmoura.com.br/home/';
static Future<void> showDialog(BuildContext context) async { static Future<void> showDialog(BuildContext context) async {
final l10n = L10n.of(context); final l10n = L10n.of(context);
final version = await PlatformInfos.getVersion(); final theme = Theme.of(context);
if (!context.mounted) return; final size = MediaQuery.sizeOf(context);
showAboutDialog( await m.showDialog<void>(
context: context, context: context,
children: [ builder: (context) => m.Dialog(
Text(l10n.versionWithNumber(version)), insetPadding: const EdgeInsets.symmetric(
TextButton.icon( horizontal: 24,
onPressed: () => launchUrlString(AppConfig.sourceCodeUrl), vertical: 40,
icon: const Icon(Icons.source_outlined),
label: Text(l10n.sourceCode),
), ),
Builder( child: ConstrainedBox(
builder: (innerContext) { constraints: BoxConstraints(
return TextButton.icon( maxWidth: 720,
onPressed: () { maxHeight: size.height * 0.88,
context.go('/logs'); ),
Navigator.of(innerContext).pop(); child: Padding(
}, padding: const EdgeInsets.all(24),
icon: const Icon(Icons.list_outlined), child: Column(
label: Text(l10n.logs), mainAxisSize: .min,
); children: [
}, Expanded(
), child: SingleChildScrollView(
Builder( child: Column(
builder: (innerContext) { mainAxisSize: .min,
return TextButton.icon( children: [
onPressed: () { ClipRRect(
context.go('/configs'); borderRadius: BorderRadius.circular(32),
Navigator.of(innerContext).pop(); child: Image.asset(
}, './assets/logo/mini/logo_mini.png',
icon: const Icon(Icons.settings_applications_outlined), width: 96,
label: Text(l10n.advancedConfigs), height: 96,
); ),
}, ),
), const SizedBox(height: 24),
], Text(
applicationIcon: ClipRRect( AppSettings.applicationName.value,
borderRadius: BorderRadius.circular(64), textAlign: TextAlign.center,
child: Image.asset( style: theme.textTheme.headlineMedium?.copyWith(
'./assets/logo/mini/logo_mini.png', fontWeight: FontWeight.bold,
width: 64, ),
height: 64, ),
const SizedBox(height: 24),
Linkify(
text: aboutDescription,
textAlign: TextAlign.center,
style: TextStyle(
color: theme.colorScheme.onSurface,
),
options: const LinkifyOptions(humanize: false),
linkStyle: TextStyle(
color: theme.colorScheme.primary,
decorationColor: theme.colorScheme.primary,
),
onOpen: (link) => launchUrlString(link.url),
),
],
),
),
),
const SizedBox(height: 8),
const Divider(),
const SizedBox(height: 8),
Wrap(
alignment: WrapAlignment.end,
crossAxisAlignment: WrapCrossAlignment.center,
spacing: 8,
runSpacing: 4,
children: [
TextButton.icon(
onPressed: () => launchUrlString(AppConfig.sourceCodeUrl),
icon: const Icon(Icons.source_outlined),
label: Text(l10n.sourceCode),
),
TextButton.icon(
onPressed: () => launchUrlString(AppConfig.licenseUrl),
icon: const Icon(Icons.description_outlined),
label: Text(l10n.licence),
),
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: Text(l10n.close),
),
],
),
],
),
),
), ),
), ),
applicationName: AppSettings.applicationName.value,
); );
} }
} }

View File

@@ -42,7 +42,7 @@ description: |
FluffyChat is a non-profit project based on open standards and driven entirely by volunteers. Infrastructure is funded by donations, and participation is open to everyone. FluffyChat is a non-profit project based on open standards and driven entirely by volunteers. Infrastructure is funded by donations, and participation is open to everyone.
Join the community: https://matrix.to/#/#fluffy-space:matrix.org Join the community: https://matrix.to/#/#fluffy-space:matrix.org
Website: http://fluffychat.im Website: https://tatuchat.weltonmoura.com.br/home/
Microblog: https://troet.cafe/@krille Microblog: https://troet.cafe/@krille
grade: stable grade: stable

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 13 KiB