Skip to content

Commit

Permalink
feat: Add rating system calculator and fix route errors
Browse files Browse the repository at this point in the history
  • Loading branch information
0niel committed Jan 5, 2024
1 parent 54e3609 commit afc387d
Show file tree
Hide file tree
Showing 10 changed files with 674 additions and 50 deletions.
49 changes: 28 additions & 21 deletions lib/presentation/core/routes/routes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ import 'package:rtu_mirea_app/presentation/pages/profile/profile_scores_page.dar
import 'package:rtu_mirea_app/presentation/pages/profile/profile_page.dart';
import 'package:rtu_mirea_app/presentation/pages/profile/profile_settings_page.dart';
import 'package:rtu_mirea_app/presentation/widgets/images_view_gallery.dart';
import 'package:rtu_mirea_app/rating_system_calculator/view/about_rating_system_page.dart';
import 'package:rtu_mirea_app/schedule/view/schedule_details_page.dart';
// import 'package:rtu_mirea_app/rating_system_calculator/view/rating_system_calculator_page.dart';
import 'package:rtu_mirea_app/rating_system_calculator/view/rating_system_calculator_page.dart';
import 'package:rtu_mirea_app/schedule/view/schedule_page.dart';
import 'package:rtu_mirea_app/search/view/search_page.dart';
import 'package:rtu_mirea_app/services/view/view.dart';
Expand Down Expand Up @@ -86,23 +87,23 @@ GoRouter createRouter() => GoRouter(
),
GoRoute(
path: 'details',
builder: (context, state) {
redirect: (context, state) {
try {
final extra =
state.extra as (Map<String, dynamic>, DateTime);
return ScheduleDetailsPage(
lesson: LessonSchedulePart.fromJson(extra.$1),
selectedDate: extra.$2,
);
state.extra as (LessonSchedulePart, DateTime);
return null;
} catch (e) {
final extra =
state.extra as (LessonSchedulePart, DateTime);
return ScheduleDetailsPage(
lesson: extra.$1,
selectedDate: extra.$2,
);
return '/schedule';
}
},
builder: (context, state) {
final extra =
state.extra as (LessonSchedulePart, DateTime);

return ScheduleDetailsPage(
lesson: extra.$1,
selectedDate: extra.$2,
);
},
),
],
),
Expand All @@ -111,13 +112,19 @@ GoRouter createRouter() => GoRouter(
GoRoute(
path: '/services',
builder: (context, state) => const ServicesPage(),
// routes: [
// GoRoute(
// path: 'rating-system-calculator',
// builder: (context, state) =>
// const RatingSystemCalculatorPage(),
// ),
// ],
routes: [
GoRoute(
path: 'rating-system-calculator',
builder: (context, state) =>
const RatingSystemCalculatorPage(),
routes: [
GoRoute(
path: 'about',
builder: (context, state) =>
const AboutRatingSystemPage(),
),
]),
],
),
]),
StatefulShellBranch(navigatorKey: _profileNavigatorKey, routes: [
Expand Down
18 changes: 0 additions & 18 deletions lib/presentation/widgets/page_with_theme_consumer.dart

This file was deleted.

2 changes: 2 additions & 0 deletions lib/rating_system_calculator/rating_system_calculator.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export 'view/view.dart';
export 'widgets/widgets.dart';
198 changes: 198 additions & 0 deletions lib/rating_system_calculator/view/about_rating_system_page.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:rtu_mirea_app/presentation/theme.dart';
import 'package:rtu_mirea_app/presentation/typography.dart';
import 'package:rtu_mirea_app/presentation/widgets/buttons/primary_button.dart';
import 'package:rtu_mirea_app/rating_system_calculator/rating_system_calculator.dart';
import 'package:rtu_mirea_app/rating_system_calculator/widgets/scores_table.dart';
import 'package:unicons/unicons.dart';

class AboutRatingSystemPage extends StatelessWidget {
const AboutRatingSystemPage({super.key});

@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppTheme.colors.background01,
appBar: AppBar(
backgroundColor: AppTheme.colors.background01,
title: const Text(
"О БРС",
),
),
body: const SafeArea(
child: Padding(
padding: EdgeInsets.all(24),
child: RatingSystemCalculatorView(),
),
),
);
}
}

class RatingSystemCalculatorView extends StatefulWidget {
const RatingSystemCalculatorView({super.key});

@override
State<RatingSystemCalculatorView> createState() =>
_RatingSystemCalculatorViewState();
}

