finished customizable grade rarities
This commit is contained in:
parent
4b2b90be8e
commit
06247a160d
@ -67,6 +67,7 @@ const userDataDB = DatabaseStruct("user_data", {
|
|||||||
"todo_items": String, "self_notes": String,
|
"todo_items": String, "self_notes": String,
|
||||||
// v5 shit
|
// v5 shit
|
||||||
"roundings": String,
|
"roundings": String,
|
||||||
|
"grade_rarities": String,
|
||||||
});
|
});
|
||||||
|
|
||||||
Future<void> createTable(Database db, DatabaseStruct struct) =>
|
Future<void> createTable(Database db, DatabaseStruct struct) =>
|
||||||
@ -128,6 +129,7 @@ Future<Database> initDB(DatabaseProvider database) async {
|
|||||||
"todo_items": "{}", "self_notes": "[]",
|
"todo_items": "{}", "self_notes": "[]",
|
||||||
// v5 shit
|
// v5 shit
|
||||||
"roundings": "{}",
|
"roundings": "{}",
|
||||||
|
"grade_rarities": "{}",
|
||||||
});
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
print("ERROR: migrateDB: $error");
|
print("ERROR: migrateDB: $error");
|
||||||
|
@ -316,4 +316,14 @@ class UserDatabaseQuery {
|
|||||||
return (jsonDecode(roundingsJson) as Map)
|
return (jsonDecode(roundingsJson) as Map)
|
||||||
.map((key, value) => MapEntry(key.toString(), value.toString()));
|
.map((key, value) => MapEntry(key.toString(), value.toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<Map<String, String>> getGradeRarities({required String userId}) async {
|
||||||
|
List<Map> userData =
|
||||||
|
await db.query("user_data", where: "id = ?", whereArgs: [userId]);
|
||||||
|
if (userData.isEmpty) return {};
|
||||||
|
String? raritiesJson = userData.elementAt(0)["grade_rarities"] as String?;
|
||||||
|
if (raritiesJson == null) return {};
|
||||||
|
return (jsonDecode(raritiesJson) as Map)
|
||||||
|
.map((key, value) => MapEntry(key.toString(), value.toString()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -201,4 +201,11 @@ class UserDatabaseStore {
|
|||||||
await db.update("user_data", {"roundings": roundingsJson},
|
await db.update("user_data", {"roundings": roundingsJson},
|
||||||
where: "id = ?", whereArgs: [userId]);
|
where: "id = ?", whereArgs: [userId]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> storeGradeRarities(Map<String, String> rarities,
|
||||||
|
{required String userId}) async {
|
||||||
|
String raritiesJson = jsonEncode(rarities);
|
||||||
|
await db.update("user_data", {"grade_rarities": raritiesJson},
|
||||||
|
where: "id = ?", whereArgs: [userId]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,15 @@ class GradeProvider with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> unseenAll() async {
|
||||||
|
String? userId = _user.id;
|
||||||
|
if (userId != null) {
|
||||||
|
final userStore = _database.userStore;
|
||||||
|
userStore.storeLastSeenGrade(DateTime(1969), userId: userId);
|
||||||
|
_lastSeen = DateTime(1969);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> restore() async {
|
Future<void> restore() async {
|
||||||
String? userId = _user.id;
|
String? userId = _user.id;
|
||||||
|
|
||||||
@ -125,6 +134,9 @@ class GradeProvider with ChangeNotifier {
|
|||||||
|
|
||||||
// Fetches Grades from the Kreta API then stores them in the database
|
// Fetches Grades from the Kreta API then stores them in the database
|
||||||
Future<void> fetch() async {
|
Future<void> fetch() async {
|
||||||
|
// test cucc
|
||||||
|
// unseenAll();
|
||||||
|
|
||||||
User? user = _user.user;
|
User? user = _user.user;
|
||||||
if (user == null) throw "Cannot fetch Grades for User null";
|
if (user == null) throw "Cannot fetch Grades for User null";
|
||||||
String iss = user.instituteCode;
|
String iss = user.instituteCode;
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
|
// ignore_for_file: use_build_context_synchronously
|
||||||
|
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
|
|
||||||
import 'package:animated_background/animated_background.dart' as bg;
|
import 'package:animated_background/animated_background.dart' as bg;
|
||||||
|
import 'package:filcnaplo/api/providers/database_provider.dart';
|
||||||
|
import 'package:filcnaplo/api/providers/user_provider.dart';
|
||||||
import 'package:filcnaplo/helpers/subject.dart';
|
import 'package:filcnaplo/helpers/subject.dart';
|
||||||
import 'package:filcnaplo/models/settings.dart';
|
import 'package:filcnaplo/models/settings.dart';
|
||||||
import 'package:filcnaplo/ui/widgets/grade/grade_tile.dart';
|
import 'package:filcnaplo/ui/widgets/grade/grade_tile.dart';
|
||||||
@ -33,6 +37,15 @@ class _SurpriseGradeState extends State<SurpriseGrade>
|
|||||||
|
|
||||||
late SettingsProvider settingsProvider;
|
late SettingsProvider settingsProvider;
|
||||||
|
|
||||||
|
List<String> defaultRarities = [
|
||||||
|
"common",
|
||||||
|
"uncommon",
|
||||||
|
"rare",
|
||||||
|
"epic",
|
||||||
|
"legendary",
|
||||||
|
];
|
||||||
|
Map<String, String> rarities = {};
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@ -54,6 +67,8 @@ class _SurpriseGradeState extends State<SurpriseGrade>
|
|||||||
setState(() => subtitle = true);
|
setState(() => subtitle = true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
_fetchRarities();
|
||||||
});
|
});
|
||||||
|
|
||||||
seed = Random().nextInt(100000000);
|
seed = Random().nextInt(100000000);
|
||||||
@ -69,6 +84,15 @@ class _SurpriseGradeState extends State<SurpriseGrade>
|
|||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_fetchRarities() async {
|
||||||
|
rarities = await Provider.of<DatabaseProvider>(context, listen: false)
|
||||||
|
.userQuery
|
||||||
|
.getGradeRarities(
|
||||||
|
userId: Provider.of<UserProvider>(context, listen: false).id!);
|
||||||
|
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
bool hold = false;
|
bool hold = false;
|
||||||
bool subtitle = false;
|
bool subtitle = false;
|
||||||
late int seed;
|
late int seed;
|
||||||
@ -321,6 +345,15 @@ class _SurpriseGradeState extends State<SurpriseGrade>
|
|||||||
AnimationStatus.reverse) {
|
AnimationStatus.reverse) {
|
||||||
shouldPaint = true;
|
shouldPaint = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String? rr =
|
||||||
|
rarities[widget.grade.value.value.toString()];
|
||||||
|
rr ??= '';
|
||||||
|
|
||||||
|
if (rr.replaceAll(' ', '') == '') {
|
||||||
|
rr = defaultRarities[widget.grade.value.value - 1].i18n;
|
||||||
|
}
|
||||||
|
|
||||||
return ScaleTransition(
|
return ScaleTransition(
|
||||||
scale: _revealAnimGrade,
|
scale: _revealAnimGrade,
|
||||||
child: FadeTransition(
|
child: FadeTransition(
|
||||||
@ -337,14 +370,7 @@ class _SurpriseGradeState extends State<SurpriseGrade>
|
|||||||
begin: Offset.zero,
|
begin: Offset.zero,
|
||||||
end: const Offset(0, -0.9))),
|
end: const Offset(0, -0.9))),
|
||||||
child: Text(
|
child: Text(
|
||||||
[
|
rr,
|
||||||
"legendary",
|
|
||||||
"epic",
|
|
||||||
"rare",
|
|
||||||
"uncommon",
|
|
||||||
"common"
|
|
||||||
][5 - widget.grade.value.value]
|
|
||||||
.i18n,
|
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 46.0,
|
fontSize: 46.0,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
|
@ -387,10 +387,21 @@ class SettingsHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// v5 grade rarity texts
|
// v5 grade rarity texts
|
||||||
static void surpriseGradeRarityText(BuildContext context) {
|
static void surpriseGradeRarityText(
|
||||||
|
BuildContext context, {
|
||||||
|
required String title,
|
||||||
|
required String cancel,
|
||||||
|
required String done,
|
||||||
|
required List<String> rarities,
|
||||||
|
}) {
|
||||||
showRoundedModalBottomSheet(
|
showRoundedModalBottomSheet(
|
||||||
context,
|
context,
|
||||||
child: const GradeColorsSetting(),
|
child: GradeRarityTextSetting(
|
||||||
|
title: title,
|
||||||
|
cancel: cancel,
|
||||||
|
done: done,
|
||||||
|
defaultRarities: rarities,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -726,6 +737,141 @@ class _GradeColorsSettingState extends State<GradeColorsSetting> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class GradeRarityTextSetting extends StatefulWidget {
|
||||||
|
const GradeRarityTextSetting({
|
||||||
|
super.key,
|
||||||
|
required this.title,
|
||||||
|
required this.cancel,
|
||||||
|
required this.done,
|
||||||
|
required this.defaultRarities,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String title;
|
||||||
|
final String cancel;
|
||||||
|
final String done;
|
||||||
|
final List<String> defaultRarities;
|
||||||
|
|
||||||
|
@override
|
||||||
|
_GradeRarityTextSettingState createState() => _GradeRarityTextSettingState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _GradeRarityTextSettingState extends State<GradeRarityTextSetting> {
|
||||||
|
late SettingsProvider settings;
|
||||||
|
late DatabaseProvider db;
|
||||||
|
late UserProvider user;
|
||||||
|
|
||||||
|
final _rarityText = TextEditingController();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
settings = Provider.of<SettingsProvider>(context, listen: false);
|
||||||
|
db = Provider.of<DatabaseProvider>(context, listen: false);
|
||||||
|
user = Provider.of<UserProvider>(context, listen: false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Column(children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: List.generate(5, (index) {
|
||||||
|
return ClipOval(
|
||||||
|
child: Material(
|
||||||
|
type: MaterialType.transparency,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () async {
|
||||||
|
showRenameDialog(
|
||||||
|
title: widget.title,
|
||||||
|
cancel: widget.cancel,
|
||||||
|
done: widget.done,
|
||||||
|
rarities:
|
||||||
|
await db.userQuery.getGradeRarities(userId: user.id!),
|
||||||
|
gradeIndex: (index + 1).toString(),
|
||||||
|
defaultRarities: widget.defaultRarities,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: GradeValueWidget(GradeValue(index + 1, "", "", 0),
|
||||||
|
fill: true, size: 36.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void showRenameDialog(
|
||||||
|
{required String title,
|
||||||
|
required String cancel,
|
||||||
|
required String done,
|
||||||
|
required Map<String, String> rarities,
|
||||||
|
required String gradeIndex,
|
||||||
|
required List<String> defaultRarities,
|
||||||
|
required}) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) => StatefulBuilder(builder: (context, setS) {
|
||||||
|
String? rr = rarities[gradeIndex];
|
||||||
|
rr ??= '';
|
||||||
|
|
||||||
|
_rarityText.text = rr;
|
||||||
|
|
||||||
|
return AlertDialog(
|
||||||
|
title: Text(title),
|
||||||
|
content: TextField(
|
||||||
|
controller: _rarityText,
|
||||||
|
autofocus: true,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
border: const OutlineInputBorder(),
|
||||||
|
label: Text(defaultRarities[int.parse(gradeIndex) - 1]),
|
||||||
|
suffixIcon: IconButton(
|
||||||
|
icon: const Icon(FeatherIcons.x),
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
_rarityText.clear();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
child: Text(
|
||||||
|
cancel,
|
||||||
|
style: const TextStyle(fontWeight: FontWeight.w500),
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).maybePop();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
child: Text(
|
||||||
|
done,
|
||||||
|
style: const TextStyle(fontWeight: FontWeight.w500),
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
rarities[gradeIndex] = _rarityText.text;
|
||||||
|
|
||||||
|
Provider.of<DatabaseProvider>(context, listen: false)
|
||||||
|
.userStore
|
||||||
|
.storeGradeRarities(rarities, userId: user.id!);
|
||||||
|
|
||||||
|
Navigator.of(context).pop(true);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
).then((val) {
|
||||||
|
_rarityText.clear();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class LiveActivityColorSetting extends StatefulWidget {
|
class LiveActivityColorSetting extends StatefulWidget {
|
||||||
const LiveActivityColorSetting({super.key});
|
const LiveActivityColorSetting({super.key});
|
||||||
|
|
||||||
|
@ -84,7 +84,19 @@ class ExtrasSettingsScreenState extends State<ExtrasSettingsScreen> {
|
|||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
// settingsProvider.update(
|
// settingsProvider.update(
|
||||||
// gradeOpeningFun: !settingsProvider.gradeOpeningFun);
|
// gradeOpeningFun: !settingsProvider.gradeOpeningFun);
|
||||||
SettingsHelper.surpriseGradeRarityText(context);
|
SettingsHelper.surpriseGradeRarityText(
|
||||||
|
context,
|
||||||
|
title: 'rarity_title'.i18n,
|
||||||
|
cancel: 'cancel'.i18n,
|
||||||
|
done: 'done'.i18n,
|
||||||
|
rarities: [
|
||||||
|
"common".i18n,
|
||||||
|
"uncommon".i18n,
|
||||||
|
"rare".i18n,
|
||||||
|
"epic".i18n,
|
||||||
|
"legendary".i18n,
|
||||||
|
],
|
||||||
|
);
|
||||||
setState(() {});
|
setState(() {});
|
||||||
},
|
},
|
||||||
trailingDivider: true,
|
trailingDivider: true,
|
||||||
|
@ -8,18 +8,45 @@ extension SettingsLocalization on String {
|
|||||||
"personalization": "Personalization",
|
"personalization": "Personalization",
|
||||||
"extras": "Extras",
|
"extras": "Extras",
|
||||||
"surprise_grades": "Surprise Grades",
|
"surprise_grades": "Surprise Grades",
|
||||||
|
"cancel": "Cancel",
|
||||||
|
"done": "Done",
|
||||||
|
"rarity_title": "Rarity Text",
|
||||||
|
// default rarities
|
||||||
|
"common": "Common",
|
||||||
|
"uncommon": "Uncommon",
|
||||||
|
"rare": "Rare",
|
||||||
|
"epic": "Epic",
|
||||||
|
"legendary": "Legendary",
|
||||||
},
|
},
|
||||||
"hu_hu": {
|
"hu_hu": {
|
||||||
"general": "Általános",
|
"general": "Általános",
|
||||||
"personalization": "Személyre szabás",
|
"personalization": "Személyre szabás",
|
||||||
"extras": "Extrák",
|
"extras": "Extrák",
|
||||||
"surprise_grades": "Meglepetés jegyek",
|
"surprise_grades": "Meglepetés jegyek",
|
||||||
|
"cancel": "Mégse",
|
||||||
|
"done": "Kész",
|
||||||
|
"rarity_title": "Ritkaság szövege",
|
||||||
|
// default rarities
|
||||||
|
"common": "Gyakori",
|
||||||
|
"uncommon": "Nem gyakori",
|
||||||
|
"rare": "Ritka",
|
||||||
|
"epic": "Epikus",
|
||||||
|
"legendary": "Legendás",
|
||||||
},
|
},
|
||||||
"de_de": {
|
"de_de": {
|
||||||
"general": "Allgemeine",
|
"general": "Allgemeine",
|
||||||
"personalization": "Personalisierung",
|
"personalization": "Personalisierung",
|
||||||
"extras": "Extras",
|
"extras": "Extras",
|
||||||
"surprise_grades": "Überraschende Noten",
|
"surprise_grades": "Überraschende Noten",
|
||||||
|
"cancel": "Abbrechen",
|
||||||
|
"done": "Bereit",
|
||||||
|
"rarity_title": "Text zur Seltenheit",
|
||||||
|
// default rarities
|
||||||
|
"common": "Gemeinsam",
|
||||||
|
"uncommon": "Gelegentlich",
|
||||||
|
"rare": "Selten",
|
||||||
|
"epic": "Episch",
|
||||||
|
"legendary": "Legendär",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user