Merge branch 'dev' of https://github.com/refilc/naplo into dev

This commit is contained in:
zypherift 2024-05-03 18:43:07 +02:00
commit 2e14d52c25
40 changed files with 918 additions and 244 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 754 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 735 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 881 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 658 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 491 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -187,7 +187,7 @@ class AppTheme {
accentColor == AccentColor.ogfilc) || accentColor == AccentColor.ogfilc) ||
!settings.newColors !settings.newColors
? accent ? accent
: ColorsUtils().lighten(accent, amount: 0.3); : ColorsUtils().lighten(accent, amount: 0.22);
// Color newScaffoldBg = ColorsUtils().lighten(accent, amount: 0.4); // Color newScaffoldBg = ColorsUtils().lighten(accent, amount: 0.4);
Color newTertiary = (accentColor == AccentColor.adaptive || Color newTertiary = (accentColor == AccentColor.adaptive ||
accentColor == AccentColor.custom || accentColor == AccentColor.custom ||

View File

@ -27,6 +27,7 @@ class LessonTile extends StatelessWidget {
this.currentLessonIndicator = true, this.currentLessonIndicator = true,
this.padding, this.padding,
this.contentPadding, this.contentPadding,
this.showSubTiles = true,
}); });
final Lesson lesson; final Lesson lesson;
@ -37,6 +38,7 @@ class LessonTile extends StatelessWidget {
final bool currentLessonIndicator; final bool currentLessonIndicator;
final EdgeInsetsGeometry? padding; final EdgeInsetsGeometry? padding;
final EdgeInsetsGeometry? contentPadding; final EdgeInsetsGeometry? contentPadding;
final bool showSubTiles;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -149,7 +151,8 @@ class LessonTile extends StatelessWidget {
child: PanelTitle(title: Text(lesson.name)), child: PanelTitle(title: Text(lesson.name)),
), ),
child: Padding( child: Padding(
padding: EdgeInsets.only(bottom: subtiles.isEmpty ? 0.0 : 12.0), padding: EdgeInsets.only(
bottom: (subtiles.isNotEmpty && showSubTiles) ? 12.0 : 0.0),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
@ -243,7 +246,7 @@ class LessonTile extends StatelessWidget {
? accent.withOpacity(.15) ? accent.withOpacity(.15)
: Theme.of(context) : Theme.of(context)
.colorScheme .colorScheme
.secondary .tertiary
.withOpacity(.15), .withOpacity(.15),
borderRadius: BorderRadius.circular(10.0), borderRadius: BorderRadius.circular(10.0),
), ),
@ -395,7 +398,7 @@ class LessonTile extends StatelessWidget {
? accent.withOpacity(.15) ? accent.withOpacity(.15)
: Theme.of(context) : Theme.of(context)
.colorScheme .colorScheme
.secondary .tertiary
.withOpacity(.15), .withOpacity(.15),
borderRadius: BorderRadius.circular(10.0), borderRadius: BorderRadius.circular(10.0),
), ),
@ -446,7 +449,7 @@ class LessonTile extends StatelessWidget {
), ),
// Homework & Exams // Homework & Exams
...subtiles, if (showSubTiles) ...subtiles,
], ],
), ),
), ),

View File

@ -3,7 +3,7 @@ description: "Egy nem hivatalos e-KRÉTA kliens, diákoktól diákoknak."
homepage: https://refilc.hu homepage: https://refilc.hu
publish_to: "none" publish_to: "none"
version: 5.0.0+252 version: 5.0.0+253
environment: environment:
sdk: ">=2.17.0 <=3.3.2" sdk: ">=2.17.0 <=3.3.2"

View File

