branding added

This commit is contained in:
davmar
2026-09-18 00:16:49 +02:00
parent 78fd23f69f
commit c1bb355986
32 changed files with 342 additions and 287 deletions
-129
View File
@@ -1,129 +0,0 @@
/// Refine a single pile — promote / demote cards (Important Cards pattern).
library;
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../models/value_pile.dart';
import '../providers/values_sort_provider.dart';
import '../widgets/practice_chrome.dart';
import '../widgets/value_card_tile.dart';
import '../utils/app_theme.dart';
class PileReviewScreen extends StatelessWidget {
const PileReviewScreen({super.key});
@override
Widget build(BuildContext context) {
final sort = context.watch<ValuesSortController>();
final pile = sort.reviewPile ?? ValuePile.important;
final cards = sort.cardsInPile(pile);
final text = Theme.of(context).textTheme;
final colors = Theme.of(context).colorScheme;
return PracticeScaffold(
header: Padding(
padding: const EdgeInsets.fromLTRB(8, 4, 12, 0),
child: Row(
children: [
IconButton(
onPressed: sort.goToOverview,
icon: const Icon(Icons.arrow_back),
),
Expanded(
child: Text(
'Reviewing · ${pile.label}',
style: text.labelMedium,
),
),
],
),
),
footer: PrimaryPillButton(
label: 'Back to overview',
onPressed: sort.goToOverview,
),
child: ListView(
children: [
Text(pile.label, style: text.displaySmall),
const SizedBox(height: 6),
Text(
'${cards.length} values in this pile. Promote toward your core or demote when something feels less essential.',
style: text.bodyMedium,
),
const SizedBox(height: 12),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
children: ValuePile.values.map((p) {
return Padding(
padding: const EdgeInsets.only(right: 8),
child: ActionChip(
avatar: CircleAvatar(
backgroundColor: p.accent.withValues(alpha: 0.2),
radius: 8,
),
label: Text('${p.shortLabel} ${sort.countInPile(p)}'),
onPressed: () => sort.openPileReview(p),
backgroundColor: p == pile
? AppTheme.surfaceContainerHigh
: AppTheme.surfaceContainerLow,
),
);
}).toList(),
),
),
const SizedBox(height: 16),
if (cards.isEmpty)
Padding(
padding: const EdgeInsets.symmetric(vertical: 40),
child: Text(
'No cards in this pile yet.',
style: text.bodyLarge?.copyWith(color: colors.onSurfaceVariant),
textAlign: TextAlign.center,
),
)
else
...cards.map((card) {
return Padding(
padding: const EdgeInsets.only(bottom: 12),
child: ValueCardTile(
card: card,
compact: true,
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
tooltip: 'Promote',
onPressed: () => _shift(sort, card.id, pile, up: true),
icon: const Icon(Icons.arrow_upward),
),
IconButton(
tooltip: 'Demote',
onPressed: () =>
_shift(sort, card.id, pile, up: false),
icon: const Icon(Icons.arrow_downward),
),
],
),
),
);
}),
],
),
);
}
void _shift(
ValuesSortController sort,
String id,
ValuePile current, {
required bool up,
}) {
final values = ValuePile.values;
final index = values.indexOf(current);
final next = up ? index - 1 : index + 1;
if (next < 0 || next >= values.length) return;
sort.moveCard(id, values[next]);
}
}
-2
View File
@@ -6,7 +6,6 @@ import 'package:provider/provider.dart';
import '../providers/values_sort_provider.dart';
import 'card_sorting_screen.dart';
import 'pile_review_screen.dart';
import 'practice_hub_screen.dart';
import 'rank_order_screen.dart';
import 'reflection_screen.dart';
@@ -56,7 +55,6 @@ class PracticeFlowScreen extends StatelessWidget {
SortStage.sorting => const CardSortingScreen(),
SortStage.hub => const PracticeHubScreen(),
SortStage.overview => const SortedOverviewScreen(),
SortStage.pileReview => const PileReviewScreen(),
SortStage.ranking => const RankOrderScreen(),
SortStage.reflection => const ReflectionScreen(),
},
-8
View File
@@ -135,14 +135,6 @@ class RankOrderScreen extends StatelessWidget {
color: colors.onSurfaceVariant,
),
),
const SizedBox(height: 4),
Text(
'Pillar: ${card.domain}',
style: text.labelSmall?.copyWith(
color: colors.onSurfaceVariant,
),
),
],
),
),
+2 -10
View File
@@ -1,4 +1,4 @@
/// Bird's-eye overview of all five piles with demote / refine actions.
/// Bird's-eye overview of all five piles with reorder actions.
library;
import 'package:flutter/material.dart';
@@ -25,7 +25,6 @@ class _SortedOverviewScreenState extends State<SortedOverviewScreen> {
Widget build(BuildContext context) {
final sort = context.watch<ValuesSortController>();
final text = Theme.of(context).textTheme;
final colors = Theme.of(context).colorScheme;
return PracticeScaffold(
header: Padding(
@@ -47,8 +46,6 @@ class _SortedOverviewScreenState extends State<SortedOverviewScreen> {
),
child: ListView(
children: [
Text('All Sorted Values', style: text.displaySmall),
const SizedBox(height: 16),
TextField(
onChanged: (v) => setState(() => _query = v.trim().toLowerCase()),
decoration: const InputDecoration(
@@ -93,12 +90,7 @@ class _SortedOverviewScreenState extends State<SortedOverviewScreen> {
onDemote: (card) => _showDemoteSheet(context, sort, card),
);
}),
const SizedBox(height: 12),
Text(
'Tip: refine any pile before ranking your core values.',
style: text.bodySmall?.copyWith(color: colors.onSurfaceVariant),
textAlign: TextAlign.center,
),
const SizedBox(height: 8),
],
),
);
+10 -6
View File
@@ -89,20 +89,24 @@ class _SplashScreenState extends State<SplashScreen>
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
ClipOval(
ClipRRect(
borderRadius: BorderRadius.circular(22),
child: Image.asset(
'assets/images/emblem.png',
'assets/images/app_icon.png',
width: 88,
height: 88,
fit: BoxFit.cover,
errorBuilder: (_, _, _) => Container(
width: 88,
height: 88,
color: colors.primaryContainer,
child: const Icon(
Icons.spa,
decoration: BoxDecoration(
color: colors.primaryContainer,
borderRadius: BorderRadius.circular(22),
),
child: Icon(
Icons.explore,
size: 44,
color: Colors.white,
color: colors.onPrimary,
),
),
),
+6 -7
View File
@@ -5,7 +5,6 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../providers/values_sort_provider.dart';
import '../utils/app_theme.dart';
import '../widgets/practice_chrome.dart';
class WelcomeScreen extends StatelessWidget {
@@ -136,9 +135,9 @@ class WelcomeScreen extends StatelessWidget {
Container(
padding: const EdgeInsets.all(14),
decoration: BoxDecoration(
color: AppTheme.surfaceContainerLow,
color: colors.surfaceContainerLow,
borderRadius: BorderRadius.circular(16),
border: Border.all(color: AppTheme.outlineVariant),
border: Border.all(color: colors.outlineVariant),
),
child: Row(
children: [
@@ -214,7 +213,7 @@ class _GuideStep extends StatelessWidget {
children: [
CircleAvatar(
radius: 12,
backgroundColor: AppTheme.surfaceContainerHigh,
backgroundColor: colors.surfaceContainerHigh,
child: Text(
'$index',
style: text.labelMedium?.copyWith(
@@ -266,12 +265,12 @@ class _CardFan extends StatelessWidget {
height: hero ? 155 : 135,
padding: const EdgeInsets.all(14),
decoration: BoxDecoration(
color: hero ? Colors.white : AppTheme.surfaceContainer,
color: hero ? colors.surface : colors.surfaceContainer,
borderRadius: BorderRadius.circular(20),
border: Border.all(color: AppTheme.outlineVariant),
border: Border.all(color: colors.outlineVariant),
boxShadow: [
BoxShadow(
color: const Color(0x142C2825),
color: colors.shadow.withValues(alpha: 0.08),
blurRadius: hero ? 16 : 8,
offset: const Offset(0, 4),
),