Skip to content

Commit f93ca6f

Browse files
Merge pull request #113 from richardthe3rd/claude/style-app-bar-heading-01KUsFjPf8Qm4nDpjgVb7R88
Style app bar to match heading colors
2 parents b1e63ac + 9a49ccd commit f93ca6f

4 files changed

Lines changed: 64 additions & 32 deletions

File tree

lib/screens/brewery_screen.dart

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,19 @@ class _BreweryScreenState extends State<BreweryScreen> {
5353
final theme = Theme.of(context);
5454

5555
return Scaffold(
56-
appBar: AppBar(),
5756
body: CustomScrollView(
5857
slivers: [
59-
SliverToBoxAdapter(
60-
child: _buildHeader(context, producer, breweryDrinks.length),
58+
SliverAppBar(
59+
expandedHeight: 244,
60+
pinned: true,
61+
backgroundColor: theme.colorScheme.primaryContainer,
62+
foregroundColor: theme.colorScheme.onPrimaryContainer,
63+
title: Text(producer.name),
64+
flexibleSpace: FlexibleSpaceBar(
65+
background: SafeArea(
66+
child: _buildHeader(context, producer, breweryDrinks.length),
67+
),
68+
),
6169
),
6270
SliverToBoxAdapter(
6371
child: Padding(
@@ -157,6 +165,7 @@ class _BreweryScreenState extends State<BreweryScreen> {
157165
Padding(
158166
padding: const EdgeInsets.all(24),
159167
child: Column(
168+
mainAxisSize: MainAxisSize.min,
160169
crossAxisAlignment: CrossAxisAlignment.start,
161170
children: [
162171
Row(

lib/screens/drink_detail_screen.dart

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,34 +43,49 @@ class _DrinkDetailScreenState extends State<DrinkDetailScreen> {
4343
);
4444
}
4545

46+
final theme = Theme.of(context);
47+
4648
return Scaffold(
47-
appBar: AppBar(
48-
actions: [
49-
IconButton(
50-
icon: const Icon(Icons.share),
51-
onPressed: () => _shareDrink(context, drink, provider.currentFestival),
49+
body: CustomScrollView(
50+
slivers: [
51+
SliverAppBar(
52+
expandedHeight: 220,
53+
pinned: true,
54+
backgroundColor: theme.colorScheme.primaryContainer,
55+
foregroundColor: theme.colorScheme.onPrimaryContainer,
56+
title: Text(drink.name),
57+
actions: [
58+
IconButton(
59+
icon: const Icon(Icons.share),
60+
onPressed: () => _shareDrink(context, drink, provider.currentFestival),
61+
),
62+
IconButton(
63+
icon: Icon(
64+
drink.isFavorite ? Icons.favorite : Icons.favorite_border,
65+
),
66+
onPressed: () => provider.toggleFavorite(drink),
67+
),
68+
],
69+
flexibleSpace: FlexibleSpaceBar(
70+
background: SafeArea(
71+
child: _buildHeader(context, drink),
72+
),
73+
),
5274
),
53-
IconButton(
54-
icon: Icon(
55-
drink.isFavorite ? Icons.favorite : Icons.favorite_border,
75+
SliverToBoxAdapter(
76+
child: Column(
77+
crossAxisAlignment: CrossAxisAlignment.start,
78+
children: [
79+
_buildRatingSection(context, drink, provider),
80+
_buildInfoChips(context, drink),
81+
if (drink.notes != null) _buildDescription(context, drink),
82+
if (drink.allergenText != null) _buildAllergens(context, drink),
83+
_buildBrewerySection(context, drink, provider),
84+
],
5685
),
57-
onPressed: () => provider.toggleFavorite(drink),
5886
),
5987
],
6088
),
61-
body: SingleChildScrollView(
62-
child: Column(
63-
crossAxisAlignment: CrossAxisAlignment.start,
64-
children: [
65-
_buildHeader(context, drink),
66-
_buildRatingSection(context, drink, provider),
67-
_buildInfoChips(context, drink),
68-
if (drink.notes != null) _buildDescription(context, drink),
69-
if (drink.allergenText != null) _buildAllergens(context, drink),
70-
_buildBrewerySection(context, drink, provider),
71-
],
72-
),
73-
),
7489
);
7590
}
7691

@@ -158,6 +173,7 @@ class _DrinkDetailScreenState extends State<DrinkDetailScreen> {
158173
Padding(
159174
padding: const EdgeInsets.all(24),
160175
child: Column(
176+
mainAxisSize: MainAxisSize.min,
161177
crossAxisAlignment: CrossAxisAlignment.start,
162178
children: [
163179
Text(

lib/screens/style_screen.dart

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,19 @@ class _StyleScreenState extends State<StyleScreen> {
5050
final theme = Theme.of(context);
5151

5252
return Scaffold(
53-
appBar: AppBar(
54-
title: Text(widget.style),
55-
),
5653
body: CustomScrollView(
5754
slivers: [
58-
SliverToBoxAdapter(
59-
child: _buildHeader(context, widget.style, styleDrinks.length, avgAbv, mainCategory),
55+
SliverAppBar(
56+
expandedHeight: 220,
57+
pinned: true,
58+
backgroundColor: theme.colorScheme.primaryContainer,
59+
foregroundColor: theme.colorScheme.onPrimaryContainer,
60+
title: Text(widget.style),
61+
flexibleSpace: FlexibleSpaceBar(
62+
background: SafeArea(
63+
child: _buildHeader(context, widget.style, styleDrinks.length, avgAbv, mainCategory),
64+
),
65+
),
6066
),
6167
SliverToBoxAdapter(
6268
child: Padding(
@@ -157,6 +163,7 @@ class _StyleScreenState extends State<StyleScreen> {
157163
Padding(
158164
padding: const EdgeInsets.all(24),
159165
child: Column(
166+
mainAxisSize: MainAxisSize.min,
160167
crossAxisAlignment: CrossAxisAlignment.start,
161168
children: [
162169
Row(

test/drink_detail_screen_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ void main() {
9191
await tester.pumpWidget(createTestWidget('drink1'));
9292
await tester.pumpAndSettle();
9393

94-
expect(find.text('Test Beer'), findsOneWidget);
94+
expect(find.text('Test Beer'), findsNWidgets(2)); // Appears in app bar title and content
9595
expect(find.text('Test Brewery'), findsNWidgets(2)); // Appears in header and brewery section
9696
expect(find.text('Cambridge, UK'), findsNWidgets(2)); // Appears in header and brewery section
9797
});
@@ -295,7 +295,7 @@ void main() {
295295
await tester.pumpAndSettle();
296296

297297
// Verify the drink name is there but no description text
298-
expect(find.text('Simple Beer'), findsOneWidget);
298+
expect(find.text('Simple Beer'), findsWidgets);
299299
});
300300

301301
testWidgets('displays rating value when drink has rating',

0 commit comments

Comments
 (0)