@ -1,9 +1,15 @@
import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:refilc/api/providers/database_provider.dart'; import 'package:refilc/api/providers/database_provider.dart';
import 'package:refilc/api/providers/user_provider.dart'; import 'package:refilc/api/providers/user_provider.dart';
import 'package:refilc/helpers/subject.dart';
import 'package:refilc/theme/colors/colors.dart';
import 'package:refilc/theme/colors/utils.dart';
import 'package:refilc_kreta_api/models/lesson.dart'; import 'package:refilc_kreta_api/models/lesson.dart';
import 'package:refilc_mobile_ui/common/bottom_sheet_menu/rounded_bottom_sheet.dart';
import 'package:refilc_mobile_ui/common/panel/panel_button.dart'; import 'package:refilc_mobile_ui/common/panel/panel_button.dart';
import 'package:refilc_mobile_ui/common/round_border_icon.dart';
import 'package:refilc_mobile_ui/common/viewable.dart'; import 'package:refilc_mobile_ui/common/viewable.dart';
import 'package:refilc_mobile_ui/common/widgets/card_handle.dart'; import 'package:refilc_mobile_ui/common/widgets/card_handle.dart';
import 'package:refilc/ui/widgets/lesson/lesson_tile.dart'; import 'package:refilc/ui/widgets/lesson/lesson_tile.dart';
@ -49,98 +55,48 @@ class LessonViewableState extends State<LessonViewable> {
if (lsn.subject.id == '' || tile.lesson.isEmpty) return tile; if (lsn.subject.id == '' || tile.lesson.isEmpty) return tile;
return Viewable( return LessonTile(
tile: tile, lsn,
view: CardHandle(child: LessonView(lsn)), swapDesc: widget.swapDesc,
actions: [ onTap: () => TimetableLessonPopup.show(context: context, lesson: lsn),
PanelButton( );
background: true,
title: Text(
"edit_lesson".i18n,
textAlign: TextAlign.center,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
onPressed: () {
Navigator.of(context, rootNavigator: true).pop();
if (!Provider.of<PlusProvider>(context, listen: false) // return Viewable(
.hasScope(PremiumScopes.timetableNotes)) { // tile: tile,
PlusLockedFeaturePopup.show( // view: CardHandle(child: LessonView(lsn)),
context: context, feature: PremiumFeature.timetableNotes); // actions: [
// PanelButton(
return; // background: true,
} // title: Text(
// "edit_lesson".i18n,
showDialog( // textAlign: TextAlign.center,
context: context, // maxLines: 2,
builder: (context) => StatefulBuilder(builder: (context, setS) { // overflow: TextOverflow.ellipsis,
return AlertDialog(
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(14.0))),
title: Text("edit_lesson".i18n),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
// description
TextField(
controller: _descTxt,
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: 'l_desc'.i18n,
suffixIcon: IconButton(
icon: const Icon(
FeatherIcons.x,
color: Colors.grey,
size: 18.0,
),
onPressed: () {
setState(() {
_descTxt.text = '';
});
},
),
),
),
// const SizedBox(
// height: 14.0,
// ), // ),
// // class // onPressed: () {
// Navigator.of(context, rootNavigator: true).pop();
// if (!Provider.of<PlusProvider>(context, listen: false)
// .hasScope(PremiumScopes.timetableNotes)) {
// PlusLockedFeaturePopup.show(
// context: context, feature: PremiumFeature.timetableNotes);
// return;
// }
// showDialog(
// context: context,
// builder: (context) => StatefulBuilder(builder: (context, setS) {
// return AlertDialog(
// shape: const RoundedRectangleBorder(
// borderRadius: BorderRadius.all(Radius.circular(14.0))),
// title: Text("edit_lesson".i18n),
// content: Column(
// mainAxisSize: MainAxisSize.min,
// children: [
// // description
// TextField( // TextField(
// controller: _descTxt, // controller: _descTxt,
// onEditingComplete: () async {
// // SharedTheme? theme = await shareProvider.getThemeById(
// // context,
// // id: _paintId.text.replaceAll(' ', ''),
// // );
// // if (theme != null) {
// // // set theme variable
// // newThemeByID = theme;
// // _paintId.clear();
// // } else {
// // ScaffoldMessenger.of(context).showSnackBar(
// // CustomSnackBar(
// // content: Text("theme_not_found".i18n,
// // style: const TextStyle(color: Colors.white)),
// // backgroundColor: AppColors.of(context).red,
// // context: context,
// // ),
// // );
// // }
// },
// decoration: InputDecoration( // decoration: InputDecoration(
// border: OutlineInputBorder( // border: OutlineInputBorder(
// borderSide: const BorderSide( // borderSide: const BorderSide(
@ -169,38 +125,94 @@ class LessonViewableState extends State<LessonViewable> {
// ), // ),
// ), // ),
// ), // ),
], // // const SizedBox(
), // // height: 14.0,
actions: [ // // ),
TextButton( // // // class
child: Text( // // TextField(
"cancel".i18n, // // controller: _descTxt,
style: const TextStyle(fontWeight: FontWeight.w500), // // onEditingComplete: () async {
), // // // SharedTheme? theme = await shareProvider.getThemeById(
onPressed: () { // // // context,
Navigator.of(context).maybePop(); // // // id: _paintId.text.replaceAll(' ', ''),
}, // // // );
),
TextButton(
child: Text(
"done".i18n,
style: const TextStyle(fontWeight: FontWeight.w500),
),
onPressed: () async {
saveLesson();
Navigator.of(context).pop(); // // // if (theme != null) {
setState(() {}); // // // // set theme variable
}, // // // newThemeByID = theme;
),
], // // // _paintId.clear();
); // // // } else {
}), // // // ScaffoldMessenger.of(context).showSnackBar(
); // // // CustomSnackBar(
}, // // // content: Text("theme_not_found".i18n,
), // // // style: const TextStyle(color: Colors.white)),
], // // // backgroundColor: AppColors.of(context).red,
); // // // context: context,
// // // ),
// // // );
// // // }
// // },
// // 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: 'l_desc'.i18n,
// // suffixIcon: IconButton(
// // icon: const Icon(
// // FeatherIcons.x,
// // color: Colors.grey,
// // size: 18.0,
// // ),
// // onPressed: () {
// // setState(() {
// // _descTxt.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 {
// saveLesson();
// Navigator.of(context).pop();
// setState(() {});
// },
// ),
// ],
// );
// }),
// );
// },
// ),
// ],
// );
} }
void saveLesson() async { void saveLesson() async {
@ -218,3 +230,197 @@ class LessonViewableState extends State<LessonViewable> {
.storeCustomLessonDescriptions(lessonDesc, userId: user.id!); .storeCustomLessonDescriptions(lessonDesc, userId: user.id!);
} }
} }
class TimetableLessonPopup extends StatelessWidget {
const TimetableLessonPopup({super.key, required this.lesson});
final Lesson lesson;
static void show({
required BuildContext context,
required Lesson lesson,
}) =>
showRoundedModalBottomSheet(
context,
child: TimetableLessonPopup(
lesson: lesson,
),
showHandle: false,
);
// IconData _getIcon() => _featureLevels[feature] == PremiumFeatureLevel.cap
// ? FilcIcons.kupak
// : _featureLevels[feature] == PremiumFeatureLevel.ink
// ? FilcIcons.tinta
// : FilcIcons.tinta;
// Color _getColor(BuildContext context) =>
// _featureLevels[feature] == PremiumFeatureLevel.gold
// ? const Color(0xFFC89B08)
// : Theme.of(context).brightness == Brightness.light
// ? const Color(0xff691A9B)
// : const Color(0xffA66FC8);
// String? _getAsset() => _featureAssets[feature];
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
color: Theme.of(context).scaffoldBackgroundColor,
borderRadius: const BorderRadius.vertical(
top: Radius.circular(12.0),
),
),
child: Stack(
children: [
SvgPicture.asset(
"assets/svg/mesh_bg.svg",
// ignore: deprecated_member_use
color: ColorsUtils().fade(
context, Theme.of(context).scaffoldBackgroundColor,
darkenAmount: 0.1, lightenAmount: 0.1),
width: MediaQuery.of(context).size.width,
),
SizedBox(
width: MediaQuery.of(context).size.width,
child: Padding(
padding: const EdgeInsets.all(18.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: 40,
height: 4,
decoration: BoxDecoration(
color: ColorsUtils().fade(
context, Theme.of(context).scaffoldBackgroundColor,
darkenAmount: 0.2, lightenAmount: 0.2),
borderRadius: BorderRadius.circular(
2.0,
),
),
),
const SizedBox(
height: 38.0,
),
RoundBorderIcon(
icon: Icon(
SubjectIcon.resolveVariant(
context: context, subject: lesson.subject),
),
),
const SizedBox(
height: 55.0,
),
Container(
width: double.infinity,
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.background,
borderRadius: const BorderRadius.vertical(
top: Radius.circular(12.0),
bottom: Radius.circular(6.0),
),
),
padding: const EdgeInsets.all(14.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'6:09 - 4:20',
style: TextStyle(
color: AppColors.of(context).text.withOpacity(0.85),
fontSize: 14.0,
fontWeight: FontWeight.w500,
),
),
const SizedBox(
height: 12.0,
),
Text(
lesson.name,
style: TextStyle(
color: AppColors.of(context).text,
fontSize: 20.0,
fontWeight: FontWeight.w700,
),
),
const SizedBox(
height: 8.0,
),
Text(
lesson.teacher.name,
style: TextStyle(
color: AppColors.of(context).text.withOpacity(0.9),
fontSize: 14.0,
fontWeight: FontWeight.w500,
),
),
],
),
),
const SizedBox(
height: 6.0,
),
Container(
width: double.infinity,
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.background,
borderRadius: const BorderRadius.vertical(
top: Radius.circular(6.0),
bottom: Radius.circular(12.0),
),
),
padding: const EdgeInsets.all(14.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
lesson.description,
style: TextStyle(
color: AppColors.of(context).text.withOpacity(0.9),
fontSize: 14.0,
fontWeight: FontWeight.w600,
),
),
],
),
),
const SizedBox(
height: 24.0,
),
GestureDetector(
onTap: () {
Navigator.of(context, rootNavigator: true)
.pushReplacementNamed('/');
},
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.background,
borderRadius: BorderRadius.circular(12.0),
),
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'view_subject'.i18n,
style: TextStyle(
color:
AppColors.of(context).text.withOpacity(0.9),
fontSize: 18.0,
fontWeight: FontWeight.w500,
),
),
],
),
),
),
],
),
),
),
],
),
);
}
}

