Files
dailyou/lib/core/providers/activity_provider.dart
T
stefwill 33d1713f51 feat: set up Flutter project with drift database, Riverpod providers, and LLM service layer
- Configure dependencies: drift 2.32.x, flutter_riverpod 3.3.1, fl_chart 1.2.x,
  flutter_local_notifications 21.x, local_auth 3.x, and supporting packages
- Drop riverpod_generator (incompatible analyzer version with drift_dev 2.32.x);
  convert all providers to manual Riverpod 3.x API using Notifier<T> and typed families
- Define drift schema: MoodEntries, Activities, EntryActivities, Tags, EntryTags,
  LlmInsights, UserSettings with four DAOs (mood, activity, insight, settings)
- Add LLM service abstraction (LlmService) and MediaPipe implementation
- Fix SettingsDao.delete → deleteByKey to avoid shadowing drift's inherited delete method
2026-04-26 10:39:51 +10:00

76 lines
2.5 KiB
Dart

import 'package:drift/drift.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../database/app_database.dart';
import 'database_provider.dart';
// ── All activities stream ─────────────────────────────────────────────────────
final activitiesProvider = StreamProvider.autoDispose<List<Activity>>((ref) {
return ref.watch(activityDaoProvider).watchAllActivities();
});
// ── Activity frequency for charts ────────────────────────────────────────────
final activityFrequencyProvider = FutureProvider.autoDispose
.family<Map<int, int>, ({DateTime start, DateTime end})>(
(ref, range) =>
ref.watch(activityDaoProvider).getActivityFrequency(range.start, range.end),
);
// ── Selected activities (used by log mood screen) ─────────────────────────────
class SelectedActivities extends Notifier<Set<int>> {
@override
Set<int> build() => {};
void toggle(int activityId) {
if (state.contains(activityId)) {
state = <int>{...state}..remove(activityId);
} else {
state = {...state, activityId};
}
}
void clear() => state = {};
}
final selectedActivitiesProvider =
NotifierProvider.autoDispose<SelectedActivities, Set<int>>(
SelectedActivities.new);
// ── Activity notifier (create / delete custom activities) ─────────────────────
class ActivityNotifier extends Notifier<AsyncValue<void>> {
@override
AsyncValue<void> build() => const AsyncData(null);
Future<void> addActivity({
required String name,
required int iconCodepoint,
required String colourHex,
}) async {
state = const AsyncLoading();
state = await AsyncValue.guard(
() => ref.read(activityDaoProvider).insertActivity(
ActivitiesCompanion.insert(
name: name,
iconCodepoint: iconCodepoint,
colourHex: colourHex,
isCustom: const Value(true),
),
),
);
}
Future<void> deleteActivity(int id) async {
state = const AsyncLoading();
state = await AsyncValue.guard(
() => ref.read(activityDaoProvider).deleteActivity(id),
);
}
}
final activityNotifierProvider =
NotifierProvider.autoDispose<ActivityNotifier, AsyncValue<void>>(
ActivityNotifier.new);