From 0971433c7aba5e24e7c40d173cbed8f8e77c45a3 Mon Sep 17 00:00:00 2001 From: bvandeusen Date: Thu, 12 Mar 2026 19:08:21 -0400 Subject: [PATCH] refactor: remove briefing digest card, show full message list directly The summary card duplicated the first assistant message and consumed screen real estate without benefit on small screens. Replaced with: - Full message list via ChatMessageBubble from the top - SliverFillRemaining empty state ("No briefing yet today" + generate button) when no messages exist Co-Authored-By: Claude Sonnet 4.6 --- lib/screens/briefing/briefing_screen.dart | 71 +++++++++-------------- 1 file changed, 27 insertions(+), 44 deletions(-) diff --git a/lib/screens/briefing/briefing_screen.dart b/lib/screens/briefing/briefing_screen.dart index b1cdfe3..23abd5b 100644 --- a/lib/screens/briefing/briefing_screen.dart +++ b/lib/screens/briefing/briefing_screen.dart @@ -2,9 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../core/exceptions.dart'; -import '../../data/models/message.dart'; import '../../providers/briefing_provider.dart'; -import '../../widgets/briefing_digest_card.dart'; import '../../widgets/chat_message_bubble.dart'; import 'briefing_history_screen.dart'; @@ -146,59 +144,44 @@ class _BriefingScreenState extends ConsumerState { ), ), data: (conv) { - // First assistant message for the digest card (null if none yet) - final Message? firstAssistant = conv.messages - .where((m) => m.role == MessageRole.assistant) - .toList() - .firstOrNull; - return Column( children: [ - // Digest card + messages share one scroll view so expanding the - // card doesn't trap the user — the whole page just becomes taller. Expanded( child: CustomScrollView( controller: _scrollController, slivers: [ - SliverToBoxAdapter( - child: BriefingDigestCard( - message: firstAssistant, - onGenerateNow: _refresh, - ), - ), - - if (conv.messages.isNotEmpty) - SliverToBoxAdapter( - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 4), - child: Row(children: [ - const Expanded(child: Divider()), - Padding( - padding: - const EdgeInsets.symmetric(horizontal: 10), - child: Text( - 'Conversation', + if (conv.messages.isEmpty) + SliverFillRemaining( + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'No briefing yet today.', style: Theme.of(context) .textTheme - .labelSmall - ?.copyWith( - color: scheme.onSurfaceVariant), + .bodyMedium + ?.copyWith(color: scheme.onSurfaceVariant), ), - ), - const Expanded(child: Divider()), - ]), + const SizedBox(height: 12), + FilledButton.tonal( + onPressed: _refresh, + child: const Text('Generate now'), + ), + ], + ), + ), + ) + else + SliverPadding( + padding: const EdgeInsets.symmetric( + horizontal: 8, vertical: 8), + sliver: SliverList.builder( + itemCount: conv.messages.length, + itemBuilder: (_, i) => + ChatMessageBubble(message: conv.messages[i]), ), ), - - SliverPadding( - padding: const EdgeInsets.symmetric( - horizontal: 8, vertical: 8), - sliver: SliverList.builder( - itemCount: conv.messages.length, - itemBuilder: (_, i) => - ChatMessageBubble(message: conv.messages[i]), - ), - ), ], ), ),