fix(programmer): move clock ticker watch to dashboard parent

NowWorkingCard was watching clockTickerProvider but received pre-computed
Duration values from ProgrammerDashboard, which never rebuilt on ticks.
Move ref.watch(clockTickerProvider) to ProgrammerDashboard.build() so
the parent rebuilds every 30 s and passes fresh durations to the card.
Remove the now-unused clockTickerProvider watch (and its import) from
NowWorkingCard.

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
2026-09-27 21:59:01 +08:00
parent 29bcbcaa4d
commit 9a40ffec81
2 changed files with 3 additions and 4 deletions
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../models/programmer_task.model.dart';
import '../../../providers/programmer_day_data_provider.dart';
import '../../../providers/programmer_tasks_provider.dart';
import '../../../utils/programmer_task_ledger.dart';
import '../../../widgets/m3_card.dart';
@@ -37,9 +36,6 @@ class NowWorkingCard extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
// Subscribe to the clock so durations re-render every 30 s.
ref.watch(clockTickerProvider);
return M3Card.elevated(
child: Padding(
padding: const EdgeInsets.all(16),
@@ -24,6 +24,9 @@ class ProgrammerDashboard extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
// Drive 30-second rebuilds so duration values stay fresh.
ref.watch(clockTickerProvider);
final tasksAsync = ref.watch(programmerTasksProvider);
final runStates = ref.watch(programmerRunStatesProvider);
final todayKey = ref.watch(todayKeyProvider);