feat: start at Season 1, add menu/season_001 BGM tracks, settings build tag
- activeSeason now returns the first season (Season 1 'First Bloom') so a new player starts at spring instead of the newest season. - Bundle the owner-picked CC0 tracks menu.mp3 + season_001.mp3 (BGM now audible). - Settings footer shows 'v1.0.0 (build 3)' so test builds are identifiable. 180 tests green, analyze clean.
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -76,9 +76,12 @@ final seasonRefreshProvider = FutureProvider<bool>(
|
|||||||
(ref) => ref.read(contentRepositoryProvider).refresh(),
|
(ref) => ref.read(contentRepositoryProvider).refresh(),
|
||||||
);
|
);
|
||||||
|
|
||||||
/// The season players land in by default: the newest available.
|
/// The season players land in by default: Season 1, the start of the journey,
|
||||||
/// (availableSeasons is sorted by seasonId ascending.)
|
/// so a new player experiences the content in order rather than being dropped
|
||||||
SeasonPack activeSeason(List<SeasonPack> seasons) => seasons.last;
|
/// into the newest season. (availableSeasons is sorted by seasonId ascending,
|
||||||
|
/// so `.first` is Season 1.) A season selector to reach later seasons is a
|
||||||
|
/// planned follow-up.
|
||||||
|
SeasonPack activeSeason(List<SeasonPack> seasons) => seasons.first;
|
||||||
|
|
||||||
final streakProvider = NotifierProvider<StreakNotifier, StreakState>(
|
final streakProvider = NotifierProvider<StreakNotifier, StreakState>(
|
||||||
StreakNotifier.new,
|
StreakNotifier.new,
|
||||||
|
|||||||
@@ -76,6 +76,16 @@ class SettingsScreen extends ConsumerWidget {
|
|||||||
title: Text(l10n.restorePurchases),
|
title: Text(l10n.restorePurchases),
|
||||||
onTap: () => iap.restorePurchases(),
|
onTap: () => iap.restorePurchases(),
|
||||||
),
|
),
|
||||||
|
const SizedBox(height: 24),
|
||||||
|
Center(
|
||||||
|
child: Text(
|
||||||
|
'Block Seasons · v1.0.0 (build 3)',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white.withValues(alpha: 0.4),
|
||||||
|
fontSize: 12,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -51,9 +51,9 @@ void main() {
|
|||||||
expect(repo.calls, 1);
|
expect(repo.calls, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('activeSeason picks the newest by id', () {
|
test('activeSeason starts at Season 1 (first by id)', () {
|
||||||
final p1 = _pack('season_001');
|
final p1 = _pack('season_001');
|
||||||
final p2 = _pack('season_002');
|
final p2 = _pack('season_002');
|
||||||
expect(activeSeason([p1, p2]).seasonId, 'season_002');
|
expect(activeSeason([p1, p2]).seasonId, 'season_001');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user