forked from firka/student-legacy
added welcome message to settings
This commit is contained in:
parent
a11ebce6fb
commit
b4ff2fa815
@ -33,6 +33,7 @@ const settingsDB = DatabaseStruct("settings", {
|
|||||||
"renamed_subjects_italics": int, "renamed_teachers_enabled": int,
|
"renamed_subjects_italics": int, "renamed_teachers_enabled": int,
|
||||||
"renamed_teachers_italics": int,
|
"renamed_teachers_italics": int,
|
||||||
"live_activity_color": String,
|
"live_activity_color": String,
|
||||||
|
"welcome_message": String,
|
||||||
});
|
});
|
||||||
// DON'T FORGET TO UPDATE DEFAULT VALUES IN `initDB` MIGRATION OR ELSE PARENTS WILL COMPLAIN ABOUT THEIR CHILDREN MISSING
|
// DON'T FORGET TO UPDATE DEFAULT VALUES IN `initDB` MIGRATION OR ELSE PARENTS WILL COMPLAIN ABOUT THEIR CHILDREN MISSING
|
||||||
// YOU'VE BEEN WARNED!!!
|
// YOU'VE BEEN WARNED!!!
|
||||||
|
@ -76,6 +76,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
bool _renamedTeachersEnabled;
|
bool _renamedTeachersEnabled;
|
||||||
bool _renamedTeachersItalics;
|
bool _renamedTeachersItalics;
|
||||||
Color _liveActivityColor;
|
Color _liveActivityColor;
|
||||||
|
String _welcomeMessage;
|
||||||
|
|
||||||
SettingsProvider({
|
SettingsProvider({
|
||||||
DatabaseProvider? database,
|
DatabaseProvider? database,
|
||||||
@ -120,6 +121,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
required bool renameTeachersEnabled,
|
required bool renameTeachersEnabled,
|
||||||
required bool renameTeachersItalics,
|
required bool renameTeachersItalics,
|
||||||
required Color liveActivityColor,
|
required Color liveActivityColor,
|
||||||
|
required String welcomeMessage,
|
||||||
}) : _database = database,
|
}) : _database = database,
|
||||||
_language = language,
|
_language = language,
|
||||||
_startPage = startPage,
|
_startPage = startPage,
|
||||||
@ -161,7 +163,8 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
_renamedSubjectsItalics = renameSubjectsItalics,
|
_renamedSubjectsItalics = renameSubjectsItalics,
|
||||||
_renamedTeachersEnabled = renameTeachersEnabled,
|
_renamedTeachersEnabled = renameTeachersEnabled,
|
||||||
_renamedTeachersItalics = renameTeachersItalics,
|
_renamedTeachersItalics = renameTeachersItalics,
|
||||||
_liveActivityColor = liveActivityColor;
|
_liveActivityColor = liveActivityColor,
|
||||||
|
_welcomeMessage = welcomeMessage;
|
||||||
|
|
||||||
factory SettingsProvider.fromMap(Map map,
|
factory SettingsProvider.fromMap(Map map,
|
||||||
{required DatabaseProvider database}) {
|
{required DatabaseProvider database}) {
|
||||||
@ -223,6 +226,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
renameTeachersEnabled: map["renamed_teachers_enabled"] == 1,
|
renameTeachersEnabled: map["renamed_teachers_enabled"] == 1,
|
||||||
renameTeachersItalics: map["renamed_teachers_italics"] == 1,
|
renameTeachersItalics: map["renamed_teachers_italics"] == 1,
|
||||||
liveActivityColor: Color(map["live_activity_color"]),
|
liveActivityColor: Color(map["live_activity_color"]),
|
||||||
|
welcomeMessage: map["welcome_message"],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,6 +276,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
"renamed_teachers_enabled": _renamedTeachersEnabled ? 1 : 0,
|
"renamed_teachers_enabled": _renamedTeachersEnabled ? 1 : 0,
|
||||||
"renamed_teachers_italics": _renamedTeachersItalics ? 1 : 0,
|
"renamed_teachers_italics": _renamedTeachersItalics ? 1 : 0,
|
||||||
"live_activity_color": _liveActivityColor.value,
|
"live_activity_color": _liveActivityColor.value,
|
||||||
|
"welcome_message": _welcomeMessage,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,6 +330,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
renameTeachersEnabled: false,
|
renameTeachersEnabled: false,
|
||||||
renameTeachersItalics: false,
|
renameTeachersItalics: false,
|
||||||
liveActivityColor: const Color(0xFF676767),
|
liveActivityColor: const Color(0xFF676767),
|
||||||
|
welcomeMessage: '',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,6 +379,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
bool get renamedTeachersEnabled => _renamedTeachersEnabled;
|
bool get renamedTeachersEnabled => _renamedTeachersEnabled;
|
||||||
bool get renamedTeachersItalics => _renamedTeachersItalics;
|
bool get renamedTeachersItalics => _renamedTeachersItalics;
|
||||||
Color get liveActivityColor => _liveActivityColor;
|
Color get liveActivityColor => _liveActivityColor;
|
||||||
|
String get welcomeMessage => _welcomeMessage;
|
||||||
|
|
||||||
Future<void> update({
|
Future<void> update({
|
||||||
bool store = true,
|
bool store = true,
|
||||||
@ -417,6 +424,7 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
bool? renamedTeachersEnabled,
|
bool? renamedTeachersEnabled,
|
||||||
bool? renamedTeachersItalics,
|
bool? renamedTeachersItalics,
|
||||||
Color? liveActivityColor,
|
Color? liveActivityColor,
|
||||||
|
String? welcomeMessage,
|
||||||
}) async {
|
}) async {
|
||||||
if (language != null && language != _language) _language = language;
|
if (language != null && language != _language) _language = language;
|
||||||
if (startPage != null && startPage != _startPage) _startPage = startPage;
|
if (startPage != null && startPage != _startPage) _startPage = startPage;
|
||||||
@ -535,6 +543,9 @@ class SettingsProvider extends ChangeNotifier {
|
|||||||
if (liveActivityColor != null && liveActivityColor != _liveActivityColor) {
|
if (liveActivityColor != null && liveActivityColor != _liveActivityColor) {
|
||||||
_liveActivityColor = liveActivityColor;
|
_liveActivityColor = liveActivityColor;
|
||||||
}
|
}
|
||||||
|
if (welcomeMessage != null && welcomeMessage != _welcomeMessage) {
|
||||||
|
_welcomeMessage = welcomeMessage;
|
||||||
|
}
|
||||||
if (store) await _database?.store.storeSettings(this);
|
if (store) await _database?.store.storeSettings(this);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ import 'package:filcnaplo_premium/ui/mobile/settings/profile_pic.dart';
|
|||||||
import 'package:filcnaplo_premium/ui/mobile/settings/icon_pack.dart';
|
import 'package:filcnaplo_premium/ui/mobile/settings/icon_pack.dart';
|
||||||
import 'package:filcnaplo_premium/ui/mobile/settings/modify_subject_names.dart';
|
import 'package:filcnaplo_premium/ui/mobile/settings/modify_subject_names.dart';
|
||||||
import 'package:filcnaplo_premium/ui/mobile/settings/modify_teacher_names.dart';
|
import 'package:filcnaplo_premium/ui/mobile/settings/modify_teacher_names.dart';
|
||||||
|
import 'package:filcnaplo_premium/ui/mobile/settings/welcome_message.dart';
|
||||||
|
|
||||||
class SettingsScreen extends StatefulWidget {
|
class SettingsScreen extends StatefulWidget {
|
||||||
const SettingsScreen({Key? key}) : super(key: key);
|
const SettingsScreen({Key? key}) : super(key: key);
|
||||||
@ -454,6 +455,7 @@ class _SettingsScreenState extends State<SettingsScreen>
|
|||||||
Material(
|
Material(
|
||||||
type: MaterialType.transparency,
|
type: MaterialType.transparency,
|
||||||
child: MenuNotifications(settings: settings)),
|
child: MenuNotifications(settings: settings)),
|
||||||
|
WelcomeMessagePanelButton(settings, user),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -73,6 +73,9 @@ extension SettingsLocalization on String {
|
|||||||
"devsettings": "Developer Settings",
|
"devsettings": "Developer Settings",
|
||||||
"devmode": "Developer Mode",
|
"devmode": "Developer Mode",
|
||||||
"copy_jwt": "Copy JWT",
|
"copy_jwt": "Copy JWT",
|
||||||
|
"welcome_msg": "Welcome Message",
|
||||||
|
"default": "Default",
|
||||||
|
"edit_welcome_msg": "Edit welcome message",
|
||||||
},
|
},
|
||||||
"hu_hu": {
|
"hu_hu": {
|
||||||
"personal_details": "Személyes információk",
|
"personal_details": "Személyes információk",
|
||||||
@ -144,6 +147,9 @@ extension SettingsLocalization on String {
|
|||||||
"devsettings": "Fejlesztői Beállítások",
|
"devsettings": "Fejlesztői Beállítások",
|
||||||
"devmode": "Fejlesztői mód",
|
"devmode": "Fejlesztői mód",
|
||||||
"copy_jwt": "JWT másolása",
|
"copy_jwt": "JWT másolása",
|
||||||
|
"welcome_msg": "Üdvözlő üzenet",
|
||||||
|
"default": "Alapértelmezett",
|
||||||
|
"edit_welcome_msg": "Üdvözlő üzenet szerkesztése",
|
||||||
},
|
},
|
||||||
"de_de": {
|
"de_de": {
|
||||||
"personal_details": "Persönliche Angaben",
|
"personal_details": "Persönliche Angaben",
|
||||||
@ -214,6 +220,9 @@ extension SettingsLocalization on String {
|
|||||||
"devsettings": "Entwickleroptionen",
|
"devsettings": "Entwickleroptionen",
|
||||||
"devmode": "Entwicklermodus",
|
"devmode": "Entwicklermodus",
|
||||||
"copy_jwt": "JWT kopieren",
|
"copy_jwt": "JWT kopieren",
|
||||||
|
"welcome_msg": "Willkommensnachricht",
|
||||||
|
"default": "Standard",
|
||||||
|
"edit_welcome_msg": "Begrüßungsnachricht bearbeiten",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
142
filcnaplo_premium/lib/ui/mobile/settings/welcome_message.dart
Normal file
142
filcnaplo_premium/lib/ui/mobile/settings/welcome_message.dart
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
import 'package:filcnaplo/api/providers/user_provider.dart';
|
||||||
|
import 'package:filcnaplo/models/settings.dart';
|
||||||
|
import 'package:filcnaplo_mobile_ui/common/panel/panel_button.dart';
|
||||||
|
import 'package:filcnaplo_premium/models/premium_scopes.dart';
|
||||||
|
import 'package:filcnaplo_premium/providers/premium_provider.dart';
|
||||||
|
import 'package:filcnaplo_premium/ui/mobile/premium/upsell.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
||||||
|
import 'package:filcnaplo_mobile_ui/screens/settings/settings_screen.i18n.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:i18n_extension/i18n_extension.dart';
|
||||||
|
|
||||||
|
// ignore: must_be_immutable
|
||||||
|
class WelcomeMessagePanelButton extends StatelessWidget {
|
||||||
|
late SettingsProvider settingsProvider;
|
||||||
|
late UserProvider user;
|
||||||
|
|
||||||
|
WelcomeMessagePanelButton(this.settingsProvider, this.user, {Key? key})
|
||||||
|
: super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
String finalName = ((user.nickname ?? '') != ''
|
||||||
|
? user.nickname
|
||||||
|
: (user.displayName ?? '') != ''
|
||||||
|
? user.displayName
|
||||||
|
: 'János') ??
|
||||||
|
'János';
|
||||||
|
|
||||||
|
return PanelButton(
|
||||||
|
onPressed: () {
|
||||||
|
if (!Provider.of<PremiumProvider>(context, listen: false)
|
||||||
|
.hasScope(PremiumScopes.all)) {
|
||||||
|
PremiumLockedFeatureUpsell.show(
|
||||||
|
context: context, feature: PremiumFeature.profile);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) => WelcomeMessageEditor(settingsProvider));
|
||||||
|
},
|
||||||
|
title: Text("welcome_msg".i18n),
|
||||||
|
leading: const Icon(FeatherIcons.smile),
|
||||||
|
trailing: SizedBox(
|
||||||
|
width: 100,
|
||||||
|
child: Expanded(
|
||||||
|
child: Text(
|
||||||
|
settingsProvider.welcomeMessage != ''
|
||||||
|
? localizeFill(
|
||||||
|
settingsProvider.welcomeMessage,
|
||||||
|
[finalName, finalName, finalName],
|
||||||
|
)
|
||||||
|
: 'default'.i18n,
|
||||||
|
style: const TextStyle(fontSize: 14.0),
|
||||||
|
textAlign: TextAlign.end,
|
||||||
|
softWrap: true,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ignore: must_be_immutable
|
||||||
|
class WelcomeMessageEditor extends StatefulWidget {
|
||||||
|
late SettingsProvider settingsProvider;
|
||||||
|
|
||||||
|
WelcomeMessageEditor(this.settingsProvider, {Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<WelcomeMessageEditor> createState() => _WelcomeMessageEditorState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _WelcomeMessageEditorState extends State<WelcomeMessageEditor> {
|
||||||
|
final _welcomeMsg = TextEditingController();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
_welcomeMsg.text =
|
||||||
|
widget.settingsProvider.welcomeMessage.replaceAll('%s', '%name%');
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: Text("edit_welcome_msg".i18n),
|
||||||
|
content: TextField(
|
||||||
|
controller: _welcomeMsg,
|
||||||
|
autofocus: true,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
border: const OutlineInputBorder(),
|
||||||
|
label: Text('welcome_msg'.i18n),
|
||||||
|
suffixIcon: IconButton(
|
||||||
|
icon: const Icon(FeatherIcons.x),
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
_welcomeMsg.text = "";
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
child: Text(
|
||||||
|
"cancel".i18n,
|
||||||
|
style: const TextStyle(fontWeight: FontWeight.w500),
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).maybePop();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
child: Text(
|
||||||
|
"done".i18n,
|
||||||
|
style: const TextStyle(fontWeight: FontWeight.w500),
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
// var trimmed = _welcomeMsg.text.trim();
|
||||||
|
|
||||||
|
// var defLen = trimmed.length;
|
||||||
|
// var replacedLen = trimmed.replaceAll('%s', '').length;
|
||||||
|
|
||||||
|
// if (defLen - 2 > replacedLen) {
|
||||||
|
// print('fuck yourself rn');
|
||||||
|
// }
|
||||||
|
var finalText = _welcomeMsg.text
|
||||||
|
.trim()
|
||||||
|
.replaceAll('%s', '')
|
||||||
|
.replaceFirst('%name%', '%s');
|
||||||
|
|
||||||
|
widget.settingsProvider
|
||||||
|
.update(welcomeMessage: finalText, store: true);
|
||||||
|
Navigator.of(context).pop(true);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user