Switch to Inter, round the corners softly and make the nav switch tabs

Inter replaces General Sans (Inter Display for titles and big numbers).
Corners come back from before the squaring commit, scaled to a soft set
(16 cards, 14 buttons, 12 rows, 8 chips) and applied to the screens built
since. The nav is now a cluster of round frosted buttons that switches
Today, Routines, Goals, Groups and Progress in place inside Home: no
pushed pages, no back arrows, and Android back returns to Today.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KhQh614DMeYoQEH9SoMRUw
This commit is contained in:
alvocool
2026-11-09 07:08:46 +03:00
parent add94f621c
commit d3431ca5de
54 changed files with 736 additions and 518 deletions

View File

@@ -81,6 +81,10 @@ class HomeState extends State<Home> implements ConnectHome {
bool _weekly = false;
/// The open tab, and the tabs built so far.
int _tab = 0;
final Set<int> _opened = <int>{0};
Standing _standing = Standing.Good;
@@ -183,28 +187,14 @@ class HomeState extends State<Home> implements ConnectHome {
_model?.tick(item);
}
void _onOpenProgress() {
GroundedNavigation().navigateToPageWithData(const Progress(), context);
}
void _onOpenReportCard() {
GroundedNavigation().navigateToPage(
NavigatorType.justOpen, const ReportCardScreen(), context);
}
void _onOpenGoals() async {
final result = await GroundedNavigation()
.navigateToPageWithData(const Goals(), context);
void _onOpenGoals() => _onNavGoals();
if (result == true) {
_model?.loadPlan();
}
}
void _onOpenGroups() async {
await GroundedNavigation().navigateToPageWithData(const Groups(), context);
_model?.loadGroups();
}
void _onOpenGroups() => _onNavGroups();
void _onOpenGroupChat(Group group) async {
await GroundedNavigation()
@@ -224,11 +214,7 @@ class HomeState extends State<Home> implements ConnectHome {
.navigateToPage(NavigatorType.justOpen, const Training(), context);
}
void _onOpenRoutines() async {
await GroundedNavigation()
.navigateToPageWithData(const Routines(), context);
_model?.loadRoutines();
}
void _onOpenRoutines() => _onNavRoutines();
void _onOpenKind(RoutineKind kind) async {
await GroundedNavigation()
@@ -260,7 +246,39 @@ class HomeState extends State<Home> implements ConnectHome {
.navigateToPage(NavigatorType.justOpen, const ExcuseReport(), context);
}
void _onNavToday() {}
/// The nav switches tabs in place; nothing is pushed. A tab is built the
/// first time it is opened and then kept, so it holds its scroll and data.
void _onSelectTab(int index) {
if (index == _tab) {
return;
}
setState(() {
_tab = index;
_opened.add(index);
});
// Back on Today: pick up whatever changed in the other tabs.
if (index == 0) {
_model?.loadRoutines();
_model?.loadGroups();
}
}
void _onNavToday() => _onSelectTab(0);
void _onNavRoutines() => _onSelectTab(1);
void _onNavGoals() => _onSelectTab(2);
void _onNavGroups() => _onSelectTab(3);
void _onNavProgress() => _onSelectTab(4);
void _onBackToToday(bool didPop, Object? result) {
if (!didPop) {
_onSelectTab(0);
}
}
void _onShowToday() {
setState(() {
@@ -288,9 +306,9 @@ class HomeState extends State<Home> implements ConnectHome {
return FadeTransition(
opacity: curve,
child: SlideTransition(
position: Tween<Offset>(
begin: const Offset(0, 0.12), end: Offset.zero)
.animate(curve),
position:
Tween<Offset>(begin: const Offset(0, 0.12), end: Offset.zero)
.animate(curve),
child: child,
),
);
@@ -389,85 +407,112 @@ class HomeState extends State<Home> implements ConnectHome {
final bool queueIsHome =
StandingEngine.showsOverdueQueueAsHome(_standing) && !_distressed;
return AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle.light,
child: Scaffold(
backgroundColor: colorAmbientMid,
body: AmbientBackground(
child: Stack(
children: [
SingleChildScrollView(
padding: const EdgeInsets.only(bottom: 130),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min,
children: [
_header(),
Padding(
padding: const EdgeInsets.fromLTRB(20, 24, 20, 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min,
children: [
if (_distressed)
_frosted(_distressBody())
else if (queueIsHome)
_frosted(_groundedBody())
else
_planBody(),
],
),
),
// Back on another tab returns to Today rather than leaving the app.
return PopScope(
canPop: _tab == 0,
onPopInvokedWithResult: _onBackToToday,
child: AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle.light,
child: Scaffold(
backgroundColor: colorAmbientMid,
body: AmbientBackground(
child: Stack(
children: [
IndexedStack(
index: _tab,
children: <Widget>[
_todayView(queueIsHome),
_opened.contains(1)
? const Routines(tab: true)
: const SizedBox.shrink(),
_opened.contains(2)
? const Goals(tab: true)
: const SizedBox.shrink(),
_opened.contains(3)
? const Groups(tab: true)
: const SizedBox.shrink(),
_opened.contains(4)
? const Progress(tab: true)
: const SizedBox.shrink(),
],
),
),
Positioned(
left: 0,
right: 0,
bottom: 0,
child: FloatingNav(
selected: 0,
entries: <NavEntry>[
(
icon: CupertinoIcons.house_fill,
label: "Today",
onTap: _onNavToday
),
(
icon: CupertinoIcons.square_stack_3d_up_fill,
label: "Routines",
onTap: _onOpenRoutines
),
(
icon: CupertinoIcons.flag_fill,
label: "Goals",
onTap: _onOpenGoals
),
(
icon: CupertinoIcons.person_3_fill,
label: "Groups",
onTap: _onOpenGroups
),
(
icon: CupertinoIcons.chart_bar_alt_fill,
label: "Progress",
onTap: _onOpenProgress
),
],
).animate().fadeIn(duration: 400.ms, delay: 250.ms).slideY(
begin: 0.4,
end: 0,
duration: 500.ms,
delay: 250.ms,
curve: Curves.easeOutCubic),
),
],
Positioned(
left: 0,
right: 0,
bottom: 0,
child: FloatingNav(
selected: _tab,
entries: <NavEntry>[
(
icon: CupertinoIcons.house_fill,
label: "Today",
onTap: _onNavToday
),
(
icon: CupertinoIcons.square_stack_3d_up_fill,
label: "Routines",
onTap: _onNavRoutines
),
(
icon: CupertinoIcons.flag_fill,
label: "Goals",
onTap: _onNavGoals
),
(
icon: CupertinoIcons.person_3_fill,
label: "Groups",
onTap: _onNavGroups
),
(
icon: CupertinoIcons.chart_bar_alt_fill,
label: "Progress",
onTap: _onNavProgress
),
],
).animate().fadeIn(duration: 400.ms, delay: 250.ms).slideY(
begin: 0.4,
end: 0,
duration: 500.ms,
delay: 250.ms,
curve: Curves.easeOutCubic),
),
],
),
),
),
),
);
}
/// The Today tab: the forest header and the day under it.
Widget _todayView(bool queueIsHome) {
return SingleChildScrollView(
padding: const EdgeInsets.only(bottom: 130),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min,
children: [
_header(),
Padding(
padding: const EdgeInsets.fromLTRB(20, 24, 20, 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min,
children: [
if (_distressed)
_frosted(_distressBody())
else if (queueIsHome)
_frosted(_groundedBody())
else
_planBody(),
],
),
),
],
),
);
}
// ── Header ────────────────────────────────────────────────────────────────
/// The deep forest block: who you are, the week as a streak, and the day
@@ -475,6 +520,7 @@ class HomeState extends State<Home> implements ConnectHome {
Widget _header() {
return Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.vertical(bottom: Radius.circular(20)),
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
@@ -568,6 +614,7 @@ class HomeState extends State<Home> implements ConnectHome {
return Container(
padding: const EdgeInsets.all(4),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12)),
color: colorHeaderPanel,
border: Border.all(color: colorHeaderLine),
),
@@ -589,7 +636,12 @@ class HomeState extends State<Home> implements ConnectHome {
curve: Curves.easeOutCubic,
padding: const EdgeInsets.symmetric(vertical: 13),
alignment: Alignment.center,
color: active ? colorHeaderSelected : colorHeaderSelected.withValues(alpha: 0),
decoration: BoxDecoration(
color: active
? colorHeaderSelected
: colorHeaderSelected.withValues(alpha: 0),
borderRadius: BorderRadius.all(Radius.circular(12)),
),
child: text(label, 16, active ? TextType.Medium : TextType.Regular,
color: active ? colorWhite : colorHeaderMuted),
),
@@ -603,12 +655,19 @@ class HomeState extends State<Home> implements ConnectHome {
final DateTime first = DateTime(now.year, now.month, now.day)
.subtract(const Duration(days: 6));
const List<String> days = <String>[
"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat",
"Sun"
];
return Container(
padding: const EdgeInsets.fromLTRB(18, 16, 18, 18),
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12)),
color: colorHeaderPanel,
border: Border.all(color: colorHeaderLine),
),
@@ -621,8 +680,7 @@ class HomeState extends State<Home> implements ConnectHome {
children: [
text("${_streak()}", 28, TextType.Medium, color: colorWhite),
const SizedBox(width: 8),
text("day streak", 16, TextType.Regular,
color: colorHeaderMuted),
text("day streak", 16, TextType.Regular, color: colorHeaderMuted),
const Spacer(),
Icon(Icons.eco, size: 32, color: colorLime),
],
@@ -733,10 +791,10 @@ class HomeState extends State<Home> implements ConnectHome {
/// The week in numbers: the average kept, a bar per day, and the classes.
Widget _weeklyNumbers() {
final Map<int, double> byDay = _week?.completionByWeekday ?? <int, double>{};
final double average = byDay.isEmpty
? 0
: byDay.values.reduce((a, b) => a + b) / byDay.length;
final Map<int, double> byDay =
_week?.completionByWeekday ?? <int, double>{};
final double average =
byDay.isEmpty ? 0 : byDay.values.reduce((a, b) => a + b) / byDay.length;
const List<String> letters = <String>["M", "T", "W", "T", "F", "S", "S"];
final DateTime now = DateTime.now();
final List<int> order = <int>[
@@ -781,12 +839,17 @@ class HomeState extends State<Home> implements ConnectHome {
duration: const Duration(milliseconds: 400),
curve: Curves.easeOutCubic,
height: 90 * (byDay[day] ?? 0).clamp(0.04, 1.0),
color: (byDay[day] ?? 0) >= _keptFloor
? colorBarElective
: colorHeaderLine,
decoration: BoxDecoration(
color: (byDay[day] ?? 0) >= _keptFloor
? colorBarElective
: colorHeaderLine,
borderRadius: BorderRadius.all(Radius.circular(12)),
),
),
const SizedBox(height: 8),
text(letters[day - 1], 13,
text(
letters[day - 1],
13,
day == now.weekday
? TextType.Medium
: TextType.Regular,
@@ -834,7 +897,9 @@ class HomeState extends State<Home> implements ConnectHome {
return Container(
width: 74,
height: 74,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(Radius.circular(16)),
border: Border.all(color: colorWhite, width: 2),
),
child: Opacity(
@@ -899,7 +964,10 @@ class HomeState extends State<Home> implements ConnectHome {
const SizedBox(height: 9),
Container(
height: 7,
color: colorHeaderLine,
decoration: BoxDecoration(
color: colorHeaderLine,
borderRadius: BorderRadius.all(Radius.circular(12)),
),
alignment: Alignment.centerLeft,
child: FractionallySizedBox(
widthFactor: fraction.clamp(0.0, 1.0),
@@ -978,23 +1046,29 @@ class HomeState extends State<Home> implements ConnectHome {
child: Container(
width: 54,
height: 54,
color: colorWhite,
decoration: BoxDecoration(
color: colorWhite,
borderRadius: BorderRadius.all(Radius.circular(12)),
),
child: Icon(CupertinoIcons.xmark, size: 22, color: colorInk),
),
),
const SizedBox(height: 16),
Container(
width: double.infinity,
color: colorWhite,
padding: EdgeInsets.fromLTRB(
18, 14, 18, MediaQuery.of(sheetContext).padding.bottom + 22),
decoration: BoxDecoration(
color: colorWhite,
borderRadius: BorderRadius.all(Radius.circular(12)),
),
padding: EdgeInsets.fromLTRB(18, 14, 18,
MediaQuery.of(sheetContext).padding.bottom + 22),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.min,
children: [
Center(
child: Container(
width: 40, height: 4, color: colorGrabber),
child:
Container(width: 40, height: 4, color: colorGrabber),
),
const SizedBox(height: 18),
text("Add to today", 24, TextType.Medium,
@@ -1023,12 +1097,12 @@ class HomeState extends State<Home> implements ConnectHome {
"Must-do", _onAddPickMustDo)),
const SizedBox(width: 10),
Expanded(
child: _addTile(CupertinoIcons.flag,
"Goal", _onAddPickGoal)),
child: _addTile(
CupertinoIcons.flag, "Goal", _onAddPickGoal)),
const SizedBox(width: 10),
Expanded(
child: _addTile(CupertinoIcons.person_3,
"Group", _onAddPickGroup)),
child: _addTile(CupertinoIcons.person_3, "Group",
_onAddPickGroup)),
],
),
const SizedBox(height: 10),
@@ -1049,7 +1123,10 @@ class HomeState extends State<Home> implements ConnectHome {
onTap: onTap,
child: Container(
padding: const EdgeInsets.symmetric(vertical: 22),
color: colorAmbientMid,
decoration: BoxDecoration(
color: colorAmbientMid,
borderRadius: BorderRadius.all(Radius.circular(12)),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
@@ -1067,7 +1144,10 @@ class HomeState extends State<Home> implements ConnectHome {
onTap: onTap,
child: Container(
padding: const EdgeInsets.symmetric(vertical: 22),
color: colorAmbientMid,
decoration: BoxDecoration(
color: colorAmbientMid,
borderRadius: BorderRadius.all(Radius.circular(12)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
@@ -1093,7 +1173,9 @@ class HomeState extends State<Home> implements ConnectHome {
return Container(
width: size,
height: size,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: colorWhite, width: 2),
),
child: Stack(
@@ -1101,8 +1183,8 @@ class HomeState extends State<Home> implements ConnectHome {
children: [
SceneArt(palette: sceneWorkout, seed: sceneSeed(_user.name)),
Center(
child: text(initial, size * 0.4, TextType.Medium,
color: colorWhite),
child:
text(initial, size * 0.4, TextType.Medium, color: colorWhite),
),
],
),
@@ -1195,7 +1277,7 @@ class HomeState extends State<Home> implements ConnectHome {
padding: const EdgeInsets.fromLTRB(20, 24, 20, 24),
decoration: BoxDecoration(
color: colorFrost,
borderRadius: BorderRadius.zero,
borderRadius: BorderRadius.all(Radius.circular(16)),
border: Border.all(color: colorGlassBorder),
),
child: child,
@@ -1300,12 +1382,12 @@ class HomeState extends State<Home> implements ConnectHome {
children: [
_category(sceneWorkout, kindIcon(RoutineKind.Workout), "Workout", 3,
() => _onOpenKind(RoutineKind.Workout)),
_category(sceneMeditation, kindIcon(RoutineKind.Meditation),
"Meditate", 5, () => _onOpenKind(RoutineKind.Meditation)),
_category(sceneMeditation, kindIcon(RoutineKind.Meditation), "Meditate",
5, () => _onOpenKind(RoutineKind.Meditation)),
_category(sceneMustDo, kindIcon(RoutineKind.MustDo), "Must-do", 8,
() => _onOpenKind(RoutineKind.MustDo)),
_category(goalScene(goalAccents[4]), CupertinoIcons.flag_fill,
"Goals", 13, _onOpenGoals),
_category(goalScene(goalAccents[4]), CupertinoIcons.flag_fill, "Goals",
13, _onOpenGoals),
_category(goalScene(goalAccents[2]), CupertinoIcons.flame_fill,
"Training", 21, _onOpenTraining),
],
@@ -1324,6 +1406,7 @@ class HomeState extends State<Home> implements ConnectHome {
width: 74,
height: 74,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: colorWhite, width: 2.5),
boxShadow: const [
BoxShadow(
@@ -1333,7 +1416,7 @@ class HomeState extends State<Home> implements ConnectHome {
),
],
),
child: ClipRect(
child: ClipOval(
child: SceneArt(
palette: palette,
seed: seed,
@@ -1376,7 +1459,7 @@ class HomeState extends State<Home> implements ConnectHome {
child: Container(
width: 244,
decoration: BoxDecoration(
borderRadius: BorderRadius.zero,
borderRadius: BorderRadius.all(Radius.circular(16)),
boxShadow: const [
BoxShadow(
color: Color(0x262A3A30),
@@ -1386,7 +1469,7 @@ class HomeState extends State<Home> implements ConnectHome {
],
),
child: ClipRRect(
borderRadius: BorderRadius.zero,
borderRadius: BorderRadius.all(Radius.circular(16)),
child: Stack(
fit: StackFit.expand,
children: [
@@ -1407,7 +1490,7 @@ class HomeState extends State<Home> implements ConnectHome {
children: [
GlassSurface(
onDark: true,
radius: BorderRadius.zero,
radius: BorderRadius.all(Radius.circular(14)),
padding: const EdgeInsets.symmetric(
horizontal: 10, vertical: 5),
child: text(
@@ -1515,7 +1598,9 @@ class HomeState extends State<Home> implements ConnectHome {
onTap: () => _onOpenGroupChat(group),
child: Container(
width: 250,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12)),
color: colorWhite,
boxShadow: const [
BoxShadow(
@@ -1550,9 +1635,13 @@ class HomeState extends State<Home> implements ConnectHome {
Container(
padding: const EdgeInsets.symmetric(
horizontal: 8, vertical: 4),
color: colorLime,
child: text("${group.unread} new", 10,
TextType.Medium,
decoration: BoxDecoration(
color: colorLime,
borderRadius:
BorderRadius.all(Radius.circular(12)),
),
child: text(
"${group.unread} new", 10, TextType.Medium,
color: colorNight),
),
const Spacer(),
@@ -1618,9 +1707,8 @@ class HomeState extends State<Home> implements ConnectHome {
sectionBreak(
"To-do",
caption: "${open.length} open, no debt",
trailing: done.isEmpty
? null
: _viewAll("Clear done", _onClearDoneTodos),
trailing:
done.isEmpty ? null : _viewAll("Clear done", _onClearDoneTodos),
),
GlassSurface(
tint: colorGlassStrong,
@@ -1645,7 +1733,10 @@ class HomeState extends State<Home> implements ConnectHome {
child: Container(
width: 48,
height: 48,
color: colorNight,
decoration: BoxDecoration(
color: colorNight,
borderRadius: BorderRadius.all(Radius.circular(12)),
),
alignment: Alignment.center,
child: Icon(CupertinoIcons.add,
size: 22, color: colorLime),
@@ -1691,6 +1782,7 @@ class HomeState extends State<Home> implements ConnectHome {
width: 30,
height: 30,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(8)),
color: item.done ? colorPrimary : colorWhite,
border: Border.all(
color: item.done
@@ -1794,11 +1886,14 @@ class HomeState extends State<Home> implements ConnectHome {
"Your standing will recover as the debt decays.",
)
else
..._overdue.take(_standing == Standing.Lockdown ? 1 : _overdue.length)
..._overdue
.take(_standing == Standing.Lockdown ? 1 : _overdue.length)
.map(_commitmentRow),
const SizedBox(height: 24),
roundedCornerButton(
_standing == Standing.Lockdown ? "Deal with this one" : "Open the queue",
_standing == Standing.Lockdown
? "Deal with this one"
: "Open the queue",
_onOpenOverdue,
background: standingColor(_standing),
icon: CupertinoIcons.arrow_right,
@@ -1853,8 +1948,8 @@ class HomeState extends State<Home> implements ConnectHome {
const SizedBox(height: 24),
sectionBreak("Three things", caption: "that actually matter"),
..._plan
.where((item) =>
item.commitmentClass == CommitmentClass.NonNegotiable)
.where(
(item) => item.commitmentClass == CommitmentClass.NonNegotiable)
.take(3)
.map(_commitmentRow),
const SizedBox(height: 24),
@@ -1871,7 +1966,7 @@ class HomeState extends State<Home> implements ConnectHome {
onTap: _onOpenOverdue,
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.zero,
borderRadius: BorderRadius.all(Radius.circular(16)),
gradient: const LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
@@ -1894,6 +1989,7 @@ class HomeState extends State<Home> implements ConnectHome {
height: 58,
alignment: Alignment.center,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: const RadialGradient(
center: Alignment(-0.3, -0.4),
colors: <Color>[colorOverdueGlow, colorStandingGrounded],
@@ -1943,7 +2039,7 @@ class HomeState extends State<Home> implements ConnectHome {
child: Container(
padding: const EdgeInsets.fromLTRB(22, 22, 22, 24),
decoration: BoxDecoration(
borderRadius: BorderRadius.zero,
borderRadius: BorderRadius.all(Radius.circular(16)),
gradient: const LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
@@ -1967,8 +2063,7 @@ class HomeState extends State<Home> implements ConnectHome {
const SizedBox(width: 6),
text("Pattern spotted", 12, TextType.Medium, color: colorLime),
const Spacer(),
text("${cluster.occurrences}× this month", 11,
TextType.Regular,
text("${cluster.occurrences}× this month", 11, TextType.Regular,
color: colorWhite.withValues(alpha: 0.5)),
],
),
@@ -2017,7 +2112,7 @@ class HomeState extends State<Home> implements ConnectHome {
width: 88,
height: 88,
child: ClipRRect(
borderRadius: BorderRadius.zero,
borderRadius: BorderRadius.all(Radius.circular(12)),
child: Opacity(
opacity: ticked ? 0.45 : 1,
child: SceneArt(
@@ -2059,8 +2154,7 @@ class HomeState extends State<Home> implements ConnectHome {
const SizedBox(height: 5),
Row(
children: [
Icon(CupertinoIcons.clock, size: 11,
color: colorInkSoft),
Icon(CupertinoIcons.clock, size: 11, color: colorInkSoft),
const SizedBox(width: 4),
Flexible(
child: text(formatWindow(item), 11, TextType.Regular,
@@ -2069,11 +2163,9 @@ class HomeState extends State<Home> implements ConnectHome {
overflow: TextOverflow.ellipsis),
),
const SizedBox(width: 10),
Icon(CupertinoIcons.timer, size: 11,
color: colorInkSoft),
Icon(CupertinoIcons.timer, size: 11, color: colorInkSoft),
const SizedBox(width: 4),
text(formatMinutes(item.estMinutes), 11,
TextType.Regular,
text(formatMinutes(item.estMinutes), 11, TextType.Regular,
color: colorInkSoft),
],
),
@@ -2101,6 +2193,7 @@ class HomeState extends State<Home> implements ConnectHome {
width: 44,
height: 44,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: checked ? colorPrimary : colorWhite,
border: Border.all(
color: checked ? colorPrimary : accent.withValues(alpha: 0.35),