View File

@ -362,6 +362,7 @@ class AbsencesPageState extends State<AbsencesPage>
List<Absence> unexcused = []; List<Absence> unexcused = [];
List<Absence> excused = []; List<Absence> excused = [];
List<Absence> pending = [];
List<double> absencePositions = []; List<double> absencePositions = [];
List<Color> finalChartColors = []; List<Color> finalChartColors = [];
@ -375,13 +376,14 @@ class AbsencesPageState extends State<AbsencesPage>
.where((e) => .where((e) =>
e.delay == 0 && e.state == Justification.excused) e.delay == 0 && e.state == Justification.excused)
.toList(); .toList();
pending = absenceProvider.absences
.where((e) =>
e.delay == 0 && e.state == Justification.pending)
.toList();
value1 = excused.length; value1 = excused.length;
value2 = unexcused.length; value2 = unexcused.length;
value3 = absenceProvider.absences value3 = pending.length;
.where((e) =>
e.delay == 0 && e.state == Justification.pending)
.length;
title1 = "stat_1".i18n; title1 = "stat_1".i18n;
title2 = "stat_2".i18n; title2 = "stat_2".i18n;
suffix = " ${"hr".i18n}"; suffix = " ${"hr".i18n}";
@ -394,15 +396,15 @@ class AbsencesPageState extends State<AbsencesPage>
.where((e) => .where((e) =>
e.delay != 0 && e.state == Justification.excused) e.delay != 0 && e.state == Justification.excused)
.toList(); .toList();
pending = absenceProvider.absences
.where((e) =>
e.delay != 0 && e.state == Justification.pending)
.toList();
value1 = excused.map((e) => e.delay).fold(0, (a, b) => a + b); value1 = excused.map((e) => e.delay).fold(0, (a, b) => a + b);
value2 = value2 =
unexcused.map((e) => e.delay).fold(0, (a, b) => a + b); unexcused.map((e) => e.delay).fold(0, (a, b) => a + b);
value3 = absenceProvider.absences value3 = pending.map((e) => e.delay).fold(0, (a, b) => a + b);
.where((e) =>
e.delay != 0 && e.state == Justification.pending)
.map((e) => e.delay)
.fold(0, (a, b) => a + b);
title1 = "stat_3".i18n; title1 = "stat_3".i18n;
title2 = "stat_4".i18n; title2 = "stat_4".i18n;
suffix = " ${"min".i18n}"; suffix = " ${"min".i18n}";
@ -417,7 +419,7 @@ class AbsencesPageState extends State<AbsencesPage>
int barTotal = int barTotal =
DateTime.now().difference(DateTime(yr, 09, 01)).inDays; DateTime.now().difference(DateTime(yr, 09, 01)).inDays;
[...unexcused, ...excused].forEachIndexed((i, a) { [...unexcused, ...excused, ...pending].forEachIndexed((i, a) {
int abs = DateTime.now().difference(a.date).inDays; int abs = DateTime.now().difference(a.date).inDays;
double startPos = (barTotal - abs) / barTotal; double startPos = (barTotal - abs) / barTotal;
@ -435,11 +437,14 @@ class AbsencesPageState extends State<AbsencesPage>
end: endPos, end: endPos,
color: a.state == Justification.excused color: a.state == Justification.excused
? Colors.green ? Colors.green
: Colors.red, : a.state == Justification.unexcused
? Colors.red
: Colors.orange,
)); ));
if ([...unexcused, ...excused].length > i + 1) { if ([...unexcused, ...excused, ...pending].length > i + 1) {
int nextAbs = DateTime.now() int nextAbs = DateTime.now()
.difference([...unexcused, ...excused][i + 1].date) .difference(
[...unexcused, ...excused, ...pending][i + 1].date)
.inDays; .inDays;
double nextStartPos = (barTotal - nextAbs) / barTotal; double nextStartPos = (barTotal - nextAbs) / barTotal;
@ -454,7 +459,8 @@ class AbsencesPageState extends State<AbsencesPage>
// print(value2.toString() + '-total'); // print(value2.toString() + '-total');
// print(absenceChartData.length.toString() + '-chartdata'); // print(absenceChartData.length.toString() + '-chartdata');
if ((i + 1 == [...unexcused, ...excused].length) && if ((i + 1 ==
[...unexcused, ...excused, ...pending].length) &&
endPos < 0.999) { endPos < 0.999) {
absenceChartData.add(AbsenceChartData( absenceChartData.add(AbsenceChartData(
start: endPos, start: endPos,

View File

@ -19,6 +19,7 @@ import 'package:refilc_kreta_api/models/grade.dart';
import 'package:refilc_kreta_api/models/subject.dart'; import 'package:refilc_kreta_api/models/subject.dart';
import 'package:refilc_mobile_ui/common/average_display.dart'; import 'package:refilc_mobile_ui/common/average_display.dart';
import 'package:refilc_mobile_ui/common/bottom_sheet_menu/rounded_bottom_sheet.dart'; import 'package:refilc_mobile_ui/common/bottom_sheet_menu/rounded_bottom_sheet.dart';
import 'package:refilc_mobile_ui/common/empty.dart';
import 'package:refilc_mobile_ui/common/filter_bar.dart'; import 'package:refilc_mobile_ui/common/filter_bar.dart';
import 'package:refilc_mobile_ui/common/panel/panel.dart'; import 'package:refilc_mobile_ui/common/panel/panel.dart';
import 'package:refilc_mobile_ui/common/splitted_panel/splitted_panel.dart'; import 'package:refilc_mobile_ui/common/splitted_panel/splitted_panel.dart';
@ -281,7 +282,7 @@ class _GradeSubjectViewState extends State<GradeSubjectView>
title: Text("exams".i18n), title: Text("exams".i18n),
children: _tiles, children: _tiles,
)) ))
: const SizedBox(), : const Empty(),
), ),
); );

