generalised console object

This commit is contained in:
Mikkeli Matlock
2026-01-27 00:03:01 +09:00
parent 7fd92d862b
commit 3db0e04402
2 changed files with 22 additions and 9 deletions

View File

@@ -217,8 +217,12 @@ class _DashboardScreenState extends State<DashboardScreen> {
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,
children: [ children: [
const Spacer(), // Top half - empty const Spacer(), // Top half - empty
const Expanded( Expanded(
child: DebugConsole(maxLines: 8), child: DebugConsole(
messageStream: WebSocketService.instance.debugStream,
initialMessages: WebSocketService.instance.debugMessages,
maxLines: 8,
),
), ),
], ],
), ),

View File

@@ -1,17 +1,26 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../services/websocket_service.dart';
import '../theme/app_theme.dart'; import '../theme/app_theme.dart';
/// Self-contained debug console that displays WebSocket log messages. /// Generic debug console that displays streaming log messages.
/// Subscribes to WebSocketService.debugStream internally. ///
/// Can be wired to any message source via [messageStream] and [initialMessages].
/// Example sources: WebSocketService.debugStream, ArduinoService logs, etc.
class DebugConsole extends StatefulWidget { class DebugConsole extends StatefulWidget {
/// Stream of new messages to display
final Stream<String> messageStream;
/// Initial messages to populate (e.g., from a buffer)
final List<String> initialMessages;
/// Maximum lines to display /// Maximum lines to display
final int maxLines; final int maxLines;
const DebugConsole({ const DebugConsole({
super.key, super.key,
required this.messageStream,
this.initialMessages = const [],
this.maxLines = 8, this.maxLines = 8,
}); });
@@ -21,18 +30,18 @@ class DebugConsole extends StatefulWidget {
class _DebugConsoleState extends State<DebugConsole> { class _DebugConsoleState extends State<DebugConsole> {
final List<String> _messages = []; final List<String> _messages = [];
StreamSubscription<String>? _debugSub; StreamSubscription<String>? _sub;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
// Initialize with existing buffer // Initialize with existing buffer
_messages.addAll(WebSocketService.instance.debugMessages); _messages.addAll(widget.initialMessages);
_trimMessages(); _trimMessages();
// Subscribe to new messages // Subscribe to new messages
_debugSub = WebSocketService.instance.debugStream.listen((msg) { _sub = widget.messageStream.listen((msg) {
setState(() { setState(() {
_messages.add(msg); _messages.add(msg);
_trimMessages(); _trimMessages();
@@ -48,7 +57,7 @@ class _DebugConsoleState extends State<DebugConsole> {
@override @override
void dispose() { void dispose() {
_debugSub?.cancel(); _sub?.cancel();
super.dispose(); super.dispose();
} }