getRandomStudio method
Implementation
Future<Studio?> getRandomStudio({
bool useCurrentFilter = false,
String? excludeStudioId,
}) async {
final repository = ref.read(studioRepositoryProvider);
final query = useCurrentFilter ? ref.read(studioSearchQueryProvider) : '';
final favoritesOnly = useCurrentFilter
? ref.read(studioFavoritesOnlyProvider)
: false;
final attempts = excludeStudioId == null ? 1 : 3;
for (var i = 0; i < attempts; i++) {
final randomPage = await repository.findStudios(
page: 1,
perPage: 1,
filter: query.isEmpty ? null : query,
sort: 'random',
descending: true,
favoritesOnly: favoritesOnly,
);
if (randomPage.isEmpty) continue;
final candidate = randomPage.first;
if (excludeStudioId == null || candidate.id != excludeStudioId) {
return candidate;
}
}
final loaded = state.asData?.value;
if (loaded != null && loaded.isNotEmpty) {
final candidates = excludeStudioId == null
? loaded
: loaded.where((studio) => studio.id != excludeStudioId).toList();
if (candidates.isEmpty) return null;
final random = Random();
return candidates[random.nextInt(candidates.length)];
}
return null;
}