diff --git a/lib/data/save_repository.dart b/lib/data/save_repository.dart index d9ab677..0629725 100644 --- a/lib/data/save_repository.dart +++ b/lib/data/save_repository.dart @@ -39,6 +39,9 @@ class SaveRepository { false; _endlessBest = (json['endless'] as Map?)?['best'] as int? ?? 0; + _adsRemoved = + (json['flags'] as Map?)?['adsRemoved'] as bool? ?? + false; } } @@ -52,16 +55,23 @@ class SaveRepository { StreakState _streak = StreakState.initial; bool _tutorialDone = false; int _endlessBest = 0; + bool _adsRemoved = false; StreakState get streak => _streak; bool get tutorialDone => _tutorialDone; int get endlessBest => _endlessBest; + bool get adsRemoved => _adsRemoved; Future markTutorialDone() { _tutorialDone = true; return _flush(); } + Future setAdsRemoved(bool value) { + _adsRemoved = value; + return _flush(); + } + Future recordEndlessScore(int score) { if (score > _endlessBest) _endlessBest = score; return _flush(); @@ -130,7 +140,7 @@ class SaveRepository { 'best': _streak.best, 'lastYmd': _streak.lastYmd, }, - 'flags': {'tutorialDone': _tutorialDone}, + 'flags': {'tutorialDone': _tutorialDone, 'adsRemoved': _adsRemoved}, 'endless': {'best': _endlessBest}, }), ); diff --git a/test/data/save_repository_ads_test.dart b/test/data/save_repository_ads_test.dart new file mode 100644 index 0000000..b60a352 --- /dev/null +++ b/test/data/save_repository_ads_test.dart @@ -0,0 +1,26 @@ +import 'package:block_seasons/data/save_repository.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +void main() { + setUp(() => SharedPreferences.setMockInitialValues({})); + + test('adsRemoved defaults to false and persists across reopen', () async { + final repo = await SaveRepository.open(); + expect(repo.adsRemoved, isFalse); + await repo.setAdsRemoved(true); + expect(repo.adsRemoved, isTrue); + + final reopened = await SaveRepository.open(); + expect(reopened.adsRemoved, isTrue); + }); + + test('legacy save without the ads flag reads as false', () async { + SharedPreferences.setMockInitialValues({ + 'save_v1': '{"saveVersion":1,"progress":{},"flags":{"tutorialDone":true}}', + }); + final repo = await SaveRepository.open(); + expect(repo.adsRemoved, isFalse); + expect(repo.tutorialDone, isTrue); + }); +}