Initial commit: JustAMessenger v0.1.0
Серверная часть (Go): - WebSocket сервер с бинарным протоколом - XChaCha20-Poly1305 шифрование - zstd сжатие с дедупликацией (64KB чанки) - SQLite хранилище (WAL режим) - Управление гильдиями, каналами, ролями - Федерация между серверами (ed25519) - REST API + WebSocket endpoints Клиентская часть (Flutter): - Material Design 3 тёмная тема (Discord-like) - WebSocket соединение с сервером - Экраны: сплэш, логин, домашний, гильдии, чат - Модели: пользователи, гильдии, каналы, сообщения, роли - Сервисы: соединение, API, криптография, тема - Виджеты: иконки гильдий, сообщения, ввод чата - Web сборка (PWA) Документация: - AGENTS.md — контекст для ИИ ассистентов - docs/protocol.md — спецификация протокола
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class ThemeService {
|
||||
static const Color primary = Color(0xFF5865F2);
|
||||
static const Color success = Color(0xFF3BA55D);
|
||||
static const Color danger = Color(0xFFED4245);
|
||||
static const Color warning = Color(0xFFFAA81A);
|
||||
static const Color surfacePrimary = Color(0xFF313338);
|
||||
static const Color surfaceSecondary = Color(0xFF2B2D31);
|
||||
static const Color surfaceTertiary = Color(0xFF1E1F22);
|
||||
static const Color textPrimary = Color(0xFFF2F3F5);
|
||||
static const Color textSecondary = Color(0xFFB5BAC1);
|
||||
static const Color textMuted = Color(0xFF80848E);
|
||||
static const Color backgroundPrimary = Color(0xFF313338);
|
||||
static const Color backgroundSecondary = Color(0xFF2B2D31);
|
||||
static const Color backgroundTertiary = Color(0xFF1E1F22);
|
||||
|
||||
static ThemeData get darkTheme {
|
||||
return ThemeData(
|
||||
brightness: Brightness.dark,
|
||||
scaffoldBackgroundColor: const Color(0xFF313338),
|
||||
primaryColor: primary,
|
||||
colorScheme: const ColorScheme.dark(
|
||||
primary: primary,
|
||||
secondary: success,
|
||||
surface: surfacePrimary,
|
||||
error: danger,
|
||||
),
|
||||
appBarTheme: const AppBarTheme(
|
||||
backgroundColor: surfaceSecondary,
|
||||
elevation: 0,
|
||||
centerTitle: true,
|
||||
titleTextStyle: TextStyle(
|
||||
color: textPrimary,
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
iconTheme: IconThemeData(color: textPrimary),
|
||||
),
|
||||
bottomNavigationBarTheme: const BottomNavigationBarThemeData(
|
||||
backgroundColor: surfaceSecondary,
|
||||
selectedItemColor: primary,
|
||||
unselectedItemColor: textMuted,
|
||||
),
|
||||
cardTheme: CardTheme(
|
||||
color: surfaceSecondary,
|
||||
elevation: 0,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
),
|
||||
inputDecorationTheme: InputDecorationTheme(
|
||||
filled: true,
|
||||
fillColor: surfaceTertiary,
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
borderSide: BorderSide.none,
|
||||
),
|
||||
hintStyle: const TextStyle(color: textMuted),
|
||||
contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
|
||||
),
|
||||
dividerTheme: const DividerThemeData(
|
||||
color: Color(0xFF3F4147),
|
||||
thickness: 1,
|
||||
),
|
||||
snackBarTheme: SnackBarThemeData(
|
||||
backgroundColor: surfaceTertiary,
|
||||
behavior: SnackBarBehavior.floating,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
|
||||
),
|
||||
useMaterial3: true,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user