Files
SashegDev 096c4d0a2d 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 — спецификация протокола
2026-06-06 22:39:14 +00:00

64 lines
1.8 KiB
Dart

import 'package:flutter/material.dart';
import '../screens/splash_screen.dart';
import '../screens/login_screen.dart';
import '../screens/home_screen.dart';
import '../screens/guild_screen.dart';
import '../screens/chat_screen.dart';
import '../screens/settings_screen.dart';
import '../services/connection_service.dart';
import 'package:provider/provider.dart';
class JAMAppShell extends StatefulWidget {
const JAMAppShell({super.key});
@override
State<JAMAppShell> createState() => _JAMAppShellState();
}
class _JAMAppShellState extends State<JAMAppShell> {
final ConnectionService _connectionService = ConnectionService();
@override
void initState() {
super.initState();
_connectionService.init();
}
@override
void dispose() {
_connectionService.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider.value(value: _connectionService),
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: 'JustAMessenger',
theme: ThemeData.dark().copyWith(
colorScheme: ColorScheme.dark(
primary: const Color(0xFF5865F2),
secondary: const Color(0xFF3BA55D),
surface: const Color(0xFF2F3136),
error: const Color(0xFFED4245),
),
scaffoldBackgroundColor: const Color(0xFF36393F),
),
initialRoute: '/',
routes: {
'/': (context) => const SplashScreen(),
'/login': (context) => const LoginScreen(),
'/home': (context) => const HomeScreen(),
'/guild': (context) => const GuildScreen(),
'/chat': (context) => const ChatScreen(),
'/settings': (context) => const SettingsScreen(),
},
),
);
}
}