class _RatingSystemCalculatorViewState
extends State<RatingSystemCalculatorView> {
@override
void initState() {
super.initState();
}

@override
void dispose() {
super.dispose();
}

@override
Widget build(BuildContext context) {
return CustomScrollView(
slivers: [
SliverList(
delegate: SliverChildListDelegate(
[
Text("Баллы", style: AppTextStyle.h4),
const SizedBox(height: 16),
Text(
"Баллы — это единица измерения успеваемости студента. Они начисляются за выполнение академических требований в рамках учебного плана.",
style: AppTextStyle.body,
),
const ShortDescriptionCard(
icon: UniconsSolid.check_circle,
text: 'Максимальное количество баллов - 90',
),
const ShortDescriptionCard(
icon: UniconsSolid.exclamation_circle,
text:
'Полученные баллы можно будет увидеть в СДО по каждой дисциплине',
),
const SizedBox(height: 24),
Text("Основные баллы", style: AppTextStyle.h6),
Text(
"максимум 30",
style: AppTextStyle.body.copyWith(
color: AppTheme.colors.primary,
),
),
const SizedBox(height: 16),
RichText(
text: TextSpan(
style: AppTextStyle.body.copyWith(
color: AppTheme.colors.active,
),
children: [
const TextSpan(text: 'Выставляются за выполненеие '),
TextSpan(
text:
'обязательных заданий на аудиторных практических занятиях',
style: AppTextStyle.body.copyWith(
color: AppTheme.colors.primary,
),
),
const TextSpan(
text:
' (контрольные работы, лабораторные и т.д.)\n\nВыставляет преподаватель, ведущий практические занятия.\n\nВ начале семестра преподаватель должен объявить за что и сколько основных баллов можно будет получить в течение семестра.'),
],
),
),
const SizedBox(height: 24),
Text("Баллы за работу на занятиях", style: AppTextStyle.h6),
Text(
"максимум 30",
style: AppTextStyle.body.copyWith(
color: AppTheme.colors.primary,
),
),
const SizedBox(height: 16),
RichText(
text: TextSpan(
style: AppTextStyle.body.copyWith(
color: AppTheme.colors.active,
),
children: [
const TextSpan(text: 'Выставляются за '),
TextSpan(
text: 'посещаемость и активность на занятиях',
style: AppTextStyle.body.copyWith(
color: AppTheme.colors.primary,
),
),
const TextSpan(
text:
'.\n\nВыставляет лектор или преподаватель, ведущий практические занятия.\n\nВ начале семестра лектор и семинарист должны объявить за что и сколько баллов можно будет получить в течение семестра.'),
],
),
),
const SizedBox(height: 24),
Text("Дополнительные баллы", style: AppTextStyle.h6),
Text(
"максимум 30",
style: AppTextStyle.body.copyWith(
color: AppTheme.colors.primary,
),
),
const SizedBox(height: 16),
RichText(
text: TextSpan(
style: AppTextStyle.body.copyWith(
color: AppTheme.colors.active,
),
children: [
const TextSpan(text: 'Выставляются за выполнение '),
TextSpan(
text: 'тестовых заданий в СДО',
style: AppTextStyle.body.copyWith(
color: AppTheme.colors.primary,
),
),
const TextSpan(
text:
'.\n\nВыставляет преподаватель, ведущий практические занятия.\n\nВ начале семестра преподаватель должен объявить за что и сколько дополнительных баллов можно будет получить в течение семестра.'),
],
),
),
const SizedBox(height: 24),
Text("Что дают баллы", style: AppTextStyle.h6),
const SizedBox(height: 16),
RichText(
text: TextSpan(
style: AppTextStyle.body.copyWith(
color: AppTheme.colors.active,
),
children: [
const TextSpan(text: '1. Если общая '),
TextSpan(
text: 'сумма баллов 60 и более',
style: AppTextStyle.body.copyWith(
color: AppTheme.colors.primary,
),
),
const TextSpan(
text:
', можно автоматически получить зачет или оценку «удовлетворительно» на экзамене.\n\n',
),
const TextSpan(
text:
'2. На экзамене можно получить оценки выше, чем «удовлетворительно», однако из баллов, полученных в течение семестра, учитываются только основные баллы (макс. 30 баллов), а ещё 60 баллов можно получить за ответы на экзамене.\n\n',
),
],
),
),
const SizedBox(height: 24),
Text("Таблица баллов", style: AppTextStyle.h6),
const SizedBox(height: 16),
const ScoresTable(),
],
),
),
],
);
}
}
Loading

0 comments on commit afc387d

Please sign in to comment.