rfplus thingies

This commit is contained in:
Kima 2024-03-03 21:06:08 +01:00
parent 332b954029
commit 146ff9251c
3 changed files with 51 additions and 27 deletions

View File

@ -10,6 +10,8 @@ import 'package:refilc_kreta_api/providers/grade_provider.dart';
import 'package:refilc_mobile_ui/common/average_display.dart'; import 'package:refilc_mobile_ui/common/average_display.dart';
import 'package:refilc_mobile_ui/common/round_border_icon.dart'; import 'package:refilc_mobile_ui/common/round_border_icon.dart';
import 'package:refilc_mobile_ui/pages/grades/calculator/grade_calculator_provider.dart'; import 'package:refilc_mobile_ui/pages/grades/calculator/grade_calculator_provider.dart';
import 'package:refilc_plus/models/premium_scopes.dart';
import 'package:refilc_plus/providers/premium_provider.dart';
import 'package:refilc_plus/ui/mobile/goal_planner/goal_input.dart'; import 'package:refilc_plus/ui/mobile/goal_planner/goal_input.dart';
import 'package:refilc_plus/ui/mobile/goal_planner/goal_planner.dart'; import 'package:refilc_plus/ui/mobile/goal_planner/goal_planner.dart';
import 'package:refilc_plus/ui/mobile/goal_planner/goal_planner_screen.i18n.dart'; import 'package:refilc_plus/ui/mobile/goal_planner/goal_planner_screen.i18n.dart';
@ -27,7 +29,7 @@ enum PlanResult {
class GoalPlannerScreen extends StatefulWidget { class GoalPlannerScreen extends StatefulWidget {
final GradeSubject subject; final GradeSubject subject;
const GoalPlannerScreen({Key? key, required this.subject}) : super(key: key); const GoalPlannerScreen({super.key, required this.subject});
@override @override
State<GoalPlannerScreen> createState() => _GoalPlannerScreenState(); State<GoalPlannerScreen> createState() => _GoalPlannerScreenState();
@ -136,6 +138,14 @@ class _GoalPlannerScreenState extends State<GoalPlannerScreen> {
otherPlans = List.from(plans); otherPlans = List.from(plans);
// only save 2 items if not plus member
if (!Provider.of<PremiumProvider>(context)
.hasScope(PremiumScopes.unlimitedGoalPlanner)) {
if (otherPlans.length > 2) {
otherPlans.removeRange(2, otherPlans.length - 1);
}
}
return PlanResult.available; return PlanResult.available;
} }

View File

@ -23,6 +23,7 @@ enum PremiumFeature {
fontChange, // sponge fontChange, // sponge
goalPlanner, // sponge goalPlanner, // sponge
gradeRarities, gradeRarities,
calendarSync,
} }
enum PremiumFeatureLevel { enum PremiumFeatureLevel {
@ -30,6 +31,9 @@ enum PremiumFeatureLevel {
cap, cap,
ink, ink,
sponge, sponge,
// new new new
basic,
gold,
} }
const Map<PremiumFeature, PremiumFeatureLevel> _featureLevels = { const Map<PremiumFeature, PremiumFeatureLevel> _featureLevels = {
@ -42,18 +46,18 @@ const Map<PremiumFeature, PremiumFeatureLevel> _featureLevels = {
PremiumFeature.weeklytimetable: PremiumFeatureLevel.old, PremiumFeature.weeklytimetable: PremiumFeatureLevel.old,
PremiumFeature.widget: PremiumFeatureLevel.old, PremiumFeature.widget: PremiumFeatureLevel.old,
// new things // new things
PremiumFeature.moreAccounts: PremiumFeatureLevel.cap, PremiumFeature.moreAccounts: PremiumFeatureLevel.basic,
PremiumFeature.betaReleases: PremiumFeatureLevel.cap, PremiumFeature.betaReleases: PremiumFeatureLevel.basic,
PremiumFeature.welcomeMessage: PremiumFeatureLevel.cap, PremiumFeature.welcomeMessage: PremiumFeatureLevel.basic,
PremiumFeature.selfNotes: PremiumFeatureLevel.cap, PremiumFeature.selfNotes: PremiumFeatureLevel.basic,
PremiumFeature.gradeCalculation: PremiumFeatureLevel.ink, PremiumFeature.gradeCalculation: PremiumFeatureLevel.basic,
PremiumFeature.liveActivity: PremiumFeatureLevel.ink, PremiumFeature.liveActivity: PremiumFeatureLevel.gold,
PremiumFeature.timetableNotes: PremiumFeatureLevel.ink, PremiumFeature.timetableNotes: PremiumFeatureLevel.gold,
PremiumFeature.iconChange: PremiumFeatureLevel.sponge, PremiumFeature.iconChange: PremiumFeatureLevel.gold,
PremiumFeature.fontChange: PremiumFeatureLevel.sponge, PremiumFeature.fontChange: PremiumFeatureLevel.gold,
PremiumFeature.goalPlanner: PremiumFeatureLevel.sponge, PremiumFeature.goalPlanner: PremiumFeatureLevel.gold,
PremiumFeature.gradeRarities: PremiumFeatureLevel.basic,
PremiumFeature.gradeRarities: PremiumFeatureLevel.old, PremiumFeature.calendarSync: PremiumFeatureLevel.gold,
}; };
const Map<PremiumFeature, String> _featureAssets = { const Map<PremiumFeature, String> _featureAssets = {
@ -82,6 +86,7 @@ const Map<PremiumFeature, String> _featureAssets = {
PremiumFeature.gradeRarities: PremiumFeature.gradeRarities:
"assets/images/premium_banner/grade_rarities.png", "assets/images/premium_banner/grade_rarities.png",
PremiumFeature.calendarSync: "assets/images/premium_banner/calendar_sync.png",
}; };
const Map<PremiumFeature, String> _featureTitles = { const Map<PremiumFeature, String> _featureTitles = {
@ -107,8 +112,8 @@ const Map<PremiumFeature, String> _featureTitles = {
PremiumFeature.iconChange: "Ez aztán különleges!", PremiumFeature.iconChange: "Ez aztán különleges!",
PremiumFeature.fontChange: "Woah! Micsoda gyönyörű betűk!", PremiumFeature.fontChange: "Woah! Micsoda gyönyörű betűk!",
PremiumFeature.goalPlanner: "Még több javaslat kell?", PremiumFeature.goalPlanner: "Még több javaslat kell?",
PremiumFeature.gradeRarities: "Nem epikus, hanem ultraszuper?", PremiumFeature.gradeRarities: "Nem epikus, hanem ultraszuper?",
PremiumFeature.calendarSync: "Még a naptáradba is kell?!",
}; };
const Map<PremiumFeature, String> _featureDescriptions = { const Map<PremiumFeature, String> _featureDescriptions = {
@ -132,25 +137,25 @@ const Map<PremiumFeature, String> _featureDescriptions = {
PremiumFeature.moreAccounts: PremiumFeature.moreAccounts:
"Minden támogatási szinttel egyre magasabb a limit.", "Minden támogatási szinttel egyre magasabb a limit.",
PremiumFeature.betaReleases: PremiumFeature.betaReleases:
"Támogass Kupak szinten, hogy előre megkapd a béta frissítéseket.", "Fizess elő reFilc+-ra, hogy előre megkapd a béta frissítéseket.",
PremiumFeature.welcomeMessage: PremiumFeature.welcomeMessage:
"Az egyedi üdvözléshez elég csupán a Kupak szint!", "Az egyedi üdvözléshez elég csupán a legalsó szint!",
PremiumFeature.selfNotes: PremiumFeature.selfNotes:
"Támogass Kupak szinten, és jegyezd fel minden fontos dolgod.", "Támogass minket, és jegyezd fel minden fontos dolgod.",
PremiumFeature.gradeCalculation: PremiumFeature.gradeCalculation:
"Tinta szinttől egyszerűbb kiszámolnod a tervezett átlagod.", "reFilc+-al egyszerűbb kiszámolnod a tervezett átlagod.",
PremiumFeature.liveActivity: PremiumFeature.liveActivity:
"Tinta szintű támogatással átszínezhetsz bármilyenre.", "Gold szintű támogatással átszínezhetsz bármilyenre.",
PremiumFeature.timetableNotes: PremiumFeature.timetableNotes:
"Nincs több ilyen kérdés, ha Tinta szinten támogatsz.", "Nincs több ilyen kérdés, ha Gold szinten támogatsz.",
PremiumFeature.iconChange: PremiumFeature.iconChange:
"Támogass Szivacs szinten az alkalmazás ikonjának megváltoztatásához.", "Fizess elő Gold szintre az alkalmazás ikonjának megváltoztatásához.",
PremiumFeature.fontChange: PremiumFeature.fontChange:
"Szivacs szintű támogatással megváltoztathatod a betűtípust is.", "Gold szintű támogatással megváltoztathatod a betűtípust is.",
PremiumFeature.goalPlanner: PremiumFeature.goalPlanner:
"Támogass Szivacs szinten és használd ki a cél kitűzés minden funkcióját!", "Támogass Gold szinten és használd ki a cél kitűzés minden funkcióját!",
PremiumFeature.gradeRarities: "A reFilc+ alap szintjével ez is elérhető!",
PremiumFeature.gradeRarities: "A reFilc+ Tinta szintjével ez is elérhető!", PremiumFeature.calendarSync: "Szinkronizáld az órarended reFilc+ Gold-al!",
}; };
class PremiumLockedFeatureUpsell extends StatelessWidget { class PremiumLockedFeatureUpsell extends StatelessWidget {
@ -170,8 +175,8 @@ class PremiumLockedFeatureUpsell extends StatelessWidget {
? FilcIcons.tinta ? FilcIcons.tinta
: FilcIcons.tinta; : FilcIcons.tinta;
Color _getColor(BuildContext context) => Color _getColor(BuildContext context) =>
_featureLevels[feature] == PremiumFeatureLevel.cap _featureLevels[feature] == PremiumFeatureLevel.gold
? const Color(0xffC8A708) ? const Color(0xFFC89B08)
: Theme.of(context).brightness == Brightness.light : Theme.of(context).brightness == Brightness.light
? const Color(0xff691A9B) ? const Color(0xff691A9B)
: const Color(0xffA66FC8); : const Color(0xffA66FC8);

View File

@ -15,6 +15,9 @@ import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:refilc_mobile_ui/common/widgets/custom_segmented_control.dart'; import 'package:refilc_mobile_ui/common/widgets/custom_segmented_control.dart';
import 'package:refilc_mobile_ui/screens/settings/settings_screen.i18n.dart'; import 'package:refilc_mobile_ui/screens/settings/settings_screen.i18n.dart';
import 'package:refilc_plus/models/premium_scopes.dart';
import 'package:refilc_plus/providers/premium_provider.dart';
import 'package:refilc_plus/ui/mobile/premium/upsell.dart';
class MenuCalendarSync extends StatelessWidget { class MenuCalendarSync extends StatelessWidget {
const MenuCalendarSync({ const MenuCalendarSync({
@ -29,6 +32,12 @@ class MenuCalendarSync extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return PanelButton( return PanelButton(
onPressed: () async { onPressed: () async {
if (!Provider.of<PremiumProvider>(context, listen: false)
.hasScope(PremiumScopes.calendarSync)) {
return PremiumLockedFeatureUpsell.show(
context: context, feature: PremiumFeature.calendarSync);
}
Navigator.of(context, rootNavigator: true).push(CupertinoPageRoute( Navigator.of(context, rootNavigator: true).push(CupertinoPageRoute(
builder: (context) => const CalendarSyncScreen())); builder: (context) => const CalendarSyncScreen()));
}, },