This commit is contained in:
BalazsManus
2025-03-04 20:10:04 +01:00
parent 4c89c45db6
commit f7caa6118b
19 changed files with 306 additions and 454 deletions

View File

@@ -1,3 +1,19 @@
#!/bin/sh
# Firka legacy (formely "refilc"), the unofficial client for e-Kréta
# Copyright (C) 2025 Firka team (QwIT development)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
flutter build ipa --release --tree-shake-icons --split-debug-info=debug-info --obfuscate --no-codesign

View File

@@ -1 +1,19 @@
@echo off
' Firka legacy (formely "refilc"), the unofficial client for e-Kréta
' Copyright (C) 2025 Firka team (QwIT development)
'
' This program is free software: you can redistribute it and/or modify
' it under the terms of the GNU Affero General Public License as
' published by the Free Software Foundation, either version 3 of the
' License, or (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU Affero General Public License for more details.
'
' You should have received a copy of the GNU Affero General Public License
' along with this program. If not, see <https://www.gnu.org/licenses/>.
flutter build apk --release --tree-shake-icons --split-debug-info=debug-info --split-per-abi --target-platform android-arm,android-arm64 --obfuscate

View File

@@ -1,6 +1,6 @@
#!/bin/sh
# refilc, the unofficial client for e-Kréta
# Firka legacy (formely "refilc"), the unofficial client for e-Kréta
# Copyright (C) 2025 Firka team (QwIT development)
#
# This program is free software: you can redistribute it and/or modify

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import 'dart:async';
import 'dart:convert';
import 'dart:developer';

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import 'package:refilc/models/ad.dart';
import 'package:flutter/material.dart';

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// ignore_for_file: deprecated_member_use
import 'dart:io';

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import 'dart:io';
import 'package:background_fetch/background_fetch.dart';
@@ -310,7 +328,7 @@ Future<void> initAdditionalBackgroundFetch() async {
print('[BackgroundFetch] configure success: $status');
}
BackgroundFetch.scheduleTask(TaskConfig(
taskId: "com.transistorsoft.refilcliveactivity",
taskId: "com.transistorsoft.firkaliveactivity",
delay: 300000, // 5 minute
periodic: true,
forceAlarmManager: true,

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// ignore_for_file: use_build_context_synchronously
import 'package:refilc/models/linked_account.dart';

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import 'dart:math';
import 'package:refilc/theme/colors/colors.dart';

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// ignore_for_file: no_leading_underscores_for_local_identifiers, use_build_context_synchronously
import 'dart:convert';

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// ignore_for_file: use_build_context_synchronously
import 'package:flutter/material.dart';

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// import 'dart:async';
import 'dart:io' show Platform;

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// ignore_for_file: no_leading_underscores_for_local_identifiers, use_build_context_synchronously, deprecated_member_use
import 'dart:convert';

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// import 'package:refilc/models/settings.dart';
import 'package:refilc/api/providers/user_provider.dart';

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// ignore_for_file: use_build_context_synchronously
import 'package:refilc/api/providers/user_provider.dart';

View File

@@ -1,3 +1,21 @@
/*
Firka legacy (formely "refilc"), the unofficial client for e-Kréta
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// ignore_for_file: use_build_context_synchronously, deprecated_member_use
import 'package:refilc/models/settings.dart';

View File

@@ -1,3 +1,21 @@
/*
refilc+, but more stripped and more open source
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import 'dart:async';
import 'package:refilc/models/settings.dart';

View File

@@ -1,3 +1,21 @@
/*
refilc+, but more stripped and more open source
Copyright (C) 2025 Firka team (QwIT development)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:refilc_plus/models/premium_scopes.dart';

View File

@@ -1,452 +0,0 @@
// import 'package:dropdown_button2/dropdown_button2.dart';
// import 'package:refilc/api/providers/database_provider.dart';
// import 'package:refilc/api/providers/user_provider.dart';
// import 'package:refilc/models/settings.dart';
// import 'package:refilc/theme/colors/colors.dart';
// import 'package:refilc/utils/format.dart';
// import 'package:refilc_kreta_api/models/teacher.dart';
// import 'package:refilc_kreta_api/providers/absence_provider.dart';
// import 'package:refilc_kreta_api/providers/grade_provider.dart';
// import 'package:refilc_kreta_api/providers/timetable_provider.dart';
// import 'package:refilc_mobile_ui/common/panel/panel.dart';
// import 'package:refilc_mobile_ui/common/panel/panel_button.dart';
// // 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:flutter/cupertino.dart';
// import 'package:flutter/material.dart';
// import 'package:flutter_feather_icons/flutter_feather_icons.dart';
// import 'package:provider/provider.dart';
// import 'package:refilc_mobile_ui/screens/settings/modify_names.i18n.dart';
// class MenuRenamedTeachers extends StatelessWidget {
// const MenuRenamedTeachers({Key? key, required this.settings})
// : super(key: key);
// final SettingsProvider settings;
// @override
// Widget build(BuildContext context) {
// return PanelButton(
// padding: const EdgeInsets.only(left: 14.0),
// onPressed: () {
// // if (!Provider.of<PlusProvider>(context, listen: false)
// // .hasScope(PremiumScopes.renameTeachers)) {
// // PlusLockedFeaturePopup.show(
// // context: context, feature: PremiumFeature.teacherrename);
// // return;
// // }
// Navigator.of(context, rootNavigator: true).push(
// CupertinoPageRoute(builder: (context) => const ModifyTeacherNames()),
// );
// },
// title: Text(
// "rename_teachers".i18n,
// style: TextStyle(
// color: AppColors.of(context)
// .text
// .withOpacity(settings.renamedTeachersEnabled ? 1.0 : .5)),
// ),
// leading: settings.renamedTeachersEnabled
// ? const Icon(FeatherIcons.users)
// : Icon(FeatherIcons.users,
// color: AppColors.of(context).text.withOpacity(.25)),
// trailingDivider: true,
// trailing: Switch(
// onChanged: (v) async {
// // if (!Provider.of<PlusProvider>(context, listen: false)
// // .hasScope(PremiumScopes.renameTeachers)) {
// // PlusLockedFeaturePopup.show(
// // context: context, feature: PremiumFeature.teacherrename);
// // return;
// // }
// settings.update(renamedTeachersEnabled: v);
// await Provider.of<GradeProvider>(context, listen: false)
// .convertBySettings();
// await Provider.of<TimetableProvider>(context, listen: false)
// .convertBySettings();
// await Provider.of<AbsenceProvider>(context, listen: false)
// .convertBySettings();
// },
// value: settings.renamedTeachersEnabled,
// activeColor: Theme.of(context).colorScheme.secondary,
// ),
// );
// }
// }
// class ModifyTeacherNames extends StatefulWidget {
// const ModifyTeacherNames({Key? key}) : super(key: key);
// @override
// State<ModifyTeacherNames> createState() => _ModifyTeacherNamesState();
// }
// class _ModifyTeacherNamesState extends State<ModifyTeacherNames> {
// final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
// final _teacherName = TextEditingController();
// String? selectedTeacherId;
// late List<Teacher> teachers;
// late UserProvider user;
// late DatabaseProvider dbProvider;
// late SettingsProvider settings;
// @override
// void initState() {
// super.initState();
// teachers = (Provider.of<GradeProvider>(context, listen: false)
// .grades
// .map((e) => e.teacher)
// .toSet()
// .toList()
// ..sort((a, b) => a.name.compareTo(b.name)));
// user = Provider.of<UserProvider>(context, listen: false);
// dbProvider = Provider.of<DatabaseProvider>(context, listen: false);
// }
// Future<Map<String, String>> fetchRenamedTeachers() async {
// return await dbProvider.userQuery.renamedTeachers(userId: user.id!);
// }
// void showRenameDialog() {
// showDialog(
// context: context,
// builder: (context) => StatefulBuilder(builder: (context, setS) {
// return AlertDialog(
// shape: const RoundedRectangleBorder(
// borderRadius: BorderRadius.all(Radius.circular(14.0))),
// title: Text("rename_teacher".i18n),
// content: Column(
// mainAxisSize: MainAxisSize.min,
// children: [
// DropdownButton2(
// items: teachers
// .map((item) => DropdownMenuItem<String>(
// value: item.id,
// child: Text(
// item.name,
// style: TextStyle(
// fontSize: 14,
// fontWeight: FontWeight.bold,
// color: AppColors.of(context).text,
// ),
// overflow: TextOverflow.ellipsis,
// ),
// ))
// .toList(),
// onChanged: (String? v) async {
// final renamedSubs = await fetchRenamedTeachers();
// setS(() {
// selectedTeacherId = v;
// if (renamedSubs.containsKey(selectedTeacherId)) {
// _teacherName.text = renamedSubs[selectedTeacherId]!;
// } else {
// _teacherName.text = "";
// }
// });
// },
// iconStyleData: IconStyleData(
// iconSize: 14,
// iconEnabledColor: AppColors.of(context).text,
// iconDisabledColor: AppColors.of(context).text,
// ),
// underline: const SizedBox(),
// menuItemStyleData: MenuItemStyleData(height: 40,),
// itemHeight: 40,
// itemPadding: const EdgeInsets.only(left: 14, right: 14),
// buttonWidth: 50,
// dropdownWidth: 300,
// dropdownPadding: null,
// buttonDecoration: BoxDecoration(
// borderRadius: BorderRadius.circular(8),
// ),
// dropdownDecoration: BoxDecoration(
// borderRadius: BorderRadius.circular(14),
// ),
// dropdownElevation: 8,
// scrollbarRadius: const Radius.circular(40),
// scrollbarThickness: 6,
// scrollbarAlwaysShow: true,
// offset: const Offset(-10, -10),
// buttonSplashColor: Colors.transparent,
// customButton: Container(
// width: double.infinity,
// decoration: BoxDecoration(
// border: Border.all(color: Colors.grey, width: 2),
// borderRadius: BorderRadius.circular(12.0),
// ),
// padding: const EdgeInsets.symmetric(
// vertical: 12.0, horizontal: 8.0),
// child: Text(
// selectedTeacherId == null
// ? "select_teacher".i18n
// : teachers
// .firstWhere(
// (element) => element.id == selectedTeacherId,
// orElse: () => Teacher(
// id: 'noid', name: "select_teacher".i18n),
// )
// .name,
// style: Theme.of(context).textTheme.titleSmall!.copyWith(
// fontWeight: FontWeight.w700,
// color: AppColors.of(context).text.withOpacity(0.75)),
// overflow: TextOverflow.ellipsis,
// maxLines: 2,
// textAlign: TextAlign.center,
// ),
// ),
// ),
// const Padding(
// padding: EdgeInsets.symmetric(vertical: 8.0),
// child: Icon(FeatherIcons.arrowDown, size: 32),
// ),
// TextField(
// controller: _teacherName,
// decoration: InputDecoration(
// border: OutlineInputBorder(
// borderSide:
// const BorderSide(color: Colors.grey, width: 1.5),
// borderRadius: BorderRadius.circular(12.0),
// ),
// focusedBorder: OutlineInputBorder(
// borderSide:
// const BorderSide(color: Colors.grey, width: 1.5),
// borderRadius: BorderRadius.circular(12.0),
// ),
// contentPadding: const EdgeInsets.symmetric(horizontal: 12.0),
// hintText: "modified_name".i18n,
// suffixIcon: IconButton(
// icon: const Icon(
// FeatherIcons.x,
// color: Colors.grey,
// ),
// onPressed: () {
// setState(() {
// _teacherName.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: () async {
// if (selectedTeacherId != null) {
// final renamedSubs = await fetchRenamedTeachers();
// renamedSubs[selectedTeacherId!] = _teacherName.text;
// await dbProvider.userStore
// .storeRenamedTeachers(renamedSubs, userId: user.id!);
// await Provider.of<GradeProvider>(context, listen: false)
// .convertBySettings();
// await Provider.of<TimetableProvider>(context, listen: false)
// .convertBySettings();
// await Provider.of<AbsenceProvider>(context, listen: false)
// .convertBySettings();
// }
// Navigator.of(context).pop(true);
// setState(() {});
// },
// ),
// ],
// );
// }),
// ).then((val) {
// _teacherName.text = "";
// selectedTeacherId = null;
// });
// }
// @override
// Widget build(BuildContext context) {
// settings = Provider.of<SettingsProvider>(context);
// return Scaffold(
// key: _scaffoldKey,
// appBar: AppBar(
// surfaceTintColor: Theme.of(context).scaffoldBackgroundColor,
// leading: BackButton(color: AppColors.of(context).text),
// title: Text(
// "modify_teachers".i18n,
// style: TextStyle(color: AppColors.of(context).text),
// ),
// ),
// body: Padding(
// padding: const EdgeInsets.symmetric(vertical: 16.0, horizontal: 24.0),
// child: SingleChildScrollView(
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// // Panel(
// // child: SwitchListTile(
// // title: Text("italics_toggle".i18n),
// // onChanged: (value) =>
// // settings.update(renamedTeachersItalics: value),
// // value: settings.renamedTeachersItalics,
// // ),
// // ),
// // const SizedBox(
// // height: 20,
// // ),
// InkWell(
// onTap: showRenameDialog,
// borderRadius: BorderRadius.circular(12.0),
// child: Container(
// width: double.infinity,
// decoration: BoxDecoration(
// border: Border.all(color: Colors.grey, width: 2),
// borderRadius: BorderRadius.circular(12.0),
// ),
// padding: const EdgeInsets.symmetric(
// vertical: 18.0, horizontal: 12.0),
// child: Center(
// child: Text(
// "rename_new_teacher".i18n,
// style: TextStyle(
// fontWeight: FontWeight.w600,
// fontSize: 18,
// color: AppColors.of(context).text.withOpacity(.85),
// ),
// ),
// ),
// ),
// ),
// const SizedBox(
// height: 30,
// ),
// FutureBuilder<Map<String, String>>(
// future: fetchRenamedTeachers(),
// builder: (context, snapshot) {
// if (!snapshot.hasData || snapshot.data!.isEmpty) {
// return Container();
// }
// return Panel(
// title: Text("renamed_teachers".i18n),
// child: Column(
// children: snapshot.data!.keys.map(
// (key) {
// Teacher? teacher = teachers.firstWhere(
// (element) => key == element.id,
// orElse: () => Teacher(id: 'noid', name: 'noname'),
// );
// if (teacher.id == 'noid') {
// return const SizedBox(
// width: 0,
// height: 0,
// );
// }
// String renameTo = snapshot.data![key]!;
// return RenamedTeacherItem(
// teacher: teacher,
// renamedTo: renameTo,
// modifyCallback: () {
// setState(() {
// selectedTeacherId = teacher.id;
// _teacherName.text = renameTo;
// });
// showRenameDialog();
// },
// removeCallback: () {
// setState(() {
// Map<String, String> subs =
// Map.from(snapshot.data!);
// subs.remove(key);
// dbProvider.userStore.storeRenamedTeachers(
// subs,
// userId: user.id!);
// });
// },
// );
// },
// ).toList(),
// ),
// );
// },
// ),
// ],
// ),
// ),
// ));
// }
// }
// class RenamedTeacherItem extends StatelessWidget {
// const RenamedTeacherItem({
// Key? key,
// required this.teacher,
// required this.renamedTo,
// required this.modifyCallback,
// required this.removeCallback,
// }) : super(key: key);
// final Teacher teacher;
// final String renamedTo;
// final void Function() modifyCallback;
// final void Function() removeCallback;
// @override
// Widget build(BuildContext context) {
// return ListTile(
// minLeadingWidth: 32.0,
// dense: true,
// contentPadding:
// const EdgeInsets.symmetric(horizontal: 16.0, vertical: 6.0),
// shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
// visualDensity: VisualDensity.compact,
// onTap: () {},
// leading: Icon(FeatherIcons.user,
// color: AppColors.of(context).text.withOpacity(.75)),
// title: InkWell(
// onTap: modifyCallback,
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Text(
// teacher.name.capital(),
// style: TextStyle(
// fontWeight: FontWeight.w500,
// fontSize: 14,
// color: AppColors.of(context).text.withOpacity(.75)),
// maxLines: 1,
// overflow: TextOverflow.ellipsis,
// ),
// Text(
// renamedTo,
// style: const TextStyle(fontWeight: FontWeight.w500, fontSize: 16),
// maxLines: 2,
// overflow: TextOverflow.ellipsis,
// ),
// ],
// ),
// ),
// trailing: InkWell(
// onTap: removeCallback,
// child: Icon(FeatherIcons.trash,
// color: AppColors.of(context).red.withOpacity(.75)),
// ),
// );
// }
// }