View File

@ -213,8 +213,8 @@ class HomePageState extends State<HomePage> with TickerProviderStateMixin {
// } // }
// TODO: REMOVE IN PRODUCTION BUILD!!! // TODO: REMOVE IN PRODUCTION BUILD!!!
print(_liveCard.currentState); // print(_liveCard.currentState);
_liveCard.currentState = LiveCardState.morning; _liveCard.currentState = LiveCardState.duringLesson;
return Scaffold( return Scaffold(
body: Stack( body: Stack(
@ -326,9 +326,11 @@ class HomePageState extends State<HomePage> with TickerProviderStateMixin {
expandedHeight: _liveCardAnimation.value * expandedHeight: _liveCardAnimation.value *
(_liveCard.currentState == LiveCardState.morning (_liveCard.currentState == LiveCardState.morning
? 274.0 ? 274.0
: (_liveCard.currentState == : ((_liveCard.currentState ==
LiveCardState.duringLesson LiveCardState.duringLesson ||
? 288.0 _liveCard.currentState ==
LiveCardState.duringBreak)
? 292.0
: 238.0)), : 238.0)),
// Live Card // Live Card
@ -340,14 +342,21 @@ class HomePageState extends State<HomePage> with TickerProviderStateMixin {
top: ((_liveCard.currentState == top: ((_liveCard.currentState ==
LiveCardState.morning || LiveCardState.morning ||
_liveCard.currentState == _liveCard.currentState ==
LiveCardState.duringLesson) LiveCardState.duringLesson ||
_liveCard.currentState ==
LiveCardState.duringBreak)
? 0.0 ? 0.0
: 62.0) + : 62.0) +
MediaQuery.of(context).padding.top, MediaQuery.of(context).padding.top,
bottom: _liveCard.currentState == bottom: (_liveCard.currentState ==
LiveCardState.morning LiveCardState.morning)
? 44.0 ? 44.0
: 52.0, : ((_liveCard.currentState ==
LiveCardState.duringLesson ||
_liveCard.currentState ==
LiveCardState.duringBreak)
? 55.0
: 52.0),
), ),
child: Transform.scale( child: Transform.scale(
scale: _liveCardAnimation.value, scale: _liveCardAnimation.value,

View File

@ -3,7 +3,6 @@
import 'package:animations/animations.dart'; import 'package:animations/animations.dart';
import 'package:refilc/api/providers/user_provider.dart'; import 'package:refilc/api/providers/user_provider.dart';
import 'package:refilc/helpers/subject.dart'; import 'package:refilc/helpers/subject.dart';
import 'package:refilc/icons/filc_icons.dart';
import 'package:refilc/models/settings.dart'; import 'package:refilc/models/settings.dart';
import 'package:refilc/theme/colors/colors.dart'; import 'package:refilc/theme/colors/colors.dart';
import 'package:refilc/ui/widgets/lesson/lesson_tile.dart'; import 'package:refilc/ui/widgets/lesson/lesson_tile.dart';
@ -11,7 +10,9 @@ import 'package:refilc_kreta_api/models/category.dart';
import 'package:refilc_kreta_api/models/lesson.dart'; import 'package:refilc_kreta_api/models/lesson.dart';
import 'package:refilc_kreta_api/models/subject.dart'; import 'package:refilc_kreta_api/models/subject.dart';
import 'package:refilc_kreta_api/models/teacher.dart'; import 'package:refilc_kreta_api/models/teacher.dart';
import 'package:refilc_mobile_ui/common/panel/panel.dart';
import 'package:refilc_mobile_ui/common/progress_bar.dart'; import 'package:refilc_mobile_ui/common/progress_bar.dart';
import 'package:refilc_mobile_ui/common/round_border_icon.dart';
// import 'package:refilc_kreta_api/models/category.dart'; // import 'package:refilc_kreta_api/models/category.dart';
// import 'package:refilc_kreta_api/models/lesson.dart'; // import 'package:refilc_kreta_api/models/lesson.dart';
// import 'package:refilc_kreta_api/models/subject.dart'; // import 'package:refilc_kreta_api/models/subject.dart';
@ -70,8 +71,8 @@ class LiveCardStateA extends State<LiveCard> {
// test // test
// TODO: REMOVE IN PRODUCTION BUILD!!! // TODO: REMOVE IN PRODUCTION BUILD!!!
liveCard.currentState = LiveCardState.morning; liveCard.currentState = LiveCardState.duringLesson;
liveCard.nextLesson = Lesson( liveCard.currentLesson = Lesson(
date: DateTime.now().add(Duration( date: DateTime.now().add(Duration(
minutes: 30, minutes: 30,
)), )),
@ -93,7 +94,7 @@ class LiveCardStateA extends State<LiveCard> {
name: 'name', name: 'name',
); );
// liveCard.nextLesson = liveCard.currentLesson; liveCard.nextLesson = liveCard.currentLesson;
// final dt = DateTime(2024, 3, 22, 17, 12, 1, 1, 1); // final dt = DateTime(2024, 3, 22, 17, 12, 1, 1, 1);
@ -304,7 +305,7 @@ class LiveCardStateA extends State<LiveCard> {
width: 10, width: 10,
), ),
Text( Text(
'${DateFormat('H:mm').format(liveCard.nextLesson!.start)}-${DateFormat('H:mm').format(liveCard.nextLesson!.end)}', '${DateFormat('H:mm').format(liveCard.nextLesson!.start)} - ${DateFormat('H:mm').format(liveCard.nextLesson!.end)}',
style: const TextStyle( style: const TextStyle(
fontSize: 12.5, fontSize: 12.5,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@ -411,8 +412,9 @@ class LiveCardStateA extends State<LiveCard> {
swapRoom: true, swapRoom: true,
currentLessonIndicator: false, currentLessonIndicator: false,
padding: padding:
const EdgeInsets.only(top: 8.0, bottom: 4.0), const EdgeInsets.only(top: 6.0, bottom: 4.0),
contentPadding: EdgeInsets.zero, contentPadding: EdgeInsets.zero,
showSubTiles: false,
), ),
if (!(nextSubject == null && if (!(nextSubject == null &&
progressCurrent == null && progressCurrent == null &&
@ -523,7 +525,7 @@ class LiveCardStateA extends State<LiveCard> {
decoration: BoxDecoration( decoration: BoxDecoration(
color: Theme.of(context) color: Theme.of(context)
.colorScheme .colorScheme
.secondary .tertiary
.withOpacity(.15), .withOpacity(.15),
borderRadius: borderRadius:
BorderRadius.circular(10.0), BorderRadius.circular(10.0),
@ -546,7 +548,7 @@ class LiveCardStateA extends State<LiveCard> {
width: 10, width: 10,
), ),
Text( Text(
'${DateFormat('H:mm').format(liveCard.nextLesson!.start)}-${DateFormat('H:mm').format(liveCard.nextLesson!.end)}', '${DateFormat('H:mm').format(liveCard.nextLesson!.start)} - ${DateFormat('H:mm').format(liveCard.nextLesson!.end)}',
style: const TextStyle( style: const TextStyle(
fontSize: 12.5, fontSize: 12.5,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
@ -566,12 +568,17 @@ class LiveCardStateA extends State<LiveCard> {
); );
break; break;
case LiveCardState.duringBreak: case LiveCardState.duringBreak:
final iconFloorMap = { if (liveCard.prevLesson == null || liveCard.nextLesson == null) {
"to room": FeatherIcons.chevronsRight, child = Container();
"up floor": FilcIcons.upstairs, break;
"down floor": FilcIcons.downstairs, }
"ground floor": FilcIcons.downstairs,
}; // final iconFloorMap = {
// "to room": FeatherIcons.chevronsRight,
// "up floor": FilcIcons.upstairs,
// "down floor": FilcIcons.downstairs,
// "ground floor": FilcIcons.downstairs,
// };
final diff = liveCard.getFloorDifference(); final diff = liveCard.getFloorDifference();
@ -587,36 +594,352 @@ class LiveCardStateA extends State<LiveCard> {
final showMinutes = maxTime - elapsedTime > 60; final showMinutes = maxTime - elapsedTime > 60;
// child = LiveCardWidget(
// key: const Key('livecard.duringBreak'),
// title: "break".i18n,
// icon: iconFloorMap[diff],
// description: liveCard.nextLesson!.room != liveCard.prevLesson!.room
// ? Text("go $diff".i18n.fill([
// diff != "to room"
// ? (liveCard.nextLesson!.getFloor() ?? 0)
// : liveCard.nextLesson!.room
// ]))
// : Text("stay".i18n),
// nextSubject: liveCard.nextLesson?.subject.renamedTo ??
// liveCard.nextLesson?.subject.name.capital(),
// nextSubjectItalic: liveCard.nextLesson?.subject.isRenamed == true &&
// settingsProvider.renamedSubjectsItalics,
// nextRoom: diff != "to room" ? liveCard.nextLesson?.room : null,
// progressMax: showMinutes ? maxTime / 60 : maxTime,
// progressCurrent: showMinutes ? elapsedTime / 60 : elapsedTime,
// progressAccuracy:
// showMinutes ? ProgressAccuracy.minutes : ProgressAccuracy.seconds,
// onProgressTap: () {
// showDialog(
// barrierColor: Colors.black,
// context: context,
// builder: (context) => HeadsUpCountdown(
// maxTime: maxTime,
// elapsedTime: elapsedTime,
// ),
// );
// },
// );
var nextSubject = liveCard.nextLesson?.subject.renamedTo ??
liveCard.nextLesson?.subject.name.capital();
var nextSubjectItalic =
liveCard.nextLesson?.subject.isRenamed == true &&
settingsProvider.renamedSubjectsItalics;
// var nextRoom = diff != "to room" ? liveCard.nextLesson?.room : null;
var progressMax = showMinutes ? maxTime / 60 : maxTime;
var progressCurrent = showMinutes ? elapsedTime / 60 : elapsedTime;
var progressAccuracy =
showMinutes ? ProgressAccuracy.minutes : ProgressAccuracy.seconds;
// Lesson breakLesson = Lesson(
// date: DateTime.now(),
// start: liveCard.prevLesson!.end,
// end: liveCard.nextLesson!.start,
// name: 'break'.i18n,
// description: 'Menj a XY terembe...',
// );
child = LiveCardWidget( child = LiveCardWidget(
key: const Key('livecard.duringBreak'), key: const Key('livecard.duringBreak'),
title: "break".i18n, children: liveCard.nextLesson != null
icon: iconFloorMap[diff], ? [
description: liveCard.nextLesson!.room != liveCard.prevLesson!.room SplittedPanel(
hasShadow: false,
padding: EdgeInsets.zero,
cardPadding: EdgeInsets.zero,
spacing: 8.0,
children: [
SplittedPanel(
hasShadow: false,
isTransparent: true,
padding: EdgeInsets.zero,
cardPadding: const EdgeInsets.symmetric(
horizontal: 12.0,
vertical: 0.0,
),
spacing: 0.0,
children: [
// LessonTile(
// liveCard.currentLesson!,
// swapRoom: true,
// currentLessonIndicator: false,
// padding:
// const EdgeInsets.only(top: 8.0, bottom: 4.0),
// contentPadding: EdgeInsets.zero,
// ),
Padding(
padding:
const EdgeInsets.only(top: 8.0, bottom: 4.0),
child: Material(
color: Colors.transparent,
borderRadius: BorderRadius.circular(12.0),
child: Visibility(
visible:
liveCard.nextLesson!.subject.id != '' ||
liveCard.nextLesson!.isEmpty,
replacement: Padding(
padding: const EdgeInsets.only(top: 6.0),
child: PanelTitle(
title: Text(liveCard.nextLesson!.name)),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
ListTile(
minVerticalPadding: 0.0,
dense: true,
// onLongPress: kDebugMode ? () => log(jsonEncode(lesson.json)) : null,
visualDensity: VisualDensity.compact,
contentPadding: EdgeInsets.zero,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(12.0)),
title: Text(
"break".i18n,
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16.5,
color: AppColors.of(context)
.text
.withOpacity(!liveCard
.nextLesson!.isEmpty
? 1.0
: 0.5),
fontStyle: liveCard.nextLesson!
.subject.isRenamed &&
settingsProvider
.renamedSubjectsItalics
? FontStyle.italic
: null),
),
subtitle: DefaultTextStyle(
style: Theme.of(context)
.textTheme
.bodyMedium!
.copyWith(
fontWeight: FontWeight.w400,
fontSize: 15.0,
height: 1.0,
color: AppColors.of(context)
.text
.withOpacity(.75),
),
maxLines: !(nextSubject == null &&
progressCurrent == null &&
progressMax == null)
? 1
: 2,
softWrap: false,
overflow: TextOverflow.ellipsis,
child: liveCard.nextLesson!.room !=
liveCard.prevLesson!.room
? Text("go $diff".i18n.fill([ ? Text("go $diff".i18n.fill([
diff != "to room" diff != "to room"
? (liveCard.nextLesson!.getFloor() ?? 0) ? (liveCard.nextLesson!
.getFloor() ??
0)
: liveCard.nextLesson!.room : liveCard.nextLesson!.room
])) ]))
: Text("stay".i18n), : Text("stay".i18n),
nextSubject: liveCard.nextLesson?.subject.renamedTo ?? ),
liveCard.nextLesson?.subject.name.capital(),
nextSubjectItalic: liveCard.nextLesson?.subject.isRenamed == true && // subtitle: description != ""
settingsProvider.renamedSubjectsItalics, // ? Text(
nextRoom: diff != "to room" ? liveCard.nextLesson?.room : null, // description,
progressMax: showMinutes ? maxTime / 60 : maxTime, // style: const TextStyle(
progressCurrent: showMinutes ? elapsedTime / 60 : elapsedTime, // fontWeight: FontWeight.w500,
progressAccuracy: // fontSize: 14.0,
showMinutes ? ProgressAccuracy.minutes : ProgressAccuracy.seconds, // ),
onProgressTap: () { // maxLines: 1,
// softWrap: false,
// overflow: TextOverflow.ellipsis,
// )
// : null,
minLeadingWidth: 34.0,
leading: AspectRatio(
aspectRatio: 1,
child: Center(
child: Stack(
children: [
RoundBorderIcon(
color:
AppColors.of(context).text,
width: 1.0,
icon: const SizedBox(
width: 25,
height: 25,
child: Center(
child: Icon(
Icons.local_cafe,
size: 20.0,
),
),
),
),
],
),
),
),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
const SizedBox(
width: 10,
),
Stack(
alignment: Alignment.center,
children: [
// xix alignment hack :p
const Opacity(
opacity: 0,
child: Text("EE:EE")),
Text(
"${DateFormat("H:mm").format(liveCard.prevLesson!.end)}\n${DateFormat("H:mm").format(liveCard.nextLesson!.start)}",
textAlign: TextAlign.center,
style: TextStyle(
fontWeight: FontWeight.w500,
color: AppColors.of(context)
.text
.withOpacity(.9),
),
),
],
),
],
),
),
],
),
),
),
),
if (!(nextSubject == null &&
progressCurrent == null &&
progressMax == null))
Row(
children: [
const SizedBox(
width: 5.0,
),
if (progressCurrent != null &&
progressMax != null)
GestureDetector(
onTap: () {
showDialog( showDialog(
barrierColor: Colors.black, barrierColor: Colors.black,
context: context, context: context,
builder: (context) => HeadsUpCountdown( builder: (context) => HeadsUpCountdown(
maxTime: maxTime, maxTime: maxTime,
elapsedTime: elapsedTime, elapsedTime: elapsedTime),
),
); );
}, },
child: Container(
color: Colors.transparent,
child: Text(
"remaining ${progressAccuracy == ProgressAccuracy.minutes ? 'min' : 'sec'}"
.plural(
(progressMax - progressCurrent)
.round()),
maxLines: 1,
style: TextStyle(
fontWeight: FontWeight.w500,
color: AppColors.of(context)
.text
.withOpacity(.75),
height: 1.1,
),
),
),
)
],
),
if (progressCurrent != null && progressMax != null)
Padding(
padding:
const EdgeInsets.only(top: 4.0, bottom: 12.0),
child: ProgressBar(
value: progressCurrent / progressMax),
)
],
),
SplittedPanel(
hasShadow: false,
isTransparent: true,
padding: EdgeInsets.zero,
cardPadding: const EdgeInsets.symmetric(
horizontal: 18.0,
vertical: 11.0,
),
spacing: 0.0,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Icon(
liveCard.nextLesson == null
? Icons.home_outlined
: SubjectIcon.resolveVariant(
context: context,
subject:
liveCard.nextLesson!.subject,
),
size: 23.0,
),
const SizedBox(width: 12.0),
Text(
(liveCard.nextLesson?.subject
.isRenamed ??
false
? liveCard
.nextLesson?.subject.renamedTo
: liveCard
.nextLesson?.subject.name) ??
'go_home'.i18n,
style: TextStyle(
fontSize: 15.0,
fontWeight: FontWeight.w600,
fontStyle: nextSubjectItalic
? FontStyle.italic
: null,
),
),
],
),
Row(
children: liveCard.nextLesson != null
? [
const SizedBox(
width: 10,
),
Text(
'${DateFormat('H:mm').format(liveCard.nextLesson!.start)} - ${DateFormat('H:mm').format(liveCard.nextLesson!.end)}',
style: const TextStyle(
fontSize: 12.5,
fontWeight: FontWeight.w500,
),
),
]
: [],
),
],
),
],
),
],
),
]
: null,
); );
break; break;
case LiveCardState.afternoon: case LiveCardState.afternoon:

View File

@ -19,7 +19,7 @@ extension Localization on String {
"first_lesson_4": ".", "first_lesson_4": ".",
// segmented countdown // segmented countdown
"h": "hour(s)", "h": "hour(s)",
"m": "minute(s)", "m": "min(s)",
"s": "sec(s)", "s": "sec(s)",
// v5 // v5
"first_lesson_soon": "Your first lesson starts soon!", "first_lesson_soon": "Your first lesson starts soon!",

View File

@ -1,11 +1,9 @@
import 'package:refilc/api/providers/live_card_provider.dart';
import 'package:refilc/models/settings.dart'; import 'package:refilc/models/settings.dart';
import 'package:refilc/theme/colors/colors.dart'; import 'package:refilc/theme/colors/colors.dart';
import 'package:refilc_mobile_ui/common/progress_bar.dart'; import 'package:refilc_mobile_ui/common/progress_bar.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart'; import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:refilc_mobile_ui/pages/home/live_card/live_card.dart';
import 'live_card.i18n.dart'; import 'live_card.i18n.dart';
enum ProgressAccuracy { minutes, seconds } enum ProgressAccuracy { minutes, seconds }

View File

@ -135,12 +135,18 @@ class NotesPageState extends State<NotesPage> with TickerProviderStateMixin {
title: Text('your_notes'.i18n), title: Text('your_notes'.i18n),
padding: EdgeInsets.zero, padding: EdgeInsets.zero,
isTransparent: true, isTransparent: true,
child: Center( child: selfNoteTiles.length > 1
? Center(
child: Wrap( child: Wrap(
spacing: 18.0, spacing: 18.0,
runSpacing: 18.0, runSpacing: 18.0,
children: selfNoteTiles, children: selfNoteTiles,
), ),
)
: Wrap(
spacing: 18.0,
runSpacing: 18.0,
children: selfNoteTiles,
), ),
)); ));
} }

View File

@ -122,7 +122,7 @@ class LoginScreenState extends State<LoginScreen> {
type: MaterialType.transparency, type: MaterialType.transparency,
child: showBack child: showBack
? BackButton( ? BackButton(
color: AppColors.of(context).loginPrimary) color: AppColors.of(context).text)
: const SizedBox(height: 48.0), : const SizedBox(height: 48.0),
), ),
], ],
@ -130,9 +130,131 @@ class LoginScreenState extends State<LoginScreen> {
Stack( Stack(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
children: [ children: [
// Column(
// mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.center,
// children: [
// const SizedBox(height: 21),
// CarouselSlider(
// options: CarouselOptions(
// height: MediaQuery.of(context).size.height,
// viewportFraction: 1,
// autoPlay: true,
// autoPlayInterval: const Duration(seconds: 6),
// pauseAutoPlayOnTouch: true),
// items: [1, 2, 3, 4].map((i) {
// return Builder(
// builder: (BuildContext context) {
// return Column(
// crossAxisAlignment:
// CrossAxisAlignment.start,
// mainAxisAlignment:
// MainAxisAlignment.start,
// children: [
// Padding(
// padding:
// const EdgeInsets.only(left: 24),
// child: Column(
// crossAxisAlignment:
// CrossAxisAlignment.start,
// mainAxisAlignment:
// MainAxisAlignment.start,
// children: [
// Text(
// "welcome_title_$i".i18n,
// style: const TextStyle(
// color: Color(0xFF050B15),
// fontSize: 19,
// fontFamily: 'Montserrat',
// fontWeight:
// FontWeight.w700,
// height: 1.3),
// ),
// const SizedBox(
// height: 14.375), //meth
// Padding(
// padding:
// const EdgeInsets.only(
// right: 20),
// child: Text(
// "welcome_text_$i".i18n,
// style: const TextStyle(
// color:
// Color(0xFF050B15),
// fontFamily: 'FigTree',
// fontWeight:
// FontWeight.w500,
// fontSize: 17,
// height: 1.3),
// ),
// ),
// ],
// )),
// const SizedBox(height: 15.625),
// Padding(
// padding: const EdgeInsets.only(
// left: 16, right: 16),
// child: Image.asset(
// 'assets/images/showcase$i.png'))
// ],
// );
// },
// );
// }).toList(),
// ),
// ],
// ),
// Container(
// height: 250,
// width: double.infinity,
// decoration: const BoxDecoration(
// gradient: LinearGradient(
// colors: [Color(0x00DAE4F7), Color(0xFFDAE4F7)],
// stops: [0, 0.1],
// begin: Alignment.topCenter,
// end: Alignment.bottomCenter,
// ),
// ),
// child: Padding(
// padding: const EdgeInsets.only(top: 3),
// child: Column(
// children: [
// SizedBox(
// height: 48,
// width: double.infinity,
// child: Padding(
// padding: const EdgeInsets.symmetric(
// horizontal: 16),
// child: FilledButton(
// style: ButtonStyle(
// shape: MaterialStateProperty.all<
// RoundedRectangleBorder>(
// const RoundedRectangleBorder(
// borderRadius: BorderRadius.all(
// Radius.circular(12)),
// ))),
// onPressed: () {},
// child: Text(
// "login".i18n,
// style: const TextStyle(
// fontFamily: 'Montserrat',
// fontSize: 20,
// fontWeight: FontWeight.w700),
// )),
// ),
// ),
// const SizedBox(height: 8),
// ],
// ),
// ),
// )
//
//
// TODO: OLD LOGIN FROM HERE
Column( Column(
mainAxisAlignment: MainAxisAlignment.center, //login buttons and ui starts here
crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
const SizedBox(height: 21), const SizedBox(height: 21),
CarouselSlider( CarouselSlider(
@ -190,12 +312,12 @@ class LoginScreenState extends State<LoginScreen> {
), ),
], ],
)), )),
const SizedBox(height: 15.625), //meth const SizedBox(height: 15.625),
// Padding( Padding(
// padding: const EdgeInsets.only( padding: const EdgeInsets.only(
// left: 16, right: 16), left: 16, right: 16),
// child: Image.asset( child: Image.asset(
// 'assets/images/showcase$i.png')) 'assets/images/showcase$i.png'))
], ],
); );
}, },
@ -210,7 +332,7 @@ class LoginScreenState extends State<LoginScreen> {
decoration: const BoxDecoration( decoration: const BoxDecoration(
gradient: LinearGradient( gradient: LinearGradient(
colors: [Color(0x00DAE4F7), Color(0xFFDAE4F7)], colors: [Color(0x00DAE4F7), Color(0xFFDAE4F7)],
stops: [0, 0.05], stops: [0, 0.1],
begin: Alignment.topCenter, begin: Alignment.topCenter,
end: Alignment.bottomCenter, end: Alignment.bottomCenter,
), ),
@ -238,7 +360,7 @@ class LoginScreenState extends State<LoginScreen> {
"login".i18n, "login".i18n,
style: const TextStyle( style: const TextStyle(
fontFamily: 'Montserrat', fontFamily: 'Montserrat',
fontSize: 19, fontSize: 20,
fontWeight: FontWeight.w700), fontWeight: FontWeight.w700),
)), )),
), ),