forked from firka/student-legacy
fixed grade font size
This commit is contained in:
parent
9411208f81
commit
ebdac408b0
@ -21,11 +21,20 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:filcnaplo/api/nonce.dart';
|
import 'package:filcnaplo/api/nonce.dart';
|
||||||
|
|
||||||
enum LoginState { missingFields, invalidGrant, failed, normal, inProgress, success }
|
enum LoginState {
|
||||||
|
missingFields,
|
||||||
|
invalidGrant,
|
||||||
|
failed,
|
||||||
|
normal,
|
||||||
|
inProgress,
|
||||||
|
success
|
||||||
|
}
|
||||||
|
|
||||||
Nonce getNonce(String nonce, String username, String instituteCode) {
|
Nonce getNonce(String nonce, String username, String instituteCode) {
|
||||||
Nonce nonceEncoder = Nonce(key: [98, 97, 83, 115, 120, 79, 119, 108, 85, 49, 106, 77], nonce: nonce);
|
Nonce nonceEncoder = Nonce(
|
||||||
nonceEncoder.encode(instituteCode.toUpperCase() + nonce + username.toUpperCase());
|
key: [98, 97, 83, 115, 120, 79, 119, 108, 85, 49, 106, 77], nonce: nonce);
|
||||||
|
nonceEncoder
|
||||||
|
.encode(instituteCode.toUpperCase() + nonce + username.toUpperCase());
|
||||||
|
|
||||||
return nonceEncoder;
|
return nonceEncoder;
|
||||||
}
|
}
|
||||||
@ -38,18 +47,21 @@ Future loginApi({
|
|||||||
void Function(User)? onLogin,
|
void Function(User)? onLogin,
|
||||||
void Function()? onSuccess,
|
void Function()? onSuccess,
|
||||||
}) async {
|
}) async {
|
||||||
Provider.of<KretaClient>(context, listen: false).userAgent = Provider.of<SettingsProvider>(context, listen: false).config.userAgent;
|
Provider.of<KretaClient>(context, listen: false).userAgent =
|
||||||
|
Provider.of<SettingsProvider>(context, listen: false).config.userAgent;
|
||||||
|
|
||||||
Map<String, String> headers = {
|
Map<String, String> headers = {
|
||||||
"content-type": "application/x-www-form-urlencoded",
|
"content-type": "application/x-www-form-urlencoded",
|
||||||
};
|
};
|
||||||
|
|
||||||
String nonceStr = await Provider.of<KretaClient>(context, listen: false).getAPI(KretaAPI.nonce, json: false);
|
String nonceStr = await Provider.of<KretaClient>(context, listen: false)
|
||||||
|
.getAPI(KretaAPI.nonce, json: false);
|
||||||
|
|
||||||
Nonce nonce = getNonce(nonceStr, username, instituteCode);
|
Nonce nonce = getNonce(nonceStr, username, instituteCode);
|
||||||
headers.addAll(nonce.header());
|
headers.addAll(nonce.header());
|
||||||
|
|
||||||
Map? res = await Provider.of<KretaClient>(context, listen: false).postAPI(KretaAPI.login,
|
Map? res = await Provider.of<KretaClient>(context, listen: false)
|
||||||
|
.postAPI(KretaAPI.login,
|
||||||
headers: headers,
|
headers: headers,
|
||||||
body: User.loginBody(
|
body: User.loginBody(
|
||||||
username: username,
|
username: username,
|
||||||
@ -64,8 +76,11 @@ Future loginApi({
|
|||||||
} else {
|
} else {
|
||||||
if (res.containsKey("access_token")) {
|
if (res.containsKey("access_token")) {
|
||||||
try {
|
try {
|
||||||
Provider.of<KretaClient>(context, listen: false).accessToken = res["access_token"];
|
Provider.of<KretaClient>(context, listen: false).accessToken =
|
||||||
Map? studentJson = await Provider.of<KretaClient>(context, listen: false).getAPI(KretaAPI.student(instituteCode));
|
res["access_token"];
|
||||||
|
Map? studentJson =
|
||||||
|
await Provider.of<KretaClient>(context, listen: false)
|
||||||
|
.getAPI(KretaAPI.student(instituteCode));
|
||||||
Student student = Student.fromJson(studentJson!);
|
Student student = Student.fromJson(studentJson!);
|
||||||
var user = User(
|
var user = User(
|
||||||
username: username,
|
username: username,
|
||||||
@ -79,7 +94,9 @@ Future loginApi({
|
|||||||
if (onLogin != null) onLogin(user);
|
if (onLogin != null) onLogin(user);
|
||||||
|
|
||||||
// Store User in the database
|
// Store User in the database
|
||||||
await Provider.of<DatabaseProvider>(context, listen: false).store.storeUser(user);
|
await Provider.of<DatabaseProvider>(context, listen: false)
|
||||||
|
.store
|
||||||
|
.storeUser(user);
|
||||||
Provider.of<UserProvider>(context, listen: false).addUser(user);
|
Provider.of<UserProvider>(context, listen: false).addUser(user);
|
||||||
Provider.of<UserProvider>(context, listen: false).setUser(user.id);
|
Provider.of<UserProvider>(context, listen: false).setUser(user.id);
|
||||||
|
|
||||||
@ -87,7 +104,8 @@ Future loginApi({
|
|||||||
try {
|
try {
|
||||||
await Future.wait([
|
await Future.wait([
|
||||||
Provider.of<GradeProvider>(context, listen: false).fetch(),
|
Provider.of<GradeProvider>(context, listen: false).fetch(),
|
||||||
Provider.of<TimetableProvider>(context, listen: false).fetch(week: Week.current()),
|
Provider.of<TimetableProvider>(context, listen: false)
|
||||||
|
.fetch(week: Week.current()),
|
||||||
Provider.of<ExamProvider>(context, listen: false).fetch(),
|
Provider.of<ExamProvider>(context, listen: false).fetch(),
|
||||||
Provider.of<HomeworkProvider>(context, listen: false).fetch(),
|
Provider.of<HomeworkProvider>(context, listen: false).fetch(),
|
||||||
Provider.of<MessageProvider>(context, listen: false).fetchAll(),
|
Provider.of<MessageProvider>(context, listen: false).fetchAll(),
|
||||||
|
@ -4,30 +4,40 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:i18n_extension/i18n_widget.dart';
|
import 'package:i18n_extension/i18n_widget.dart';
|
||||||
|
|
||||||
class AverageDisplay extends StatelessWidget {
|
class AverageDisplay extends StatelessWidget {
|
||||||
const AverageDisplay({Key? key, this.average = 0.0, this.border = false}) : super(key: key);
|
const AverageDisplay({Key? key, this.average = 0.0, this.border = false})
|
||||||
|
: super(key: key);
|
||||||
|
|
||||||
final double average;
|
final double average;
|
||||||
final bool border;
|
final bool border;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
Color color = average == 0.0 ? AppColors.of(context).text.withOpacity(.8) : gradeColor(context: context, value: average);
|
Color color = average == 0.0
|
||||||
|
? AppColors.of(context).text.withOpacity(.8)
|
||||||
|
: gradeColor(context: context, value: average);
|
||||||
|
|
||||||
String averageText = average.toStringAsFixed(2);
|
String averageText = average.toStringAsFixed(2);
|
||||||
if (I18n.of(context).locale.languageCode != "en") averageText = averageText.replaceAll(".", ",");
|
if (I18n.of(context).locale.languageCode != "en") {
|
||||||
|
averageText = averageText.replaceAll(".", ",");
|
||||||
|
}
|
||||||
|
|
||||||
return Container(
|
return Container(
|
||||||
width: border ? 57.0 : 54.0,
|
width: border ? 57.0 : 54.0,
|
||||||
padding: EdgeInsets.symmetric(horizontal: 8.0 - (border ? 2 : 0), vertical: 6.0 - (border ? 2 : 0)),
|
padding: EdgeInsets.symmetric(
|
||||||
|
horizontal: 8.0 - (border ? 2 : 0), vertical: 6.0 - (border ? 2 : 0)),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(45.0),
|
borderRadius: BorderRadius.circular(45.0),
|
||||||
border: border ? Border.fromBorderSide(BorderSide(color: color.withOpacity(.5), width: 3.0)) : null,
|
border: border
|
||||||
|
? Border.fromBorderSide(
|
||||||
|
BorderSide(color: color.withOpacity(.5), width: 3.0))
|
||||||
|
: null,
|
||||||
color: !border ? color.withOpacity(average == 0.0 ? .15 : .25) : null,
|
color: !border ? color.withOpacity(average == 0.0 ? .15 : .25) : null,
|
||||||
),
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
average == 0.0 ? "-" : averageText,
|
average == 0.0 ? "-" : averageText,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: TextStyle(color: color, fontWeight: FontWeight.w600),
|
style: TextStyle(
|
||||||
|
color: color, fontWeight: FontWeight.w600, fontSize: 14.0),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -6,7 +6,12 @@ import 'package:filcnaplo_mobile_ui/common/average_display.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class GradeSubjectTile extends StatelessWidget {
|
class GradeSubjectTile extends StatelessWidget {
|
||||||
const GradeSubjectTile(this.subject, {Key? key, this.average = 0.0, this.groupAverage = 0.0, this.onTap, this.averageBefore = 0.0})
|
const GradeSubjectTile(this.subject,
|
||||||
|
{Key? key,
|
||||||
|
this.average = 0.0,
|
||||||
|
this.groupAverage = 0.0,
|
||||||
|
this.onTap,
|
||||||
|
this.averageBefore = 0.0})
|
||||||
: super(key: key);
|
: super(key: key);
|
||||||
|
|
||||||
final Subject subject;
|
final Subject subject;
|
||||||
@ -25,7 +30,9 @@ class GradeSubjectTile extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final String changeIcon = average < averageBefore ? "▼" : "▲";
|
final String changeIcon = average < averageBefore ? "▼" : "▲";
|
||||||
final Color changeColor = average < averageBefore ? Colors.redAccent : Colors.lightGreenAccent.shade700;
|
final Color changeColor = average < averageBefore
|
||||||
|
? Colors.redAccent
|
||||||
|
: Colors.lightGreenAccent.shade700;
|
||||||
|
|
||||||
return Material(
|
return Material(
|
||||||
type: MaterialType.transparency,
|
type: MaterialType.transparency,
|
||||||
@ -36,22 +43,30 @@ class GradeSubjectTile extends StatelessWidget {
|
|||||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
|
||||||
visualDensity: VisualDensity.compact,
|
visualDensity: VisualDensity.compact,
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
leading: Icon(SubjectIcon.resolveVariant(subject: subject, context: context), color: textColor.withOpacity(.75)),
|
leading: Icon(
|
||||||
|
SubjectIcon.resolveVariant(subject: subject, context: context),
|
||||||
|
color: textColor.withOpacity(.75)),
|
||||||
title: Text(
|
title: Text(
|
||||||
subject.renamedTo ?? subject.name.capital(),
|
subject.renamedTo ?? subject.name.capital(),
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: TextStyle(fontWeight: FontWeight.w600, fontSize: 14.0, color: textColor, fontStyle: subject.isRenamed ? FontStyle.italic : null),
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
fontSize: 14.0,
|
||||||
|
color: textColor,
|
||||||
|
fontStyle: subject.isRenamed ? FontStyle.italic : null),
|
||||||
),
|
),
|
||||||
trailing: Row(
|
trailing: Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: [
|
children: [
|
||||||
if (groupAverage != 0 && averageBefore == 0.0) AverageDisplay(average: groupAverage, border: true),
|
if (groupAverage != 0 && averageBefore == 0.0)
|
||||||
|
AverageDisplay(average: groupAverage, border: true),
|
||||||
const SizedBox(width: 6.0),
|
const SizedBox(width: 6.0),
|
||||||
if (averageBefore != 0.0 && averageBefore != average) ...[
|
if (averageBefore != 0.0 && averageBefore != average) ...[
|
||||||
AverageDisplay(average: averageBefore),
|
AverageDisplay(average: averageBefore),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(left: 6.0, right: 6.0, bottom: 3.5),
|
padding:
|
||||||
|
const EdgeInsets.only(left: 6.0, right: 6.0, bottom: 3.5),
|
||||||
child: Text(
|
child: Text(
|
||||||
changeIcon,
|
changeIcon,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user