claude_session_viewer/lib/widgets/navigation/app_shell.dart
Mathias Beaulieu-Duncan 364877d376 Initial commit: Claude Code session viewer (Flutter macOS)
A desktop app that parses Claude Code .jsonl session logs and provides
a rich UI for exploring conversations, tool usage, subagents, and token
consumption. Features include project browser with auto-discovery of
~/.claude/projects, conversation timeline with inline subagent expansion,
agents overview, toolbelt chart, and token usage dashboard.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 16:17:23 -04:00

63 lines
1.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../providers/session_provider.dart';
import '../../screens/agents/agents_screen.dart';
import '../../screens/home/home_screen.dart';
import '../../screens/timeline/timeline_screen.dart';
import '../../screens/tokens/tokens_screen.dart';
import '../../screens/toolbelt/toolbelt_screen.dart';
import 'sidebar.dart';
class AppShell extends StatefulWidget {
const AppShell({super.key});
@override
State<AppShell> createState() => _AppShellState();
}
class _AppShellState extends State<AppShell> {
SidebarScreen _screen = SidebarScreen.home;
void _onScreenSelected(SidebarScreen screen) {
setState(() => _screen = screen);
}
void _onSessionLoaded() {
setState(() => _screen = SidebarScreen.timeline);
}
@override
Widget build(BuildContext context) {
final provider = context.watch<SessionProvider>();
final hasSession = provider.session != null;
return Row(
children: [
Sidebar(
selected: _screen,
onSelect: _onScreenSelected,
hasSession: hasSession,
),
Expanded(
child: _buildScreen(),
),
],
);
}
Widget _buildScreen() {
switch (_screen) {
case SidebarScreen.home:
return HomeScreen(onSessionLoaded: _onSessionLoaded);
case SidebarScreen.timeline:
return const TimelineScreen();
case SidebarScreen.agents:
return const AgentsScreen();
case SidebarScreen.toolbelt:
return const ToolbeltScreen();
case SidebarScreen.tokens:
return const TokensScreen();
}
}
}