forked from firka/student-legacy
move some settings to extras
This commit is contained in:
parent
eb0308cbed
commit
8925b3a5f8
44
.idea/libraries/Dart_SDK.xml
generated
44
.idea/libraries/Dart_SDK.xml
generated
@ -1,28 +1,28 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Dart SDK">
|
||||
<CLASSES>
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/async" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/cli" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/collection" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/concurrent" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/convert" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/core" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/developer" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/ffi" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/html" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/indexed_db" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/io" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/isolate" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/js" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/js_interop" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/js_interop_unsafe" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/js_util" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/math" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/mirrors" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/svg" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/typed_data" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/web_audio" />
|
||||
<root url="file://$USER_HOME$/3D Objects/dart-sdk/lib/web_gl" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/async" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/cli" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/collection" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/concurrent" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/convert" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/core" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/developer" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/ffi" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/html" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/indexed_db" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/io" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/isolate" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/js" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/js_interop" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/js_interop_unsafe" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/js_util" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/math" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/mirrors" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/svg" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/typed_data" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/web_audio" />
|
||||
<root url="file://P:/flutter/bin/cache/dart-sdk/lib/web_gl" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
|
@ -92,7 +92,6 @@ class SettingsScreen extends StatefulWidget {
|
||||
class SettingsScreenState extends State<SettingsScreen>
|
||||
with SingleTickerProviderStateMixin {
|
||||
int devmodeCountdown = 5;
|
||||
bool __ss = false; // secret settings
|
||||
|
||||
Future<Map>? futureRelease;
|
||||
|
||||
@ -107,8 +106,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
|
||||
late AnimationController _hideContainersController;
|
||||
|
||||
Future<void> restore() =>
|
||||
Future.wait([
|
||||
Future<void> restore() => Future.wait([
|
||||
Provider.of<GradeProvider>(context, listen: false).restore(),
|
||||
Provider.of<TimetableProvider>(context, listen: false).restoreUser(),
|
||||
Provider.of<ExamProvider>(context, listen: false).restore(),
|
||||
@ -153,8 +151,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
name: _firstName,
|
||||
role: account.role,
|
||||
profilePictureString: account.picture,
|
||||
backgroundColor: Theme
|
||||
.of(context)
|
||||
backgroundColor: Theme.of(context)
|
||||
.colorScheme
|
||||
.tertiary, //!settings.presentationMode
|
||||
//? ColorUtils.stringToColor(account.name)
|
||||
@ -168,8 +165,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
if (err != null) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (_) =>
|
||||
AlertDialog(
|
||||
builder: (_) => AlertDialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text('oopsie'.i18n),
|
||||
@ -183,26 +179,16 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
|
||||
// delete user
|
||||
user.removeUser(userId);
|
||||
await Provider
|
||||
.of<DatabaseProvider>(context,
|
||||
await Provider.of<DatabaseProvider>(context,
|
||||
listen: false)
|
||||
.store
|
||||
.removeUser(userId);
|
||||
|
||||
// if no users, show login, else login with back button
|
||||
if (user
|
||||
.getUsers()
|
||||
.isNotEmpty) {
|
||||
user.setUser(user
|
||||
.getUsers()
|
||||
.first
|
||||
.id);
|
||||
if (user.getUsers().isNotEmpty) {
|
||||
user.setUser(user.getUsers().first.id);
|
||||
restore().then(
|
||||
(_) =>
|
||||
user.setUser(user
|
||||
.getUsers()
|
||||
.first
|
||||
.id));
|
||||
(_) => user.setUser(user.getUsers().first.id));
|
||||
|
||||
Navigator.of(context).pop();
|
||||
Navigator.of(context)
|
||||
@ -213,8 +199,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
} else {
|
||||
Navigator.of(context).pop();
|
||||
Navigator.of(context)
|
||||
.pushNamedAndRemoveUntil(
|
||||
"login", (_) => false);
|
||||
.pushNamedAndRemoveUntil("login", (_) => false);
|
||||
}
|
||||
})
|
||||
],
|
||||
@ -260,17 +245,14 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
]);
|
||||
}
|
||||
|
||||
void _openDKT(User u) =>
|
||||
tabs.launchUrl(
|
||||
void _openDKT(User u) => tabs.launchUrl(
|
||||
Uri.parse(
|
||||
"https://dkttanulo.e-kreta.hu/sso?id_token=${kretaClient.idToken}"),
|
||||
customTabsOptions: tabs.CustomTabsOptions(
|
||||
showTitle: true,
|
||||
colorSchemes: tabs.CustomTabsColorSchemes(
|
||||
defaultPrams: tabs.CustomTabsColorSchemeParams(
|
||||
toolbarColor: Theme
|
||||
.of(context)
|
||||
.scaffoldBackgroundColor,
|
||||
toolbarColor: Theme.of(context).scaffoldBackgroundColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -336,8 +318,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
|
||||
return AnimatedBuilder(
|
||||
animation: _hideContainersController,
|
||||
builder: (context, child) =>
|
||||
Opacity(
|
||||
builder: (context, child) => Opacity(
|
||||
opacity: 1 - _hideContainersController.value,
|
||||
child: Column(
|
||||
children: [
|
||||
@ -386,10 +367,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
icon: Icon(FeatherIcons.x,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.8)),
|
||||
color: AppColors.of(context).text.withOpacity(0.8)),
|
||||
),
|
||||
const SizedBox(
|
||||
width: 5.0,
|
||||
@ -410,8 +388,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
role: user.role,
|
||||
profilePictureString: user.picture,
|
||||
gradeStreak: (user.gradeStreak ?? 0) > 1,
|
||||
backgroundColor: Theme
|
||||
.of(context)
|
||||
backgroundColor: Theme.of(context)
|
||||
.colorScheme
|
||||
.tertiary, //!settings.presentationMode
|
||||
//? ColorUtils.stringToColor(user.displayName ?? "?")
|
||||
@ -423,7 +400,6 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
padding: const EdgeInsets.only(top: 4.0, bottom: 12.0),
|
||||
child: GestureDetector(
|
||||
onTap: () => _showBottomSheet(user.getUser(user.id ?? "")),
|
||||
onDoubleTap: () => setState(() => __ss = true),
|
||||
child: Text(
|
||||
!settings.presentationMode
|
||||
? (user.displayName ?? "?")
|
||||
@ -435,9 +411,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
style: TextStyle(
|
||||
fontSize: 22.0,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text),
|
||||
color: AppColors.of(context).text),
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -458,14 +432,10 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.info,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
bottom: Radius.circular(4.0)),
|
||||
top: Radius.circular(12.0), bottom: Radius.circular(4.0)),
|
||||
),
|
||||
// open dcs (digital collaboration space)
|
||||
PanelButton(
|
||||
@ -474,14 +444,10 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.grid,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(4.0)),
|
||||
top: Radius.circular(4.0), bottom: Radius.circular(4.0)),
|
||||
),
|
||||
// edit user
|
||||
PanelButton(
|
||||
@ -491,14 +457,10 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.edit3,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(4.0)),
|
||||
top: Radius.circular(4.0), bottom: Radius.circular(4.0)),
|
||||
),
|
||||
// switch account
|
||||
PanelButton(
|
||||
@ -515,14 +477,10 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.users,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(4.0)),
|
||||
top: Radius.circular(4.0), bottom: Radius.circular(4.0)),
|
||||
),
|
||||
// log user out
|
||||
PanelButton(
|
||||
@ -532,25 +490,15 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
|
||||
// delete user
|
||||
user.removeUser(userId);
|
||||
await Provider
|
||||
.of<DatabaseProvider>(context, listen: false)
|
||||
await Provider.of<DatabaseProvider>(context, listen: false)
|
||||
.store
|
||||
.removeUser(userId);
|
||||
|
||||
// if no users, show login
|
||||
if (user
|
||||
.getUsers()
|
||||
.isNotEmpty) {
|
||||
user.setUser(user
|
||||
.getUsers()
|
||||
.first
|
||||
.id);
|
||||
if (user.getUsers().isNotEmpty) {
|
||||
user.setUser(user.getUsers().first.id);
|
||||
restore()
|
||||
.then((_) =>
|
||||
user.setUser(user
|
||||
.getUsers()
|
||||
.first
|
||||
.id));
|
||||
.then((_) => user.setUser(user.getUsers().first.id));
|
||||
} else {
|
||||
Navigator.of(context)
|
||||
.pushNamedAndRemoveUntil("login", (_) => false);
|
||||
@ -559,14 +507,11 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
title: Text("log_out".i18n),
|
||||
leading: Icon(
|
||||
FeatherIcons.logOut,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.red,
|
||||
color: AppColors.of(context).red,
|
||||
size: 22.0,
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(12.0)),
|
||||
top: Radius.circular(4.0), bottom: Radius.circular(12.0)),
|
||||
),
|
||||
// SplittedMenuOption(
|
||||
// padding: const EdgeInsets.all(8.0),
|
||||
@ -670,10 +615,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
updateProvider.releases.first.tag,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme
|
||||
.of(context)
|
||||
.colorScheme
|
||||
.secondary,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -697,174 +639,23 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
// child: ActiveSponsorCard(),
|
||||
// ),
|
||||
|
||||
// secret settings
|
||||
if (__ss)
|
||||
SplittedPanel(
|
||||
isSeparated: true,
|
||||
isTransparent: true,
|
||||
hasShadow: false,
|
||||
children: [
|
||||
SplittedPanel(
|
||||
title: Text("secret".i18n),
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
padding: EdgeInsets.zero,
|
||||
children: [
|
||||
// good student mode
|
||||
Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0, right: 6.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("goodstudent".i18n,
|
||||
style:
|
||||
const TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) {
|
||||
if (v) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) =>
|
||||
WillPopScope(
|
||||
onWillPop: () async => false,
|
||||
child: AlertDialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
BorderRadius.circular(12.0)),
|
||||
title: Text("attention".i18n),
|
||||
content:
|
||||
Text("goodstudent_disclaimer".i18n),
|
||||
actions: [
|
||||
ActionButton(
|
||||
label: "understand".i18n,
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
settings.update(
|
||||
goodStudent: v);
|
||||
Provider.of<GradeProvider>(
|
||||
context,
|
||||
listen: false)
|
||||
.convertBySettings();
|
||||
})
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
settings.update(goodStudent: v);
|
||||
Provider.of<GradeProvider>(
|
||||
context, listen: false)
|
||||
.convertBySettings();
|
||||
}
|
||||
},
|
||||
value: settings.goodStudent,
|
||||
activeColor: Theme
|
||||
.of(context)
|
||||
.colorScheme
|
||||
.secondary,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SplittedPanel(
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
padding: EdgeInsets.zero,
|
||||
children: [
|
||||
// presentation mode
|
||||
Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0, right: 6.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("presentation".i18n,
|
||||
style:
|
||||
const TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) =>
|
||||
settings.update(presentationMode: v),
|
||||
value: settings.presentationMode,
|
||||
activeColor: Theme
|
||||
.of(context)
|
||||
.colorScheme
|
||||
.secondary,
|
||||
),
|
||||
),
|
||||
|
||||
// UwU-fied mode (why????)
|
||||
// Material(
|
||||
// type: MaterialType.transparency,
|
||||
// child: SwitchListTile(
|
||||
// contentPadding: const EdgeInsets.only(left: 12.0),
|
||||
// shape: RoundedRectangleBorder(
|
||||
// borderRadius: BorderRadius.circular(12.0)),
|
||||
// title: Text("uwufymode".i18n,
|
||||
// style:
|
||||
// const TextStyle(fontWeight: FontWeight.w500)),
|
||||
// onChanged: (v) {
|
||||
// SettingsHelper.uwuMode(context, v);
|
||||
// setState(() {});
|
||||
// },
|
||||
// value: settings.presentationMode,
|
||||
// activeColor: Theme.of(context).colorScheme.secondary,
|
||||
// ),
|
||||
// ),
|
||||
],
|
||||
),
|
||||
// uwu mode
|
||||
// since it is not working i removed it
|
||||
/*SplittedPanel(
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
padding: EdgeInsets.zero,
|
||||
children: [
|
||||
// uwu mode
|
||||
Material(
|
||||
type: MaterialType.transparency,
|
||||
child: SwitchListTile(
|
||||
contentPadding:
|
||||
const EdgeInsets.only(left: 12.0, right: 6.0),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("uwufymode".i18n,
|
||||
style:
|
||||
const TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) => settings.update(uwuMode: v),
|
||||
value: settings.uwuMode,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
],
|
||||
),*/
|
||||
],
|
||||
),
|
||||
|
||||
if ((user.gradeStreak ?? 0) > 1)
|
||||
SplittedPanel(
|
||||
padding: const EdgeInsets.only(
|
||||
bottom: 12.0, left: 24.0, right: 24.0),
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
SoonAlert.show(context: context);
|
||||
},
|
||||
child: ListTile(
|
||||
ListTile(
|
||||
title: Text(
|
||||
"grade_streak".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
subtitle: Text(
|
||||
"grade_streak_subtitle".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.75),
|
||||
color: AppColors.of(context).text.withOpacity(0.75),
|
||||
),
|
||||
),
|
||||
leading: Image.asset(
|
||||
@ -878,96 +669,26 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
trailing: Text(
|
||||
"${user.gradeStreak}",
|
||||
style: TextStyle(
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
fontWeight: FontWeight.w500,
|
||||
fontSize: 18.0,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
// plus subscribe inline
|
||||
const PlusSettingsInline(),
|
||||
|
||||
// const SizedBox(
|
||||
// height: 16.0,
|
||||
// ),
|
||||
|
||||
// Panel(
|
||||
// hasShadow: false,
|
||||
// padding: const EdgeInsets.only(left: 24.0, right: 24.0),
|
||||
// title: Padding(
|
||||
// padding: const EdgeInsets.only(left: 24.0),
|
||||
// child: Text('account_link'.i18n),
|
||||
// ),
|
||||
// isTransparent: true,
|
||||
// child: Column(
|
||||
// children: [
|
||||
// // QwID account linking
|
||||
// PanelButton(
|
||||
// onPressed: () {
|
||||
// launchUrl(
|
||||
// Uri.parse(
|
||||
// 'https://qwid.qwit.dev/oauth2/authorize?client_id=refilc&response_type=code&scope=*'),
|
||||
// mode: LaunchMode.externalApplication,
|
||||
// );
|
||||
// },
|
||||
// title: Text("QwID fiók-összekapcsolás".i18n),
|
||||
// leading: Icon(
|
||||
// FeatherIcons.link,
|
||||
// size: 22.0,
|
||||
// color: AppColors.of(context).text.withOpacity(0.95),
|
||||
// ),
|
||||
// trailing: GestureDetector(
|
||||
// onTap: () {
|
||||
// showDialog(
|
||||
// context: context,
|
||||
// builder: (BuildContext context) {
|
||||
// return AlertDialog(
|
||||
// title: const Text("QwID?!"),
|
||||
// content: const Text(
|
||||
// "A QwID egy olyan fiók, mellyel az összes QwIT szolgáltatásba beléphetsz és minden adatod egy helyen kezelheted. \"Miért jó ez nekem?\" A QwID fiókba való bejelentkezéssel rengeteg új funkcióhoz férhetsz hozzá, ami sajnos korábban lehetetlen volt egy szimpla e-KRÉTA fiókkal. Fiókhoz kötve megoszthatsz bármilyen adatot a barátaiddal, vagy ha szeretnéd nyilvánosságra is hozhatod jegyeid, reFilc témáid, és még rengeteg dolgot. A QwID fiók abban is segít, hogy egyszerűbben kezelhesd előfizetéseid, valamint fiókodnak köszönhetően rengeteg ajándékot kaphatsz reFilc+ előfizetésed mellé egyéb QwIT és reFilc szolgáltatásokban. \"Miért QwID?\" A név a reFilc mögött álló fejlesztői csapat, a QwIT nevéből, valamint az angol Identity szó rövidítéséből ered. \"Egyéb hasznos tudnivalók?\" A QwID fiókodat bármikor törölheted, ha úgy érzed, hogy nem szeretnéd tovább használni. Bővebb információt az adatkezelésről és az általános feltételekről megtalálsz a regisztrációs oldalon. Fiókod kezeléséhez látogass el a qwid.qwit.dev weboldalra.",
|
||||
// ),
|
||||
// actions: [
|
||||
// TextButton(
|
||||
// onPressed: () {
|
||||
// Navigator.of(context).pop();
|
||||
// },
|
||||
// child: const Text("Szuper!"),
|
||||
// ),
|
||||
// ],
|
||||
// );
|
||||
// },
|
||||
// );
|
||||
// },
|
||||
// child: Icon(
|
||||
// FeatherIcons.helpCircle,
|
||||
// size: 20.0,
|
||||
// color: AppColors.of(context).text.withOpacity(0.95),
|
||||
// ),
|
||||
// ),
|
||||
// borderRadius: const BorderRadius.vertical(
|
||||
// top: Radius.circular(12.0),
|
||||
// bottom: Radius.circular(4.0),
|
||||
// ),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
|
||||
// settings submenus
|
||||
const SizedBox(
|
||||
height: 16.0,
|
||||
),
|
||||
Panel(
|
||||
hasShadow: false,
|
||||
padding:
|
||||
const EdgeInsets.only(bottom: 20.0, left: 24.0, right: 24.0),
|
||||
padding: const EdgeInsets.only(bottom: 20.0, left: 24.0, right: 24.0),
|
||||
title: Padding(
|
||||
padding: const EdgeInsets.only(left: 24.0),
|
||||
child: Text('settings'.i18n),
|
||||
@ -977,13 +698,13 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
children: [
|
||||
// general settings
|
||||
const SplittedPanel(
|
||||
padding: EdgeInsets.zero,
|
||||
padding: const EdgeInsets.only(top: 8.0),
|
||||
cardPadding: EdgeInsets.all(4.0),
|
||||
children: [
|
||||
MenuGeneralSettings(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
bottom: Radius.circular(4.0),
|
||||
),
|
||||
),
|
||||
],
|
||||
@ -996,7 +717,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
children: [
|
||||
const MenuPersonalizeSettings(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(4.0),
|
||||
),
|
||||
),
|
||||
@ -1009,10 +730,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.sun,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
trailing: Text(
|
||||
themeModeText,
|
||||
@ -1020,25 +738,25 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
bottom: Radius.circular(4.0),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
// notifications
|
||||
const SplittedPanel(
|
||||
padding: EdgeInsets.only(top: 8.0),
|
||||
cardPadding: EdgeInsets.all(4.0),
|
||||
children: [
|
||||
/*MenuNotifications(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
),
|
||||
),*/
|
||||
],
|
||||
),
|
||||
//const SplittedPanel(
|
||||
// padding: EdgeInsets.only(top: 8.0),
|
||||
// cardPadding: EdgeInsets.all(4.0),
|
||||
// children: [
|
||||
// /*MenuNotifications(
|
||||
// borderRadius: BorderRadius.vertical(
|
||||
// top: Radius.circular(12.0),
|
||||
// bottom: Radius.circular(12.0),
|
||||
// ),
|
||||
// ),*/
|
||||
// ],
|
||||
//),
|
||||
|
||||
// extras
|
||||
const SplittedPanel(
|
||||
@ -1047,7 +765,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
children: [
|
||||
MenuExtrasSettings(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
top: Radius.circular(4.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
),
|
||||
),
|
||||
@ -1105,10 +823,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.mail,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
title: Text("news".i18n),
|
||||
onPressed: () => _openNews(context),
|
||||
@ -1121,14 +836,10 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.map,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
title: Text("stickermap".i18n),
|
||||
onPressed: () =>
|
||||
launchUrl(
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://map.qwit.cloud"),
|
||||
mode: LaunchMode.inAppBrowserView,
|
||||
),
|
||||
@ -1176,10 +887,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.lock,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
title: Text("privacy".i18n),
|
||||
onPressed: () => _openPrivacy(context),
|
||||
@ -1192,14 +900,11 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.atSign,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
title: const Text("Discord"),
|
||||
onPressed: () =>
|
||||
launchUrl(Uri.parse("https://discord.gg/6DvjyPAw2T"),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://discord.gg/6DvjyPAw2T"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0),
|
||||
@ -1224,16 +929,11 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.github,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
title: const Text("Gitea"),
|
||||
onPressed: () =>
|
||||
launchUrl(
|
||||
Uri.parse(
|
||||
"https://git.qwit.cloud/refilc/student-legacy"),
|
||||
onPressed: () => launchUrl(
|
||||
Uri.parse("https://git.qwit.cloud/refilc/student-legacy"),
|
||||
mode: LaunchMode.externalApplication),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0),
|
||||
@ -1244,10 +944,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.award,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
title: Text("licenses".i18n),
|
||||
onPressed: () => showLicensePage(context: context),
|
||||
@ -1262,14 +959,9 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
margin: const EdgeInsets.all(10.0),
|
||||
textStyle: TextStyle(
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text),
|
||||
color: AppColors.of(context).text),
|
||||
decoration: BoxDecoration(
|
||||
color: Theme
|
||||
.of(context)
|
||||
.colorScheme
|
||||
.surface,
|
||||
color: Theme.of(context).colorScheme.surface,
|
||||
borderRadius: BorderRadius.circular(12.0),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
@ -1293,35 +985,24 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
FeatherIcons.barChart2,
|
||||
size: 22.0,
|
||||
color: settings.analyticsEnabled
|
||||
? AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95)
|
||||
: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(.25),
|
||||
? AppColors.of(context).text.withOpacity(0.95)
|
||||
: AppColors.of(context).text.withOpacity(.25),
|
||||
),
|
||||
title: Text(
|
||||
"Analytics".i18n,
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w600,
|
||||
fontSize: 16.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(
|
||||
color: AppColors.of(context).text.withOpacity(
|
||||
settings.analyticsEnabled ? 1.0 : .5),
|
||||
),
|
||||
),
|
||||
subtitle: Text(
|
||||
"Anonymous Usage Analytics".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors
|
||||
.of(context)
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(
|
||||
settings.analyticsEnabled ? .5 : .2),
|
||||
.withOpacity(settings.analyticsEnabled ? .5 : .2),
|
||||
),
|
||||
),
|
||||
onChanged: (v) {
|
||||
@ -1336,10 +1017,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
settings.update(analyticsEnabled: v);
|
||||
},
|
||||
value: settings.analyticsEnabled,
|
||||
activeColor: Theme
|
||||
.of(context)
|
||||
.colorScheme
|
||||
.secondary,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -1347,14 +1025,10 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
Icons.feedback_outlined,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(0.95),
|
||||
color: AppColors.of(context).text.withOpacity(0.95),
|
||||
),
|
||||
title: Text("feedback".i18n),
|
||||
onPressed: () =>
|
||||
{
|
||||
onPressed: () => {
|
||||
Shake.setScreenshotIncluded(false),
|
||||
Shake.show(ShakeScreen.newTicket),
|
||||
Shake.setScreenshotIncluded(true),
|
||||
@ -1375,8 +1049,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
PanelButton(
|
||||
title: const Text('loginToGoogle'),
|
||||
onPressed: () async {
|
||||
ThirdPartyProvider tpp = Provider.of<
|
||||
ThirdPartyProvider>(
|
||||
ThirdPartyProvider tpp = Provider.of<ThirdPartyProvider>(
|
||||
context,
|
||||
listen: false);
|
||||
|
||||
@ -1414,15 +1087,10 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
top: Radius.circular(12.0),
|
||||
bottom: Radius.circular(4.0))),
|
||||
title: Text("devmode".i18n,
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) =>
|
||||
settings.update(developerMode: false),
|
||||
style: const TextStyle(fontWeight: FontWeight.w500)),
|
||||
onChanged: (v) => settings.update(developerMode: false),
|
||||
value: settings.developerMode,
|
||||
activeColor: Theme
|
||||
.of(context)
|
||||
.colorScheme
|
||||
.secondary,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
PanelButton(
|
||||
@ -1433,22 +1101,17 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
Icons.tune_outlined,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(.95),
|
||||
color: AppColors.of(context).text.withOpacity(.95),
|
||||
),
|
||||
title: Text("exp_settings".i18n),
|
||||
onPressed: () =>
|
||||
Clipboard.setData(ClipboardData(
|
||||
onPressed: () => Clipboard.setData(ClipboardData(
|
||||
text: json.encode(settings.toMap()),
|
||||
)),
|
||||
),
|
||||
PanelButton(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: const Radius.circular(4.0),
|
||||
bottom: Provider
|
||||
.of<PlusProvider>(context, listen: false)
|
||||
bottom: Provider.of<PlusProvider>(context, listen: false)
|
||||
.hasPremium
|
||||
? const Radius.circular(4.0)
|
||||
: const Radius.circular(12.0),
|
||||
@ -1456,20 +1119,14 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.copy,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(.95),
|
||||
color: AppColors.of(context).text.withOpacity(.95),
|
||||
),
|
||||
title: Text("copy_jwt".i18n),
|
||||
onPressed: () =>
|
||||
Clipboard.setData(ClipboardData(
|
||||
text: Provider
|
||||
.of<KretaClient>(context, listen: false)
|
||||
onPressed: () => Clipboard.setData(ClipboardData(
|
||||
text: Provider.of<KretaClient>(context, listen: false)
|
||||
.accessToken!)),
|
||||
),
|
||||
if (Provider
|
||||
.of<PlusProvider>(context, listen: false)
|
||||
if (Provider.of<PlusProvider>(context, listen: false)
|
||||
.hasPremium)
|
||||
PanelButton(
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
@ -1479,10 +1136,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
leading: Icon(
|
||||
FeatherIcons.key,
|
||||
size: 22.0,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
.text
|
||||
.withOpacity(.95),
|
||||
color: AppColors.of(context).text.withOpacity(.95),
|
||||
),
|
||||
title: const Text("Remove Premium"),
|
||||
onPressed: () {
|
||||
@ -1490,8 +1144,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
.activate(removePremium: true);
|
||||
settings.update(
|
||||
accentColor: AccentColor.filc, store: true);
|
||||
Provider.of<ThemeModeObserver>(
|
||||
context, listen: false)
|
||||
Provider.of<ThemeModeObserver>(context, listen: false)
|
||||
.changeTheme(settings.theme);
|
||||
},
|
||||
),
|
||||
@ -1508,21 +1161,18 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
builder: (context, release) {
|
||||
String versionText;
|
||||
if (release.hasData && release.data != null) {
|
||||
versionText = "v${release
|
||||
.data!['version']}, modosítva a Filc csapat által";
|
||||
} else {
|
||||
versionText =
|
||||
"reFilc, modosítva a Filc csapat által";
|
||||
"v${release.data!['version']}, modosítva a Filc csapat által";
|
||||
} else {
|
||||
versionText = "reFilc, modosítva a Filc csapat által";
|
||||
}
|
||||
return DefaultTextStyle(
|
||||
style: Theme
|
||||
.of(context)
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.titleMedium!
|
||||
.copyWith(
|
||||
fontWeight: FontWeight.w600,
|
||||
color: AppColors
|
||||
.of(context)
|
||||
color: AppColors.of(context)
|
||||
.text
|
||||
.withOpacity(0.65)),
|
||||
child: Text(versionText),
|
||||
@ -1553,8 +1203,7 @@ class SettingsScreenState extends State<SettingsScreen>
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -51,12 +51,8 @@ extension SettingsLocalization on String {
|
||||
"Analytics": "Analytics",
|
||||
"Anonymous Usage Analytics": "Anonymous Usage Analytics",
|
||||
"graph_class_avg": "Class average on graph",
|
||||
"goodstudent": "Good student mode",
|
||||
"attention": "Attention!",
|
||||
"goodstudent_disclaimer":
|
||||
"reFilc can not be held liable for the usage of this feature.\n\n(if your mother beats you up because you showed her fake grades, you can only blame yourself for it)",
|
||||
"understand": "I understand",
|
||||
"secret": "Secret Settings",
|
||||
"bell_delay": "Bell Delay",
|
||||
"delay": "Delay",
|
||||
"hurry": "Hurry",
|
||||
@ -69,7 +65,7 @@ extension SettingsLocalization on String {
|
||||
"Background Color": "Background Color",
|
||||
"Highlight Color": "Highlight Color",
|
||||
"Adaptive Theme": "Adaptive Theme",
|
||||
"presentation": "Presentation Mode",
|
||||
|
||||
"uwufymode": "UwU-fied Mode",
|
||||
"devmoretaps": "You are %s taps away from Developer Mode.",
|
||||
"devactivated": "Developer Mode successfully activated.",
|
||||
@ -185,12 +181,8 @@ extension SettingsLocalization on String {
|
||||
"Analytics": "Analitika",
|
||||
"Anonymous Usage Analytics": "Névtelen használati analitika",
|
||||
"graph_class_avg": "Osztályátlag a grafikonon",
|
||||
"goodstudent": "Jó tanuló mód",
|
||||
"attention": "Figyelem!",
|
||||
"goodstudent_disclaimer":
|
||||
"A reFilc minden felelősséget elhárít a funkció használatával kapcsolatban.\n\n(Értsd: ha az anyád megver, mert megtévesztő ábrákat mutattál neki, azért csakis magadat hibáztathatod.)",
|
||||
"understand": "Értem",
|
||||
"secret": "Titkos Beállítások",
|
||||
"bell_delay": "Csengő eltolódása",
|
||||
"delay": "Késleltetés",
|
||||
"hurry": "Siettetés",
|
||||
@ -203,7 +195,7 @@ extension SettingsLocalization on String {
|
||||
"Background Color": "Háttér színe",
|
||||
"Highlight Color": "Panelek színe",
|
||||
"Adaptive Theme": "Adaptív téma",
|
||||
"presentation": "Bemutató mód",
|
||||
|
||||
"uwufymode": "UwU mód",
|
||||
"devmoretaps": "Még %s koppintásra vagy a Fejlesztői módtól.",
|
||||
"devactivated": "Fejlesztői mód sikeresen aktiválva.",
|
||||
@ -319,12 +311,8 @@ extension SettingsLocalization on String {
|
||||
"Analytics": "Analytik",
|
||||
"Anonymous Usage Analytics": "Anonyme Nutzungsanalyse",
|
||||
"graph_class_avg": "Klassendurchschnitt in der Grafik",
|
||||
"goodstudent": "Guter Student Modus",
|
||||
"attention": "Achtung!",
|
||||
"goodstudent_disclaimer":
|
||||
"reFilc kann nicht für die Nutzung dieser Funktion haftbar gemacht werden.\n\n(Wenn deine Mutter dich verprügelt, weil du ihr falsche Noten gezeigt hast, kannst du dir nur die Schuld dafür geben)",
|
||||
"understand": "Ich verstehe",
|
||||
"secret": "Geheime Einstellungen",
|
||||
"bell_delay": "Klingelverzögerung",
|
||||
"delay": "Verzögern",
|
||||
"hurry": "Eile",
|
||||
@ -337,7 +325,7 @@ extension SettingsLocalization on String {
|
||||
"Background Color": "Background Color",
|
||||
"Highlight Color": "Highlight Color",
|
||||
"Adaptive Theme": "Adaptive Theme",
|
||||
"presentation": "Präsentationsmodus",
|
||||
|
||||
"uwufymode": "UwU-Modus",
|
||||
"devmoretaps": "Sie sind %s Taps vom Entwicklermodus entfernt.",
|
||||
"devactivated": "Entwicklermodus erfolgreich aktiviert.",
|
||||
|
@ -16,6 +16,10 @@ import 'package:refilc_plus/models/premium_scopes.dart';
|
||||
import 'package:refilc_plus/providers/plus_provider.dart';
|
||||
import 'package:refilc_plus/ui/mobile/plus/upsell.dart';
|
||||
import 'package:refilc_plus/ui/mobile/settings/welcome_message.dart';
|
||||
|
||||
import 'package:refilc_kreta_api/providers/grade_provider.dart';
|
||||
import 'package:refilc_mobile_ui/common/action_button.dart';
|
||||
|
||||
// import 'package:provider/provider.dart';
|
||||
import 'submenu_screen.i18n.dart';
|
||||
|
||||
@ -23,7 +27,7 @@ class MenuExtrasSettings extends StatelessWidget {
|
||||
const MenuExtrasSettings({
|
||||
super.key,
|
||||
this.borderRadius = const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0), bottom: Radius.circular(4.0)),
|
||||
top: Radius.circular(4.0), bottom: Radius.circular(12.0)),
|
||||
});
|
||||
|
||||
final BorderRadius borderRadius;
|
||||
@ -181,6 +185,146 @@ class ExtrasSettingsScreenState extends State<ExtrasSettingsScreen> {
|
||||
),
|
||||
],
|
||||
),
|
||||
SplittedPanel(
|
||||
padding: const EdgeInsets.only(top: 9.0),
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
isSeparated: true,
|
||||
children: [
|
||||
PanelButton(
|
||||
padding: const EdgeInsets.only(left: 14.0, right: 6.0),
|
||||
onPressed: () async {
|
||||
if (!settingsProvider.goodStudent) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => WillPopScope(
|
||||
onWillPop: () async => false,
|
||||
child: AlertDialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("attention".i18n),
|
||||
content: Text("goodstudent_disclaimer".i18n),
|
||||
actions: [
|
||||
ActionButton(
|
||||
label: "understand".i18n,
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
settingsProvider.update(
|
||||
goodStudent: true);
|
||||
Provider.of<GradeProvider>(context,
|
||||
listen: false)
|
||||
.convertBySettings();
|
||||
setState(() {});
|
||||
})
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
settingsProvider.update(goodStudent: false);
|
||||
Provider.of<GradeProvider>(context, listen: false)
|
||||
.convertBySettings();
|
||||
setState(() {});
|
||||
}
|
||||
},
|
||||
title: Text(
|
||||
"goodstudent".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withValues(
|
||||
alpha: settingsProvider.goodStudent ? .95 : .25),
|
||||
),
|
||||
),
|
||||
leading: Icon(
|
||||
FeatherIcons.userCheck,
|
||||
size: 22.0,
|
||||
color: AppColors.of(context).text.withValues(
|
||||
alpha: settingsProvider.goodStudent ? .95 : .25),
|
||||
),
|
||||
trailing: Switch(
|
||||
onChanged: (v) async {
|
||||
if (v) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => WillPopScope(
|
||||
onWillPop: () async => false,
|
||||
child: AlertDialog(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(12.0)),
|
||||
title: Text("attention".i18n),
|
||||
content: Text("goodstudent_disclaimer".i18n),
|
||||
actions: [
|
||||
ActionButton(
|
||||
label: "understand".i18n,
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
settingsProvider.update(
|
||||
goodStudent: true);
|
||||
Provider.of<GradeProvider>(context,
|
||||
listen: false)
|
||||
.convertBySettings();
|
||||
setState(() {});
|
||||
})
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
settingsProvider.update(goodStudent: false);
|
||||
Provider.of<GradeProvider>(context, listen: false)
|
||||
.convertBySettings();
|
||||
setState(() {});
|
||||
}
|
||||
},
|
||||
value: settingsProvider.goodStudent,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SplittedPanel(
|
||||
padding: const EdgeInsets.only(top: 9.0),
|
||||
cardPadding: const EdgeInsets.all(4.0),
|
||||
isSeparated: true,
|
||||
children: [
|
||||
PanelButton(
|
||||
padding: const EdgeInsets.only(left: 14.0, right: 6.0),
|
||||
onPressed: () async {
|
||||
settingsProvider.update(
|
||||
presentationMode: !settingsProvider.presentationMode);
|
||||
setState(() {});
|
||||
},
|
||||
title: Text(
|
||||
"presentation".i18n,
|
||||
style: TextStyle(
|
||||
color: AppColors.of(context).text.withValues(
|
||||
alpha:
|
||||
settingsProvider.presentationMode ? .95 : .25),
|
||||
),
|
||||
),
|
||||
leading: Icon(
|
||||
FeatherIcons.tv,
|
||||
size: 22.0,
|
||||
color: AppColors.of(context).text.withValues(
|
||||
alpha: settingsProvider.presentationMode ? .95 : .25),
|
||||
),
|
||||
trailing: Switch(
|
||||
onChanged: (v) async {
|
||||
settingsProvider.update(presentationMode: v);
|
||||
setState(() {});
|
||||
},
|
||||
value: settingsProvider.presentationMode,
|
||||
activeColor: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
borderRadius: const BorderRadius.vertical(
|
||||
top: Radius.circular(12.0),
|
||||
bottom: Radius.circular(12.0),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
@ -15,7 +15,7 @@ class MenuGeneralSettings extends StatelessWidget {
|
||||
const MenuGeneralSettings({
|
||||
super.key,
|
||||
this.borderRadius = const BorderRadius.vertical(
|
||||
top: Radius.circular(4.0), bottom: Radius.circular(4.0)),
|
||||
top: Radius.circular(12.0), bottom: Radius.circular(4.0)),
|
||||
});
|
||||
|
||||
final BorderRadius borderRadius;
|
||||
|
@ -34,6 +34,11 @@ extension SettingsLocalization on String {
|
||||
"theme_share_ratelimit": "You can only share 1 theme per minute.",
|
||||
// cloud sync
|
||||
"cloud_sync": "Cloud Sync",
|
||||
"secret": "Secret Settings",
|
||||
"goodstudent": "Good student mode",
|
||||
"presentation": "Presentation Mode",
|
||||
"goodstudent_disclaimer":
|
||||
"reFilc can not be held liable for the usage of this feature.\n\n(if your mother beats you up because you showed her fake grades, you can only blame yourself for it)",
|
||||
},
|
||||
"hu_hu": {
|
||||
"general": "Általános",
|
||||
@ -66,6 +71,11 @@ extension SettingsLocalization on String {
|
||||
"theme_share_ratelimit": "Csak 1 témát oszthatsz meg percenként.",
|
||||
// cloud sync
|
||||
"cloud_sync": "Felhő szinkronizálás",
|
||||
"secret": "Titkos Beállítások",
|
||||
"goodstudent": "Jó tanuló mód",
|
||||
"presentation": "Bemutató mód",
|
||||
"goodstudent_disclaimer":
|
||||
"A reFilc minden felelősséget elhárít a funkció használatával kapcsolatban.\n\n(Értsd: ha az anyád megver, mert megtévesztő ábrákat mutattál neki, azért csakis magadat hibáztathatod.)",
|
||||
},
|
||||
"de_de": {
|
||||
"general": "Allgemeine",
|
||||
@ -99,6 +109,11 @@ extension SettingsLocalization on String {
|
||||
"theme_share_ratelimit": "Sie können nur 1 Thema pro Minute teilen.",
|
||||
// cloud sync
|
||||
"cloud_sync": "Cloud-Synchronisierung",
|
||||
"secret": "Geheime Einstellungen",
|
||||
"presentation": "Präsentationsmodus",
|
||||
"goodstudent": "Guter Student Modus",
|
||||
"goodstudent_disclaimer":
|
||||
"reFilc kann nicht für die Nutzung dieser Funktion haftbar gemacht werden.\n\n(Wenn deine Mutter dich verprügelt, weil du ihr falsche Noten gezeigt hast, kannst du dir nur die Schuld dafür geben)",
|
||||
},
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user