fixed settings account bugs
This commit is contained in:
parent
8729f9887f
commit
8ec2ff8b1a
@ -89,7 +89,7 @@ class _SettingsScreenState extends State<SettingsScreen>
|
|||||||
if (!settings.presentationMode) {
|
if (!settings.presentationMode) {
|
||||||
_firstName = _nameParts.length > 1 ? _nameParts[1] : _nameParts[0];
|
_firstName = _nameParts.length > 1 ? _nameParts[1] : _nameParts[0];
|
||||||
} else {
|
} else {
|
||||||
_firstName = "Béla";
|
_firstName = "János";
|
||||||
}
|
}
|
||||||
|
|
||||||
accountTiles.add(AccountTile(
|
accountTiles.add(AccountTile(
|
||||||
@ -128,8 +128,8 @@ class _SettingsScreenState extends State<SettingsScreen>
|
|||||||
icon: Icon(FeatherIcons.grid, color: AppColors.of(context).teal),
|
icon: Icon(FeatherIcons.grid, color: AppColors.of(context).teal),
|
||||||
title: Text("open_dkt".i18n),
|
title: Text("open_dkt".i18n),
|
||||||
),
|
),
|
||||||
const UserMenuNickname(),
|
UserMenuNickname(u),
|
||||||
const UserMenuProfilePic(),
|
UserMenuProfilePic(u),
|
||||||
// BottomSheetMenuItem(
|
// BottomSheetMenuItem(
|
||||||
// onPressed: () {},
|
// onPressed: () {},
|
||||||
// icon: Icon(FeatherIcons.camera),
|
// icon: Icon(FeatherIcons.camera),
|
||||||
@ -247,7 +247,7 @@ class _SettingsScreenState extends State<SettingsScreen>
|
|||||||
child: Text(
|
child: Text(
|
||||||
!settings.presentationMode
|
!settings.presentationMode
|
||||||
? (user.displayName ?? "?")
|
? (user.displayName ?? "?")
|
||||||
: "Béla",
|
: "János",
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
softWrap: false,
|
softWrap: false,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
|
@ -30,7 +30,8 @@ const Map<PremiumFeature, String> _featureAssets = {
|
|||||||
PremiumFeature.gradestats: "assets/images/premium_stats_showcase.png",
|
PremiumFeature.gradestats: "assets/images/premium_stats_showcase.png",
|
||||||
PremiumFeature.customcolors: "assets/images/premium_theme_showcase.png",
|
PremiumFeature.customcolors: "assets/images/premium_theme_showcase.png",
|
||||||
PremiumFeature.profile: "assets/images/premium_nickname_showcase.png",
|
PremiumFeature.profile: "assets/images/premium_nickname_showcase.png",
|
||||||
PremiumFeature.weeklytimetable: "assets/images/premium_timetable_showcase.png",
|
PremiumFeature.weeklytimetable:
|
||||||
|
"assets/images/premium_timetable_showcase.png",
|
||||||
PremiumFeature.goalplanner: "assets/images/premium_goal_showcase.png",
|
PremiumFeature.goalplanner: "assets/images/premium_goal_showcase.png",
|
||||||
PremiumFeature.widget: "assets/images/premium_widget_showcase.png",
|
PremiumFeature.widget: "assets/images/premium_widget_showcase.png",
|
||||||
};
|
};
|
||||||
@ -40,33 +41,47 @@ const Map<PremiumFeature, String> _featureTitles = {
|
|||||||
PremiumFeature.customcolors: "Több személyre szabás kell?",
|
PremiumFeature.customcolors: "Több személyre szabás kell?",
|
||||||
PremiumFeature.profile: "Nem tetszik a neved?",
|
PremiumFeature.profile: "Nem tetszik a neved?",
|
||||||
PremiumFeature.iconpack: "Jobban tetszettek a régi ikonok?",
|
PremiumFeature.iconpack: "Jobban tetszettek a régi ikonok?",
|
||||||
PremiumFeature.subjectrename: "Sokáig tart elolvasni, hogy \"Földrajz természettudomány\"?",
|
PremiumFeature.subjectrename:
|
||||||
|
"Sokáig tart elolvasni, hogy \"Földrajz természettudomány\"?",
|
||||||
PremiumFeature.weeklytimetable: "Szeretnéd egyszerre az egész hetet látni?",
|
PremiumFeature.weeklytimetable: "Szeretnéd egyszerre az egész hetet látni?",
|
||||||
PremiumFeature.goalplanner: "Kövesd a céljaidat, sok-sok statisztikával.",
|
PremiumFeature.goalplanner: "Kövesd a céljaidat, sok-sok statisztikával.",
|
||||||
PremiumFeature.widget: "Órák a kezdőképernyőd kényelméből.",
|
PremiumFeature.widget: "Órák a kezdőképernyőd kényelméből.",
|
||||||
};
|
};
|
||||||
|
|
||||||
const Map<PremiumFeature, String> _featureDescriptions = {
|
const Map<PremiumFeature, String> _featureDescriptions = {
|
||||||
PremiumFeature.gradestats: "Támogass Kupak szinten, hogy több statisztikát láthass. ",
|
PremiumFeature.gradestats:
|
||||||
PremiumFeature.customcolors: "Támogass Kupak szinten, és szabd személyre az elemek, a háttér, és a panelek színeit.",
|
"Támogass Kupak szinten, hogy több statisztikát láthass. ",
|
||||||
PremiumFeature.profile: "Kupak szinten változtathatod a nevedet, sőt, akár a profilképedet is.",
|
PremiumFeature.customcolors:
|
||||||
PremiumFeature.iconpack: "Támogass Kupak szinten, hogy ikon témát választhass.",
|
"Támogass Kupak szinten, és szabd személyre az elemek, a háttér, és a panelek színeit.",
|
||||||
PremiumFeature.subjectrename: "Támogass Kupak szinten, hogy átnevezhesd Föcire.",
|
PremiumFeature.profile:
|
||||||
PremiumFeature.weeklytimetable: "Támogass Tinta szinten a heti órarend funkcióért.",
|
"Kupak szinten változtathatod a nevedet, sőt, akár a profilképedet is.",
|
||||||
|
PremiumFeature.iconpack:
|
||||||
|
"Támogass Kupak szinten, hogy ikon témát választhass.",
|
||||||
|
PremiumFeature.subjectrename:
|
||||||
|
"Támogass Kupak szinten, hogy átnevezhesd Föcire.",
|
||||||
|
PremiumFeature.weeklytimetable:
|
||||||
|
"Támogass Tinta szinten a heti órarend funkcióért.",
|
||||||
PremiumFeature.goalplanner: "A célkövetéshez támogass Tinta szinten.",
|
PremiumFeature.goalplanner: "A célkövetéshez támogass Tinta szinten.",
|
||||||
PremiumFeature.widget: "Támogass Tinta szinten, és helyezz egy widgetet a kezdőképernyődre.",
|
PremiumFeature.widget:
|
||||||
|
"Támogass Tinta szinten, és helyezz egy widgetet a kezdőképernyődre.",
|
||||||
};
|
};
|
||||||
|
|
||||||
class PremiumLockedFeatureUpsell extends StatelessWidget {
|
class PremiumLockedFeatureUpsell extends StatelessWidget {
|
||||||
const PremiumLockedFeatureUpsell({super.key, required this.feature});
|
const PremiumLockedFeatureUpsell({super.key, required this.feature});
|
||||||
|
|
||||||
static void show({required BuildContext context, required PremiumFeature feature}) =>
|
static void show(
|
||||||
showDialog(context: context, builder: (context) => PremiumLockedFeatureUpsell(feature: feature));
|
{required BuildContext context, required PremiumFeature feature}) =>
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) => PremiumLockedFeatureUpsell(feature: feature));
|
||||||
|
|
||||||
final PremiumFeature feature;
|
final PremiumFeature feature;
|
||||||
|
|
||||||
IconData _getIcon() => _featureLevels[feature] == PremiumFeatureLevel.kupak ? FilcIcons.kupak : FilcIcons.tinta;
|
IconData _getIcon() => _featureLevels[feature] == PremiumFeatureLevel.kupak
|
||||||
Color _getColor(BuildContext context) => _featureLevels[feature] == PremiumFeatureLevel.kupak
|
? FilcIcons.kupak
|
||||||
|
: FilcIcons.tinta;
|
||||||
|
Color _getColor(BuildContext context) =>
|
||||||
|
_featureLevels[feature] == PremiumFeatureLevel.kupak
|
||||||
? const Color(0xffC8A708)
|
? const Color(0xffC8A708)
|
||||||
: Theme.of(context).brightness == Brightness.light
|
: Theme.of(context).brightness == Brightness.light
|
||||||
? const Color(0xff691A9B)
|
? const Color(0xff691A9B)
|
||||||
@ -138,11 +153,14 @@ class PremiumLockedFeatureUpsell extends StatelessWidget {
|
|||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
child: TextButton(
|
child: TextButton(
|
||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
backgroundColor: MaterialStatePropertyAll(color.withOpacity(.25)),
|
backgroundColor:
|
||||||
|
MaterialStatePropertyAll(color.withOpacity(.25)),
|
||||||
foregroundColor: MaterialStatePropertyAll(color),
|
foregroundColor: MaterialStatePropertyAll(color),
|
||||||
overlayColor: MaterialStatePropertyAll(color.withOpacity(.1))),
|
overlayColor:
|
||||||
|
MaterialStatePropertyAll(color.withOpacity(.1))),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
Navigator.of(context, rootNavigator: true).push(MaterialPageRoute(builder: (context) {
|
Navigator.of(context, rootNavigator: true)
|
||||||
|
.push(MaterialPageRoute(builder: (context) {
|
||||||
return const PremiumScreen();
|
return const PremiumScreen();
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:filcnaplo/api/providers/database_provider.dart';
|
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_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:filcnaplo_premium/models/premium_scopes.dart';
|
import 'package:filcnaplo_premium/models/premium_scopes.dart';
|
||||||
import 'package:filcnaplo_premium/providers/premium_provider.dart';
|
import 'package:filcnaplo_premium/providers/premium_provider.dart';
|
||||||
@ -9,18 +10,24 @@ 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';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
// ignore: must_be_immutable
|
||||||
class UserMenuNickname extends StatelessWidget {
|
class UserMenuNickname extends StatelessWidget {
|
||||||
const UserMenuNickname({Key? key}) : super(key: key);
|
late User u;
|
||||||
|
|
||||||
|
UserMenuNickname(User u, {Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return BottomSheetMenuItem(
|
return BottomSheetMenuItem(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
if (!Provider.of<PremiumProvider>(context, listen: false).hasScope(PremiumScopes.nickname)) {
|
if (!Provider.of<PremiumProvider>(context, listen: false)
|
||||||
PremiumLockedFeatureUpsell.show(context: context, feature: PremiumFeature.profile);
|
.hasScope(PremiumScopes.nickname)) {
|
||||||
|
PremiumLockedFeatureUpsell.show(
|
||||||
|
context: context, feature: PremiumFeature.profile);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
showDialog(context: context, builder: (context) => const UserNicknameEditor());
|
showDialog(
|
||||||
|
context: context, builder: (context) => UserNicknameEditor(u));
|
||||||
},
|
},
|
||||||
icon: const Icon(FeatherIcons.edit2),
|
icon: const Icon(FeatherIcons.edit2),
|
||||||
title: Text("edit_nickname".i18n),
|
title: Text("edit_nickname".i18n),
|
||||||
@ -28,8 +35,11 @@ class UserMenuNickname extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ignore: must_be_immutable
|
||||||
class UserNicknameEditor extends StatefulWidget {
|
class UserNicknameEditor extends StatefulWidget {
|
||||||
const UserNicknameEditor({Key? key}) : super(key: key);
|
late User u;
|
||||||
|
|
||||||
|
UserNicknameEditor(User u, {Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<UserNicknameEditor> createState() => _UserNicknameEditorState();
|
State<UserNicknameEditor> createState() => _UserNicknameEditorState();
|
||||||
@ -54,7 +64,7 @@ class _UserNicknameEditorState extends State<UserNicknameEditor> {
|
|||||||
autofocus: true,
|
autofocus: true,
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
border: const OutlineInputBorder(),
|
border: const OutlineInputBorder(),
|
||||||
label: Text(user.name!),
|
label: Text(widget.u.name),
|
||||||
suffixIcon: IconButton(
|
suffixIcon: IconButton(
|
||||||
icon: const Icon(FeatherIcons.x),
|
icon: const Icon(FeatherIcons.x),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
@ -81,8 +91,10 @@ class _UserNicknameEditorState extends State<UserNicknameEditor> {
|
|||||||
style: const TextStyle(fontWeight: FontWeight.w500),
|
style: const TextStyle(fontWeight: FontWeight.w500),
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
user.user!.nickname = _userName.text.trim();
|
widget.u.nickname = _userName.text.trim();
|
||||||
Provider.of<DatabaseProvider>(context, listen: false).store.storeUser(user.user!);
|
Provider.of<DatabaseProvider>(context, listen: false)
|
||||||
|
.store
|
||||||
|
.storeUser(widget.u);
|
||||||
Provider.of<UserProvider>(context, listen: false).refresh();
|
Provider.of<UserProvider>(context, listen: false).refresh();
|
||||||
Navigator.of(context).pop(true);
|
Navigator.of(context).pop(true);
|
||||||
},
|
},
|
||||||
|
@ -4,6 +4,7 @@ import 'dart:io';
|
|||||||
|
|
||||||
import 'package:filcnaplo/api/providers/database_provider.dart';
|
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_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:filcnaplo_premium/models/premium_scopes.dart';
|
import 'package:filcnaplo_premium/models/premium_scopes.dart';
|
||||||
import 'package:filcnaplo_premium/providers/premium_provider.dart';
|
import 'package:filcnaplo_premium/providers/premium_provider.dart';
|
||||||
@ -14,8 +15,11 @@ import 'package:filcnaplo_mobile_ui/screens/settings/settings_screen.i18n.dart';
|
|||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
import 'package:image_picker/image_picker.dart';
|
||||||
|
|
||||||
|
// ignore: must_be_immutable
|
||||||
class UserMenuProfilePic extends StatelessWidget {
|
class UserMenuProfilePic extends StatelessWidget {
|
||||||
const UserMenuProfilePic({Key? key}) : super(key: key);
|
late User u;
|
||||||
|
|
||||||
|
UserMenuProfilePic(User u, {Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -27,8 +31,7 @@ class UserMenuProfilePic extends StatelessWidget {
|
|||||||
return BottomSheetMenuItem(
|
return BottomSheetMenuItem(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context, builder: (context) => UserProfilePicEditor(u));
|
||||||
builder: (context) => const UserProfilePicEditor());
|
|
||||||
},
|
},
|
||||||
icon: const Icon(FeatherIcons.camera),
|
icon: const Icon(FeatherIcons.camera),
|
||||||
title: Text("edit_profile_picture".i18n),
|
title: Text("edit_profile_picture".i18n),
|
||||||
@ -36,8 +39,11 @@ class UserMenuProfilePic extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ignore: must_be_immutable
|
||||||
class UserProfilePicEditor extends StatefulWidget {
|
class UserProfilePicEditor extends StatefulWidget {
|
||||||
const UserProfilePicEditor({Key? key}) : super(key: key);
|
late User u;
|
||||||
|
|
||||||
|
UserProfilePicEditor(User u, {Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<UserProfilePicEditor> createState() => _UserProfilePicEditorState();
|
State<UserProfilePicEditor> createState() => _UserProfilePicEditorState();
|
||||||
@ -101,10 +107,10 @@ class _UserProfilePicEditorState extends State<UserProfilePicEditor> {
|
|||||||
Future<void> _cropImage() async {
|
Future<void> _cropImage() async {
|
||||||
List<int> imageBytes = await _file!.readAsBytes();
|
List<int> imageBytes = await _file!.readAsBytes();
|
||||||
String base64Image = base64Encode(imageBytes);
|
String base64Image = base64Encode(imageBytes);
|
||||||
user.user!.picture = base64Image;
|
widget.u.picture = base64Image;
|
||||||
Provider.of<DatabaseProvider>(context, listen: false)
|
Provider.of<DatabaseProvider>(context, listen: false)
|
||||||
.store
|
.store
|
||||||
.storeUser(user.user!);
|
.storeUser(widget.u);
|
||||||
Provider.of<UserProvider>(context, listen: false).refresh();
|
Provider.of<UserProvider>(context, listen: false).refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +143,7 @@ class _UserProfilePicEditorState extends State<UserProfilePicEditor> {
|
|||||||
const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
const EdgeInsets.symmetric(vertical: 12.0, horizontal: 24.0),
|
||||||
child: openImageWidget(),
|
child: openImageWidget(),
|
||||||
),
|
),
|
||||||
if (user.user!.picture != "")
|
if (widget.u.picture != "")
|
||||||
TextButton(
|
TextButton(
|
||||||
child: Text(
|
child: Text(
|
||||||
"remove_profile_picture".i18n,
|
"remove_profile_picture".i18n,
|
||||||
@ -145,10 +151,10 @@ class _UserProfilePicEditorState extends State<UserProfilePicEditor> {
|
|||||||
fontWeight: FontWeight.w500, color: Colors.red),
|
fontWeight: FontWeight.w500, color: Colors.red),
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
user.user!.picture = "";
|
widget.u.picture = "";
|
||||||
Provider.of<DatabaseProvider>(context, listen: false)
|
Provider.of<DatabaseProvider>(context, listen: false)
|
||||||
.store
|
.store
|
||||||
.storeUser(user.user!);
|
.storeUser(widget.u);
|
||||||
Provider.of<UserProvider>(context, listen: false).refresh();
|
Provider.of<UserProvider>(context, listen: false).refresh();
|
||||||
Navigator.of(context).pop(true);
|
Navigator.of(context).pop(true);
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user