feat: sincronizar cor do tema via account data da conta Matrix
A cor escolhida no Appearance passa a ser guardada em im.fluffychat.account_config (primary_color), em vez de apenas nas preferencias locais do dispositivo. - ApplicationAccountConfig ganha primaryColor, preservado em updateApplicationAccountConfig e no novo setApplicationAccountColor - ThemeController restaura a cor da conta activa, aguarda accountDataLoading e reage a alteracoes remotas via onSync - A cor final e derivada de _accountPrimaryColor ?? _localPrimaryColor, evitando corrida entre as preferencias locais e o sync - Matrix notifica a troca de conta activa em initMatrix, setActiveClient e logout, corrigindo o indice do cliente activo - Apagar o wallpaper preserva a cor; testes de serializacao do modelo
This commit is contained in:
@@ -10,6 +10,7 @@ import 'package:tatchat/utils/file_selector.dart';
|
||||
import 'package:tatchat/widgets/future_loading_dialog.dart';
|
||||
import 'package:tatchat/widgets/theme_builder.dart';
|
||||
import 'package:material_ui/material_ui.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
import '../../widgets/matrix.dart';
|
||||
import 'settings_style_view.dart';
|
||||
@@ -22,11 +23,18 @@ class SettingsStyle extends StatefulWidget {
|
||||
}
|
||||
|
||||
class SettingsStyleController extends State<SettingsStyle> {
|
||||
void setChatColor(Color? color) {
|
||||
Future<void> setChatColor(Color? color) async {
|
||||
final client = Matrix.of(context).client;
|
||||
final themeController = ThemeController.of(context);
|
||||
AppSettings.colorSchemeSeedInt.setItem(
|
||||
color?.toARGB32() ?? AppSettings.colorSchemeSeedInt.defaultValue,
|
||||
);
|
||||
ThemeController.of(context).setPrimaryColor(color);
|
||||
await themeController.setPrimaryColor(color);
|
||||
try {
|
||||
await client.setApplicationAccountColor(color?.toARGB32());
|
||||
} catch (e, s) {
|
||||
Logs().e('Unable to save chat color', e, s);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> setWallpaper() async {
|
||||
@@ -105,12 +113,19 @@ class SettingsStyleController extends State<SettingsStyle> {
|
||||
});
|
||||
}
|
||||
|
||||
void deleteChatWallpaper() => showFutureLoadingDialog(
|
||||
context: context,
|
||||
future: () => Matrix.of(context).client.setApplicationAccountConfig(
|
||||
const ApplicationAccountConfig(wallpaperUrl: null, wallpaperBlur: null),
|
||||
),
|
||||
);
|
||||
void deleteChatWallpaper() {
|
||||
final client = Matrix.of(context).client;
|
||||
showFutureLoadingDialog(
|
||||
context: context,
|
||||
future: () => client.setApplicationAccountConfig(
|
||||
ApplicationAccountConfig(
|
||||
wallpaperUrl: null,
|
||||
wallpaperBlur: null,
|
||||
primaryColor: client.applicationAccountConfig.primaryColor,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
ThemeMode get currentTheme => ThemeController.of(context).themeMode;
|
||||
Color? get currentColor => ThemeController.of(context).primaryColor;
|
||||
|
||||
Reference in New Issue
Block a user