Frameless (window_manager, hidden titlebar): chrome bar on welcome, drag-to-move appbar + window buttons on connect, drag layer + window buttons in session controls; min size 160x90; volume-scroll off for drag; session maximize = fullscreen toggle. Verified on KDE Wayland. Delete legacy/minimal/nosheet bisect screens; session routes direct (black-screen fix verified incl. WAN). Avatar: pipeline now 128px aspect-kept PNG (was cropped JPEG); profile card centered 64px hover-to-change; member avatar drops ResizeImage downscale. NOTE open: pipeline 512 KiB check vs server 64 KiB enforcement mismatch. Fixes: idle warn/unready skipped while PLAYING; sendChat drops blanks; one chat row per send (drop textless server feed echo); chat field keeps focus after send. Playback libass true; sdk floor 3.13. Handoff 9-11: 9+10 fixed, 11 jumpy seek still open. Docs: handoff/roadmap/protocol record all of the above; few-commits preference going forward.
30 lines
838 B
Dart
30 lines
838 B
Dart
import 'package:flutter/material.dart';
|
|
import 'package:signals/signals_flutter.dart';
|
|
|
|
import 'src/screens/connect_screen.dart';
|
|
import 'src/screens/session_screen.dart';
|
|
import 'src/screens/welcome_screen.dart';
|
|
import 'src/state/session_state.dart';
|
|
|
|
class WatchTogetherApp extends StatelessWidget {
|
|
const WatchTogetherApp({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final session = SessionState.instance;
|
|
return MaterialApp(
|
|
title: 'Watch Together',
|
|
theme: ThemeData.dark(),
|
|
home: SignalBuilder(
|
|
builder: (context) {
|
|
return switch (session.route.value) {
|
|
AppRoute.welcome => const WelcomeScreen(),
|
|
AppRoute.connect => const ConnectScreen(),
|
|
AppRoute.session => const SessionScreen(),
|
|
};
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|