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: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 nonceEncoder = Nonce(key: [98, 97, 83, 115, 120, 79, 119, 108, 85, 49, 106, 77], nonce: nonce);
|
||||
nonceEncoder.encode(instituteCode.toUpperCase() + nonce + username.toUpperCase());
|
||||
Nonce nonceEncoder = Nonce(
|
||||
key: [98, 97, 83, 115, 120, 79, 119, 108, 85, 49, 106, 77], nonce: nonce);
|
||||
nonceEncoder
|
||||
.encode(instituteCode.toUpperCase() + nonce + username.toUpperCase());
|
||||
|
||||
return nonceEncoder;
|
||||
}
|
||||
@ -38,24 +47,27 @@ Future loginApi({
|
||||
void Function(User)? onLogin,
|
||||
void Function()? onSuccess,
|
||||
}) 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 = {
|
||||
"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);
|
||||
headers.addAll(nonce.header());
|
||||
|
||||
Map? res = await Provider.of<KretaClient>(context, listen: false).postAPI(KretaAPI.login,
|
||||
headers: headers,
|
||||
body: User.loginBody(
|
||||
username: username,
|
||||
password: password,
|
||||
instituteCode: instituteCode,
|
||||
));
|
||||
Map? res = await Provider.of<KretaClient>(context, listen: false)
|
||||
.postAPI(KretaAPI.login,
|
||||
headers: headers,
|
||||
body: User.loginBody(
|
||||
username: username,
|
||||
password: password,
|
||||
instituteCode: instituteCode,
|
||||
));
|
||||
if (res != null) {
|
||||
if (res.containsKey("error")) {
|
||||
if (res["error"] == "invalid_grant") {
|
||||
@ -64,8 +76,11 @@ Future loginApi({
|
||||
} else {
|
||||
if (res.containsKey("access_token")) {
|
||||
try {
|
||||
Provider.of<KretaClient>(context, listen: false).accessToken = res["access_token"];
|
||||
Map? studentJson = await Provider.of<KretaClient>(context, listen: false).getAPI(KretaAPI.student(instituteCode));
|
||||
Provider.of<KretaClient>(context, listen: false).accessToken =
|
||||
res["access_token"];
|
||||
Map? studentJson =
|
||||
await Provider.of<KretaClient>(context, listen: false)
|
||||
.getAPI(KretaAPI.student(instituteCode));
|
||||
Student student = Student.fromJson(studentJson!);
|
||||
var user = User(
|
||||
username: username,
|
||||
@ -79,7 +94,9 @@ Future loginApi({
|
||||
if (onLogin != null) onLogin(user);
|
||||
|
||||
// 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).setUser(user.id);
|
||||
|
||||
@ -87,7 +104,8 @@ Future loginApi({
|
||||
try {
|
||||
await Future.wait([
|
||||
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<HomeworkProvider>(context, listen: false).fetch(),
|
||||
Provider.of<MessageProvider>(context, listen: false).fetchAll(),
|
||||
|
@ -4,30 +4,40 @@ import 'package:flutter/material.dart';
|
||||
import 'package:i18n_extension/i18n_widget.dart';
|
||||
|
||||
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 bool border;
|
||||
|
||||
@override
|
||||
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);
|
||||
if (I18n.of(context).locale.languageCode != "en") averageText = averageText.replaceAll(".", ",");
|
||||
if (I18n.of(context).locale.languageCode != "en") {
|
||||
averageText = averageText.replaceAll(".", ",");
|
||||
}
|
||||
|
||||
return Container(
|
||||
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(
|
||||
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,
|
||||
),
|
||||
child: Text(
|
||||
average == 0.0 ? "-" : averageText,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(color: color, fontWeight: FontWeight.w600),
|
||||
style: TextStyle(
|
||||
color: color, fontWeight: FontWeight.w600, fontSize: 14.0),
|
||||
maxLines: 1,
|
||||
),
|
||||
);
|
||||
|
@ -6,7 +6,12 @@ import 'package:filcnaplo_mobile_ui/common/average_display.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
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);
|
||||
|
||||
final Subject subject;
|
||||
@ -25,7 +30,9 @@ class GradeSubjectTile extends StatelessWidget {
|
||||
}
|
||||
|
||||
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(
|
||||
type: MaterialType.transparency,
|
||||
@ -36,22 +43,30 @@ class GradeSubjectTile extends StatelessWidget {
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)),
|
||||
visualDensity: VisualDensity.compact,
|
||||
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(
|
||||
subject.renamedTo ?? subject.name.capital(),
|
||||
maxLines: 2,
|
||||
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(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
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),
|
||||
if (averageBefore != 0.0 && averageBefore != average) ...[
|
||||
AverageDisplay(average: averageBefore),
|
||||
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(
|
||||
changeIcon,
|
||||
style: TextStyle(
|
||||
|
Loading…
x
Reference in New Issue
Block a user