Files
MrbWebLibre/app/lib/features/topics/domain/providers.dart
T
2024-08-21 13:36:58 +02:00

66 lines
1.6 KiB
Dart

import 'dart:ui';
import 'package:collection/collection.dart';
import 'package:lensai/features/topics/data/database/database.dart';
import 'package:lensai/features/topics/domain/repositories/topic.dart';
import 'package:lensai/features/topics/utils/color_palette.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'providers.g.dart';
@Riverpod()
Stream<List<TopicData>> topicList(TopicListRef ref) {
final repository = ref.watch(topicRepositoryProvider.notifier);
return repository.watchTopics();
}
@Riverpod(keepAlive: true)
class SelectedTopic extends _$SelectedTopic {
void setTopic(String id) {
state = id;
}
void toggleTopic(String id) {
if (state == id) {
clearTopic();
} else {
setTopic(id);
}
}
void clearTopic() {
state = null;
}
@override
String? build() {
return null;
}
}
@Riverpod()
Stream<TopicData?> selectedTopicData(SelectedTopicDataRef ref) {
final repository = ref.watch(topicRepositoryProvider.notifier);
final selectedBangTrigger = ref.watch(selectedTopicProvider);
return repository.watchTopic(selectedBangTrigger);
}
@Riverpod()
Future<Set<Color>> distinctTopicColors(DistinctTopicColorsRef ref) {
final repository = ref.watch(topicRepositoryProvider.notifier);
return repository.getDistinctColors();
}
@Riverpod()
Future<Color> unusedRandomTopicColor(UnusedRandomTopicColorRef ref) async {
final allColors = colorTypes.flattened.toList();
final usedColors = await ref.read(distinctTopicColorsProvider.future);
Color randomColor;
do {
randomColor = randomColorShade(allColors);
} while (usedColors.contains(randomColor));
return randomColor;
}