did a lot in refilc+

This commit is contained in:
Kima 2024-01-06 23:27:56 +01:00
parent 23673a34d8
commit d8b85ba1b4
10 changed files with 126 additions and 94 deletions

View File

@ -1,12 +1,12 @@
import 'package:filcnaplo/theme/colors/colors.dart'; import 'package:filcnaplo/theme/colors/colors.dart';
import 'package:refilc_plus/models/premium_scopes.dart'; // import 'package:refilc_plus/models/premium_scopes.dart';
import 'package:refilc_plus/providers/premium_provider.dart'; // import 'package:refilc_plus/providers/premium_provider.dart';
import 'package:refilc_plus/ui/mobile/premium/upsell.dart'; // import 'package:refilc_plus/ui/mobile/premium/upsell.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:dropdown_button2/dropdown_button2.dart'; import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:filcnaplo_mobile_ui/pages/grades/grades_page.i18n.dart'; import 'package:filcnaplo_mobile_ui/pages/grades/grades_page.i18n.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:provider/provider.dart'; // import 'package:provider/provider.dart';
final Map<int, String> avgDropItems = { final Map<int, String> avgDropItems = {
0: "annual_average", 0: "annual_average",
@ -47,17 +47,17 @@ class AverageSelectorState extends State<AverageSelector> {
return DropdownButton2<int>( return DropdownButton2<int>(
items: dropdownItems, items: dropdownItems,
onChanged: (int? value) { onChanged: (int? value) {
if (Provider.of<PremiumProvider>(context, listen: false) // if (Provider.of<PremiumProvider>(context, listen: false)
.hasScope(PremiumScopes.gradeStats)) { // .hasScope(PremiumScopes.gradeStats)) {
if (widget.onChanged != null) { if (widget.onChanged != null) {
setState(() { setState(() {
widget.onChanged!(value); widget.onChanged!(value);
}); });
}
} else {
PremiumLockedFeatureUpsell.show(
context: context, feature: PremiumFeature.gradestats);
} }
// } else {
// PremiumLockedFeatureUpsell.show(
// context: context, feature: PremiumFeature.gradestats);
// }
}, },
value: widget.value, value: widget.value,
iconSize: 14, iconSize: 14,

View File

@ -26,10 +26,10 @@ import 'package:filcnaplo_mobile_ui/pages/grades/grades_count.dart';
import 'package:filcnaplo_mobile_ui/pages/grades/graph.dart'; import 'package:filcnaplo_mobile_ui/pages/grades/graph.dart';
import 'package:filcnaplo_mobile_ui/pages/grades/subject_grades_container.dart'; import 'package:filcnaplo_mobile_ui/pages/grades/subject_grades_container.dart';
import 'package:refilc_plus/ui/mobile/goal_planner/goal_planner_screen.dart'; import 'package:refilc_plus/ui/mobile/goal_planner/goal_planner_screen.dart';
import 'package:refilc_plus/models/premium_scopes.dart'; // import 'package:refilc_plus/models/premium_scopes.dart';
import 'package:refilc_plus/providers/premium_provider.dart'; // import 'package:refilc_plus/providers/premium_provider.dart';
import 'package:refilc_plus/ui/mobile/goal_planner/goal_state_screen.dart'; import 'package:refilc_plus/ui/mobile/goal_planner/goal_state_screen.dart';
import 'package:refilc_plus/ui/mobile/premium/upsell.dart'; // import 'package:refilc_plus/ui/mobile/premium/upsell.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_expandable_fab/flutter_expandable_fab.dart'; import 'package:flutter_expandable_fab/flutter_expandable_fab.dart';
@ -246,12 +246,12 @@ class _GradeSubjectViewState extends State<GradeSubjectView> {
heroTag: "btn_goal_planner", heroTag: "btn_goal_planner",
backgroundColor: Theme.of(context).colorScheme.secondary, backgroundColor: Theme.of(context).colorScheme.secondary,
onPressed: () { onPressed: () {
if (!Provider.of<PremiumProvider>(context, listen: false) // if (!Provider.of<PremiumProvider>(context, listen: false)
.hasScope(PremiumScopes.goalPlanner)) { // .hasScope(PremiumScopes.goalPlanner)) {
PremiumLockedFeatureUpsell.show( // PremiumLockedFeatureUpsell.show(
context: context, feature: PremiumFeature.goalplanner); // context: context, feature: PremiumFeature.goalplanner);
return; // return;
} // }
// ScaffoldMessenger.of(context).showSnackBar( // ScaffoldMessenger.of(context).showSnackBar(
// const SnackBar(content: Text("Hamarosan..."))); // const SnackBar(content: Text("Hamarosan...")));

View File

@ -32,11 +32,13 @@ import 'package:filcnaplo_mobile_ui/pages/grades/fail_warning.dart';
import 'package:filcnaplo_mobile_ui/pages/grades/grades_count.dart'; import 'package:filcnaplo_mobile_ui/pages/grades/grades_count.dart';
import 'package:filcnaplo_mobile_ui/pages/grades/graph.dart'; import 'package:filcnaplo_mobile_ui/pages/grades/graph.dart';
import 'package:filcnaplo_mobile_ui/pages/grades/grade_subject_view.dart'; import 'package:filcnaplo_mobile_ui/pages/grades/grade_subject_view.dart';
import 'package:refilc_plus/models/premium_scopes.dart';
import 'package:refilc_plus/providers/premium_provider.dart'; import 'package:refilc_plus/providers/premium_provider.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:filcnaplo/helpers/average_helper.dart'; import 'package:filcnaplo/helpers/average_helper.dart';
import 'package:refilc_plus/ui/mobile/premium/upsell.dart';
import 'average_selector.dart'; import 'average_selector.dart';
import 'package:refilc_plus/ui/mobile/premium/premium_inline.dart'; import 'package:refilc_plus/ui/mobile/premium/premium_inline.dart';
import 'calculator/grade_calculator.dart'; import 'calculator/grade_calculator.dart';
@ -499,6 +501,15 @@ class GradesPageState extends State<GradesPage> {
child: IconButton( child: IconButton(
splashRadius: 24.0, splashRadius: 24.0,
onPressed: () { onPressed: () {
if (!Provider.of<PremiumProvider>(context,
listen: false)
.hasScope(PremiumScopes.totalGradeCalculator)) {
PremiumLockedFeatureUpsell.show(
context: context,
feature: PremiumFeature.gradeCalculation);
return;
}
// SoonAlert.show(context: context); // SoonAlert.show(context: context);
gradeCalcTotal(context); gradeCalcTotal(context);
}, },

View File

@ -11,18 +11,17 @@ class ActiveSponsorCard extends StatelessWidget {
const ActiveSponsorCard({super.key}); const ActiveSponsorCard({super.key});
static PremiumFeatureLevel? estimateLevel(List<String> scopes) { static PremiumFeatureLevel? estimateLevel(List<String> scopes) {
if (scopes.contains(PremiumScopes.all)) { if (scopes.contains(PremiumScopes.all) ||
scopes.contains(PremiumScopes.tierSponge)) {
return PremiumFeatureLevel.sponge;
}
if (scopes.contains(PremiumScopes.tierInk)) {
return PremiumFeatureLevel.ink; return PremiumFeatureLevel.ink;
} }
if (scopes.contains(PremiumScopes.timetableWidget) || if (scopes.contains(PremiumScopes.tierCap)) {
scopes.contains(PremiumScopes.goalPlanner)) {
return PremiumFeatureLevel.ink;
}
if (scopes.contains(PremiumScopes.customColors) ||
scopes.contains(PremiumScopes.nickname)) {
return PremiumFeatureLevel.cap; return PremiumFeatureLevel.cap;
} }
return null; return PremiumFeatureLevel.old;
} }
IconData _levelIcon(PremiumFeatureLevel level) { IconData _levelIcon(PremiumFeatureLevel level) {
@ -31,10 +30,10 @@ class ActiveSponsorCard extends StatelessWidget {
return FilcIcons.kupak; return FilcIcons.kupak;
case PremiumFeatureLevel.ink: case PremiumFeatureLevel.ink:
return FilcIcons.tinta; return FilcIcons.tinta;
case PremiumFeatureLevel.old:
return FilcIcons.kupak;
case PremiumFeatureLevel.sponge: case PremiumFeatureLevel.sponge:
return FilcIcons.kupak; return FilcIcons.kupak;
case PremiumFeatureLevel.old:
return FilcIcons.kupak;
} }
} }
@ -56,10 +55,10 @@ class ActiveSponsorCard extends StatelessWidget {
case PremiumFeatureLevel.ink: case PremiumFeatureLevel.ink:
glow = Colors.purple; glow = Colors.purple;
break; break;
case PremiumFeatureLevel.old: case PremiumFeatureLevel.sponge:
glow = Colors.red; glow = Colors.red;
break; break;
case PremiumFeatureLevel.sponge: case PremiumFeatureLevel.old:
glow = Colors.red; glow = Colors.red;
break; break;
} }

View File

@ -105,7 +105,7 @@ class _PremiumButtonState extends State<PremiumButton>
Icon(FilcIcons.premium, color: Colors.white), Icon(FilcIcons.premium, color: Colors.white),
SizedBox(width: 12.0), SizedBox(width: 12.0),
Text( Text(
"reFilc Premium", "reFilc+",
style: TextStyle( style: TextStyle(
color: Colors.white, color: Colors.white,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,

View File

@ -13,9 +13,9 @@ import 'package:filcnaplo_kreta_api/providers/grade_provider.dart';
import 'package:filcnaplo_kreta_api/providers/timetable_provider.dart'; import 'package:filcnaplo_kreta_api/providers/timetable_provider.dart';
import 'package:filcnaplo_mobile_ui/common/panel/panel.dart'; import 'package:filcnaplo_mobile_ui/common/panel/panel.dart';
import 'package:filcnaplo_mobile_ui/common/panel/panel_button.dart'; import 'package:filcnaplo_mobile_ui/common/panel/panel_button.dart';
import 'package:refilc_plus/models/premium_scopes.dart'; // import 'package:refilc_plus/models/premium_scopes.dart';
import 'package:refilc_plus/providers/premium_provider.dart'; // import 'package:refilc_plus/providers/premium_provider.dart';
import 'package:refilc_plus/ui/mobile/premium/upsell.dart'; // import 'package:refilc_plus/ui/mobile/premium/upsell.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart';
@ -33,12 +33,12 @@ class MenuRenamedSubjects extends StatelessWidget {
return PanelButton( return PanelButton(
padding: const EdgeInsets.only(left: 14.0), padding: const EdgeInsets.only(left: 14.0),
onPressed: () { onPressed: () {
if (!Provider.of<PremiumProvider>(context, listen: false) // if (!Provider.of<PremiumProvider>(context, listen: false)
.hasScope(PremiumScopes.renameSubjects)) { // .hasScope(PremiumScopes.renameSubjects)) {
PremiumLockedFeatureUpsell.show( // PremiumLockedFeatureUpsell.show(
context: context, feature: PremiumFeature.subjectrename); // context: context, feature: PremiumFeature.subjectrename);
return; // return;
} // }
Navigator.of(context, rootNavigator: true).push( Navigator.of(context, rootNavigator: true).push(
CupertinoPageRoute(builder: (context) => const ModifySubjectNames()), CupertinoPageRoute(builder: (context) => const ModifySubjectNames()),
@ -58,12 +58,12 @@ class MenuRenamedSubjects extends StatelessWidget {
trailingDivider: true, trailingDivider: true,
trailing: Switch( trailing: Switch(
onChanged: (v) async { onChanged: (v) async {
if (!Provider.of<PremiumProvider>(context, listen: false) // if (!Provider.of<PremiumProvider>(context, listen: false)
.hasScope(PremiumScopes.renameSubjects)) { // .hasScope(PremiumScopes.renameSubjects)) {
PremiumLockedFeatureUpsell.show( // PremiumLockedFeatureUpsell.show(
context: context, feature: PremiumFeature.subjectrename); // context: context, feature: PremiumFeature.subjectrename);
return; // return;
} // }
settings.update(renamedSubjectsEnabled: v); settings.update(renamedSubjectsEnabled: v);
await Provider.of<GradeProvider>(context, listen: false) await Provider.of<GradeProvider>(context, listen: false)

View File

@ -37,7 +37,9 @@ import 'package:filcnaplo_mobile_ui/screens/settings/modify_subject_names.dart';
import 'package:filcnaplo_mobile_ui/screens/settings/notifications_screen.dart'; import 'package:filcnaplo_mobile_ui/screens/settings/notifications_screen.dart';
import 'package:filcnaplo_mobile_ui/screens/settings/privacy_view.dart'; import 'package:filcnaplo_mobile_ui/screens/settings/privacy_view.dart';
import 'package:filcnaplo_mobile_ui/screens/settings/settings_helper.dart'; import 'package:filcnaplo_mobile_ui/screens/settings/settings_helper.dart';
import 'package:refilc_plus/models/premium_scopes.dart';
import 'package:refilc_plus/providers/premium_provider.dart'; import 'package:refilc_plus/providers/premium_provider.dart';
import 'package:refilc_plus/ui/mobile/premium/upsell.dart';
import 'package:refilc_plus/ui/mobile/settings/app_icon_screen.dart'; import 'package:refilc_plus/ui/mobile/settings/app_icon_screen.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
@ -436,6 +438,15 @@ class SettingsScreenState extends State<SettingsScreen>
// account settings // account settings
PanelButton( PanelButton(
onPressed: () { onPressed: () {
if (!Provider.of<PremiumProvider>(context,
listen: false)
.hasScope(PremiumScopes.maxTwoAccounts)) {
PremiumLockedFeatureUpsell.show(
context: context,
feature: PremiumFeature.moreAccounts);
return;
}
Navigator.of(context) Navigator.of(context)
.pushNamed("login_back") .pushNamed("login_back")
.then((value) { .then((value) {
@ -837,6 +848,15 @@ class SettingsScreenState extends State<SettingsScreen>
if (defaultTargetPlatform == TargetPlatform.iOS) if (defaultTargetPlatform == TargetPlatform.iOS)
PanelButton( PanelButton(
onPressed: () { onPressed: () {
if (!Provider.of<PremiumProvider>(context,
listen: false)
.hasScope(PremiumScopes.liveActivityColor)) {
PremiumLockedFeatureUpsell.show(
context: context,
feature: PremiumFeature.liveActivity);
return;
}
SettingsHelper.liveActivityColor(context); SettingsHelper.liveActivityColor(context);
setState(() {}); setState(() {});
}, },
@ -1131,20 +1151,21 @@ class SettingsScreenState extends State<SettingsScreen>
Provider.of<KretaClient>(context, listen: false) Provider.of<KretaClient>(context, listen: false)
.accessToken!)), .accessToken!)),
), ),
// if (Provider.of<PremiumProvider>(context, listen: false) if (Provider.of<PremiumProvider>(context, listen: false)
// .hasPremium) .hasPremium)
PanelButton( PanelButton(
leading: const Icon(FeatherIcons.key), leading: const Icon(FeatherIcons.key),
title: const Text("Remove Premium"), title: const Text("Remove Premium"),
onPressed: () { onPressed: () {
Provider.of<PremiumProvider>(context, listen: false) Provider.of<PremiumProvider>(context, listen: false)
.activate(removePremium: true); .activate(removePremium: true);
settings.update( settings.update(
accentColor: AccentColor.filc, store: true); accentColor: AccentColor.filc, store: true);
Provider.of<ThemeModeObserver>(context, listen: false) Provider.of<ThemeModeObserver>(context,
.changeTheme(settings.theme); listen: false)
}, .changeTheme(settings.theme);
), },
),
], ],
), ),
), ),

View File

@ -15,11 +15,11 @@ import 'package:filcnaplo_mobile_ui/common/filter_bar.dart';
import 'package:filcnaplo_mobile_ui/common/panel/panel.dart'; import 'package:filcnaplo_mobile_ui/common/panel/panel.dart';
import 'package:filcnaplo_mobile_ui/common/widgets/grade/new_grades.dart'; import 'package:filcnaplo_mobile_ui/common/widgets/grade/new_grades.dart';
import 'package:filcnaplo_mobile_ui/common/widgets/homework/homework_tile.dart'; import 'package:filcnaplo_mobile_ui/common/widgets/homework/homework_tile.dart';
import 'package:refilc_plus/models/premium_scopes.dart'; // import 'package:refilc_plus/models/premium_scopes.dart';
import 'package:refilc_plus/providers/premium_provider.dart'; // import 'package:refilc_plus/providers/premium_provider.dart';
import 'package:filcnaplo_kreta_api/providers/share_provider.dart'; import 'package:filcnaplo_kreta_api/providers/share_provider.dart';
import 'package:filcnaplo/ui/flutter_colorpicker/colorpicker.dart'; import 'package:filcnaplo/ui/flutter_colorpicker/colorpicker.dart';
import 'package:refilc_plus/ui/mobile/premium/upsell.dart'; // import 'package:refilc_plus/ui/mobile/premium/upsell.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart';
@ -205,8 +205,9 @@ class _PremiumCustomAccentColorSettingState
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
bool hasAccess = Provider.of<PremiumProvider>(context) // bool hasAccess = Provider.of<PremiumProvider>(context)
.hasScope(PremiumScopes.customColors); // .hasScope(PremiumScopes.customColors);
bool hasAccess = true;
bool isBackgroundDifferent = Theme.of(context).colorScheme.background != bool isBackgroundDifferent = Theme.of(context).colorScheme.background !=
AppColors.of(context).background; AppColors.of(context).background;
@ -723,16 +724,16 @@ class _PremiumCustomAccentColorSettingState
// "colorpicker_icon".i18n)), // "colorpicker_icon".i18n)),
], ],
onTap: (index) { onTap: (index) {
if (!hasAccess) { // if (!hasAccess) {
index = 0; // index = 0;
_colorsTabController.animateTo(0, // _colorsTabController.animateTo(0,
duration: Duration.zero); // duration: Duration.zero);
PremiumLockedFeatureUpsell.show( // PremiumLockedFeatureUpsell.show(
context: context, // context: context,
feature: PremiumFeature // feature: PremiumFeature
.customcolors); // .customcolors);
} // }
switch (index) { switch (index) {
case 0: case 0:

View File

@ -2,9 +2,9 @@ import 'package:filcnaplo/api/providers/database_provider.dart';
import 'package:filcnaplo/api/providers/user_provider.dart'; import 'package:filcnaplo/api/providers/user_provider.dart';
import 'package:filcnaplo/models/user.dart'; import 'package:filcnaplo/models/user.dart';
import 'package:filcnaplo_mobile_ui/common/bottom_sheet_menu/bottom_sheet_menu_item.dart'; import 'package:filcnaplo_mobile_ui/common/bottom_sheet_menu/bottom_sheet_menu_item.dart';
import 'package:refilc_plus/models/premium_scopes.dart'; // import 'package:refilc_plus/models/premium_scopes.dart';
import 'package:refilc_plus/providers/premium_provider.dart'; // import 'package:refilc_plus/providers/premium_provider.dart';
import 'package:refilc_plus/ui/mobile/premium/upsell.dart'; // import 'package:refilc_plus/ui/mobile/premium/upsell.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:filcnaplo_mobile_ui/screens/settings/settings_screen.i18n.dart'; import 'package:filcnaplo_mobile_ui/screens/settings/settings_screen.i18n.dart';
@ -20,12 +20,12 @@ class UserMenuNickname extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BottomSheetMenuItem( return BottomSheetMenuItem(
onPressed: () { onPressed: () {
if (!Provider.of<PremiumProvider>(context, listen: false) // if (!Provider.of<PremiumProvider>(context, listen: false)
.hasScope(PremiumScopes.nickname)) { // .hasScope(PremiumScopes.nickname)) {
PremiumLockedFeatureUpsell.show( // PremiumLockedFeatureUpsell.show(
context: context, feature: PremiumFeature.profile); // context: context, feature: PremiumFeature.profile);
return; // return;
} // }
showDialog( showDialog(
context: context, builder: (context) => UserNicknameEditor(u)); context: context, builder: (context) => UserNicknameEditor(u));
}, },

View File

@ -8,8 +8,8 @@ import 'package:filcnaplo/api/providers/database_provider.dart';
import 'package:filcnaplo/api/providers/user_provider.dart'; import 'package:filcnaplo/api/providers/user_provider.dart';
import 'package:filcnaplo/models/user.dart'; import 'package:filcnaplo/models/user.dart';
import 'package:filcnaplo_mobile_ui/common/bottom_sheet_menu/bottom_sheet_menu_item.dart'; import 'package:filcnaplo_mobile_ui/common/bottom_sheet_menu/bottom_sheet_menu_item.dart';
import 'package:refilc_plus/models/premium_scopes.dart'; // import 'package:refilc_plus/models/premium_scopes.dart';
import 'package:refilc_plus/providers/premium_provider.dart'; // import 'package:refilc_plus/providers/premium_provider.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart';
@ -26,10 +26,10 @@ class UserMenuProfilePic extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (!Provider.of<PremiumProvider>(context) // if (!Provider.of<PremiumProvider>(context)
.hasScope(PremiumScopes.nickname)) { // .hasScope(PremiumScopes.nickname)) {
return const SizedBox(); // return const SizedBox();
} // }
return BottomSheetMenuItem( return BottomSheetMenuItem(
onPressed: () { onPressed: () {