Giter VIP home page Giter VIP logo

acs-upb-mobile's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

acs-upb-mobile's Issues

Ability to make custom timetables

  • Problem
    The default timetable for each group is nice, although I would like to modify it for the optional and facultative classes that I have, and other people don't. (e.g. I have Grafica Inginereasca on Thursdays, but some of my colleagues have Introducere in Informatica on Mondays).

  • Solution
    A way to customize the default timetable, individually for each student, not for the whole group (probably locally, not online). Optionally, a way to reset back to the default timetable would be nice.

  • Alternatives?
    An alternative would be modifying the timetable for the whole group, by including all optional and facultative classes, but in my opinion, it wouldn't be ideal. It will more likely be annoying, because we would get classes in the timetable to which we won't attend.

Default displayed week type is sometimes even instead of odd

Describe the bug
When modifying an existing odd event, the default week type might be defaulted to even on the editing page.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Timetable'
  2. Click on an odd event
  3. See error (?)

Expected behavior
The week type should be odd.

Additional context
We're still trying to look for the vulnerable events and what makes them vulnerable
ezgif-4-b7fdee4f69fd

ezgif-4-de5da359f210

Displayed semester for editing / creating events can be wrong

Description
When editing an event / creating a new one, and that event is part of the second semester, the default displayed semester for its page is 1 instead of 2. This is because the selectedSemester variable is initialized wrongly.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Timetable'
  2. Click on an event from the second semester or create a new one there
  3. Edit it
  4. See error

Expected behavior
Semester dropdown should default to 1.

Additional context
I posted a possible fix #135

Improve UI on grading page

The page for adding grading information is not intuitive enough - users don't realise that a new field is added automatically when they fill in the last empty field, and that they have to delete the text from a field to remove it.

Possible solutions:

  • add an "info" button which shows some instructions
  • add +/- buttons for fields

Update filter when user changes their group/year etc.

When a user creates a new account, the filter is automatically set to match their profile group/series/year/degree. However, when they change their profile information, the filter isn't updated.

As simple as this sounds, there are actually several options for doing this, each with their own pitfalls:
A. Reset filter completely and select only the new group information.
- Pros: Very easy to implement. Would make perfect sense if the group change is a result of a new year starting, since clearly you wouldn't need the old settings anymore. (Related question: In this case, would it make sense to reset classes as well?)
- Cons: Overriding user settings is not very intuitive and may be frustrating.
B. Keep the current filter and add the new group/whatever on top of it.
- Pros: Relatively simple to implement. Might (?) make sense if user has classes from previous year they need to repeat.
- Cons: In the case of a year change, user would have to manually remove their old group from the filter if they want to.
C. Replace the previous group (if) in the filter.
- Pros: Might (?) make sense if user already added some nodes for the new year.
- Cons: Difficult logic to implement, implies lots of edge cases.

After writing these things out, I don't really see a strong use case where B & C would be necessary. The question is, would the user ever need to change their info for anything other than a year change (which would automatically imply kind of a hard reset for everything)?
Mitigating the con for A is simple - after the user saves the profile, show a prompt that says "Would you like to reset your filter with the new settings?" so that user is warned about what will happen and can opt out.

TL;DR: Unless a different functionality will be requested by users, I'd say we can just reset the filter completely when the user changes their year/group info, but show a prompt allowing the user to choose whether they want to do that or not.

Autoscroll on signup page

When a new dropdown button shows up, the user has to scroll manually to see it:

Scrolling should be done automatically.

Ignore/Remove email whitespace

Is your feature request related to a problem? Please describe.
Sometimes when users use autocomplete to fill in their email (on the login/signup/edit profile page), it adds a trailing space which makes the address be seen as invalid.

Describe the solution you'd like
Remove/trim the whitespace on field submit, or just ignore it when passing the email to the check function.

Home page language isn't updated unless reloaded

Describe the bug
After changing the app language in Settings, the home page language remains unchanged unless you navigate away from it and then back.

To Reproduce
Steps to reproduce the behavior:

  1. Go to Settings
  2. Change language
  3. Press back
  4. See Home page language remain unchanged

Expected behavior
Home page rebuilds when language is changed.

Error message shows when cancelling profile picture selection

Describe the bug
When cancelling the profile picture selection without choosing an image, a message saying "The image could not be loaded" shows on the screen. Cancelling should be an accepted action, not treated like an error.

To Reproduce
Steps to reproduce the behavior:

  1. Click the edit button on the profile card
  2. Press the edit button on the profile picture
  3. Cancel without selecting a picture
  4. See "The image could not be loaded" error message

Expected behavior
No error message shows.

Smartphone (please complete the following information):

  • Device: Pixel 3 emulator
  • OS: Android 11
  • Version 1.2.4+7

Non-square profile pictures get squished

Describe the bug
When picking a profile picture that is not square, it looks squished in the preview.

To Reproduce
Steps to reproduce the behavior:

  1. Click the edit button on the profile card
  2. Press the edit button on the profile picture
  3. Pick an image that is not square
  4. Save and see the result

Expected behavior
Image is cropped if it doesn't fit, not squished. Ideally, we should have a way to crop it directly inside the app.

Screenshots
Input image:
image
Result in the app:
Screenshot 2020-12-03 at 20 48 04

Smartphone (please complete the following information):

  • Device: Pixel 3 emulator
  • OS: Android 11
  • Version 1.2.4+7

The classes remain checked/uncheck on "Choose Classes" page, after removing/adding them.

20201009_144017.zip

Describe the bug
If a user uncheck/check one or more classes, on "Choose classes" page, apply the changes and then reenter on the same page, it can be observed that the classes remain in the same state as before applying change. Please consider that if the user goes bat to timetable tab after editing the classes and reopen the add class page the issue would not occur.

To Reproduce
Steps to reproduce the behavior:

  1. Go to timetable tab
  2. Click on classes
  3. Click on add class
  4. Click on any class
  5. Click on save
  6. Click on add class again
  7. See error

Expected behavior
After removing or adding a class and reopening the "Choose class" page, the new classes should be check and over to be uncheck

Screenshots
For a better understanding of the issue, please see the video in the zip folder

Desktop (please complete the following information):

  • OS: Windows
  • Browser Mozilla Firefox
  • Version 81

Smartphone (please complete the following information):

  • Device: Huawei p20 lite
  • OS: Android 9.1.0
  • Browser: Chrome
  • Version 86.0.4240.75

Additional context
The same problem may be observed on Android version on the same smartphone

HTML title disappears

The page title shows up correctly but then disappears when the page loads completely.

Profile picture doesn't show on home page immediately after changing

Describe the bug
After picking a new profile picture, the picture on the home page isn't updated unless the home page is reloaded.

To Reproduce
Steps to reproduce the behavior:

  1. Click the edit button on the profile card
  2. Press the edit button on the profile picture
  3. Pick an image
  4. Notice the home page image is not changed

Expected behavior
Home page image is updated.

Screenshots

Smartphone (please complete the following information):

  • Device: Pixel 4
  • OS: Android 11
  • Version 1.2.4+7

Expected a value of type 'bool', but got one of type 'int'

After a few visits of the websites on the portal, I received this: //(for web version)
Expected a value of type 'bool', but got one of type 'int'
The relevant error-causing widget was:
ListTileTheme acs-upb-mobile/lib/widgets/spoiler.dart:74:14

Mark events as 'canceled'

Make them more transparent on the timetable and maybe on the event page show something like 'John Doe marked this event as cancelled'.

Tests break with Flutter 1.23

After upgrading to Flutter 1.23.0-18.1.pre, tests break badly:

`flutter test` output
>flutter test
Warning: You are using these overridden dependencies:
! dartx 0.5.0
Running "flutter pub get" in acs-upb-mobile...                      1.9s
00:12 +0: loading C:\Users\sako_\StudioProjects\acs-upb-mobile\test\authentication_test.dart                                                                                 .
./../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendar_system.dart:8:2: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendar_system.dart:8:2: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/zoneddatetime.dart:18:2: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/zoneddatetime.dart:18:2: Error: This can't be used as metadata; metadata should be a reference
to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/localtime.dart:11:2: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/localtime.dart:11:2: Error: This can't be used as metadata; metadata should be a reference to
a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/localdate.dart:8:2: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/localdate.dart:8:2: Error: This can't be used as metadata; metadata should be a reference to a
compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/localdatetime.dart:11:2: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/localdatetime.dart:11:2: Error: This can't be used as metadata; metadata should be a reference
to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/duration.dart:11:2: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/duration.dart:11:2: Error: This can't be used as metadata; metadata should be a reference to a
compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/instant.dart:8:2: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/instant.dart:8:2: Error: This can't be used as metadata; metadata should be a reference to a
compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/interval.dart:9:2: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/interval.dart:9:2: Error: This can't be used as metadata; metadata should be a reference to a
compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/ambiguous_time_error.dart:11:4: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
  @internal LocalDateTime get localDateTime => earlierMapping.localDateTime;
   ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/ambiguous_time_error.dart:11:4: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
  @internal LocalDateTime get localDateTime => earlierMapping.localDateTime;
   ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/offset_datetime.dart:9:2: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/offset_datetime.dart:9:2: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/period.dart:37:2: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/period.dart:37:2: Error: This can't be used as metadata; metadata should be a reference to a
compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/period.dart:744:4: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
  @internal static final NormalizingPeriodEqualityComparer instance = new NormalizingPeriodEqualityComparer._();
   ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/period.dart:744:4: Error: This can't be used as metadata; metadata should be a reference to a
compile-time constant variable, or a call to a constant constructor.
  @internal static final NormalizingPeriodEqualityComparer instance = new NormalizingPeriodEqualityComparer._();
   ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/globalization/culture.dart:9:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/globalization/culture.dart:9:2: Error: This can't be used as metadata; metadata should be
a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zone_equality_comparer.dart:133:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zone_equality_comparer.dart:133:2: Error: This can't be used as metadata; metadata
should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zone_equality_comparer.dart:263:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zone_equality_comparer.dart:263:2: Error: This can't be used as metadata; metadata
should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zoneinterval.dart:10:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zoneinterval.dart:10:2: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zone_local_mapping.dart:11:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zone_local_mapping.dart:11:2: Error: This can't be used as metadata; metadata should
be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/yearmonthday_and_calendar.dart:12:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/yearmonthday_and_calendar.dart:12:2: Error: This can't be used as metadata; metadata should be
a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/localinstant.dart:15:2: Error: 'internal' is imported from both 'package:meta/meta.dart' and
'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/localinstant.dart:15:2: Error: This can't be used as metadata; metadata should be a reference
to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/globalization/time_machine_format_info.dart:23:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/globalization/time_machine_format_info.dart:23:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/parse_result.dart:133:2: Error: 'internal' is imported from both 'package:meta/meta.dart'
and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/parse_result.dart:133:2: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/text_cursor.dart:15:2: Error: 'internal' is imported from both 'package:meta/meta.dart'
and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/text_cursor.dart:15:2: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/localdate_pattern.dart:8:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/localdate_pattern.dart:8:2: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/localtime_pattern.dart:8:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/localtime_pattern.dart:8:2: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/localdatetime_pattern.dart:10:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/localdatetime_pattern.dart:10:2: Error: This can't be used as metadata; metadata should
be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/annual_date_pattern.dart:11:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/annual_date_pattern.dart:11:2: Error: This can't be used as metadata; metadata should be
a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/duration_pattern.dart:9:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/duration_pattern.dart:9:2: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/instant_pattern.dart:8:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/instant_pattern.dart:8:2: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/offset_date_pattern.dart:10:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/offset_date_pattern.dart:10:2: Error: This can't be used as metadata; metadata should be
a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/offset_datetime_pattern.dart:10:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/offset_datetime_pattern.dart:10:2: Error: This can't be used as metadata; metadata should
be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/offset_pattern.dart:8:2: Error: 'internal' is imported from both 'package:meta/meta.dart'
and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/offset_pattern.dart:8:2: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/offset_time_pattern.dart:10:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/offset_time_pattern.dart:10:2: Error: This can't be used as metadata; metadata should be
a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/zoneddatetime_pattern.dart:10:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/zoneddatetime_pattern.dart:10:2: Error: This can't be used as metadata; metadata should
be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/gj_yearmonthday_calculator.dart:9:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/gj_yearmonthday_calculator.dart:9:2: Error: This can't be used as metadata; metadata
should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/gregorian_yearmonthday_calculator.dart:54:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/gregorian_yearmonthday_calculator.dart:54:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/julian_yearmonthday_calculator.dart:10:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal 
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/julian_yearmonthday_calculator.dart:10:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal 
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/yearmonthday_calculator.dart:15:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/yearmonthday_calculator.dart:15:2: Error: This can't be used as metadata; metadata
should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/gj_era_calculator.dart:13:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/gj_era_calculator.dart:13:2: Error: This can't be used as metadata; metadata should
be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/era_calculator.dart:14:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/era_calculator.dart:14:2: Error: This can't be used as metadata; metadata should be
a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/simple_week_year_rule.dart:17:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/simple_week_year_rule.dart:17:2: Error: This can't be used as metadata; metadata
should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/badi_yearmonthday_calculator.dart:12:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/badi_yearmonthday_calculator.dart:12:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/coptic_yearmonthday_calculator.dart:8:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/coptic_yearmonthday_calculator.dart:8:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/fixed_month_yearmonthday_calculator.dart:13:2: Error: 'internal' is imported from
both 'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/fixed_month_yearmonthday_calculator.dart:13:2: Error: This can't be used as
metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/hebrew_yearmonthday_calculator.dart:11:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/hebrew_yearmonthday_calculator.dart:11:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/islamic_yearmonthday_calculator.dart:8:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/islamic_yearmonthday_calculator.dart:8:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/persian_yearmonthday_calculator.dart:14:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/persian_yearmonthday_calculator.dart:14:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/persian_yearmonthday_calculator.dart:114:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/persian_yearmonthday_calculator.dart:114:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/persian_yearmonthday_calculator.dart:148:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/persian_yearmonthday_calculator.dart:148:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/persian_yearmonthday_calculator.dart:163:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/persian_yearmonthday_calculator.dart:163:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/um_al_qura_yearmonthday_calculator.dart:13:2: Error: 'internal' is imported from
both 'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/calendars/um_al_qura_yearmonthday_calculator.dart:13:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/fixed_datetimezone.dart:19:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/fixed_datetimezone.dart:19:2: Error: This can't be used as metadata; metadata should
be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/precalculated_datetimezone.dart:20:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/precalculated_datetimezone.dart:20:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/single_zoneinterval_map.dart:13:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/single_zoneinterval_map.dart:13:2: Error: This can't be used as metadata; metadata
should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/standard_daylight_alternating_map.dart:38:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/standard_daylight_alternating_map.dart:38:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/transition.dart:13:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/transition.dart:13:2: Error: This can't be used as metadata; metadata should be a
reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/tzdb_zone_1970_location.dart:78:4: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
  @internal void write(IDateTimeZoneWriter writer) {
   ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/tzdb_zone_1970_location.dart:78:4: Error: This can't be used as metadata; metadata
should be a reference to a compile-time constant variable, or a call to a constant constructor.
  @internal void write(IDateTimeZoneWriter writer) {
   ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/tzdb_zone_1970_location.dart:96:4: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
  @internal static TzdbZone1970Location read(DateTimeZoneReader reader)
   ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/tzdb_zone_1970_location.dart:96:4: Error: This can't be used as metadata; metadata
should be a reference to a compile-time constant variable, or a call to a constant constructor.
  @internal static TzdbZone1970Location read(DateTimeZoneReader reader)
   ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/tzdb_zone_location.dart:74:4: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
  @internal void write(IDateTimeZoneWriter writer)
   ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/tzdb_zone_location.dart:74:4: Error: This can't be used as metadata; metadata should
be a reference to a compile-time constant variable, or a call to a constant constructor.
  @internal void write(IDateTimeZoneWriter writer)
   ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/tzdb_zone_location.dart:84:4: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
  @internal static TzdbZoneLocation read(DateTimeZoneReader reader) {
   ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/tzdb_zone_location.dart:84:4: Error: This can't be used as metadata; metadata should
be a reference to a compile-time constant variable, or a call to a constant constructor.
  @internal static TzdbZoneLocation read(DateTimeZoneReader reader) {
   ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zone_recurrence.dart:17:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zone_recurrence.dart:17:2: Error: This can't be used as metadata; metadata should be
a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zone_year_offset.dart:26:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/timezones/zone_year_offset.dart:26:2: Error: This can't be used as metadata; metadata should
be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/fields/fixed_length_date_period_field.dart:13:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/fields/fixed_length_date_period_field.dart:13:2: Error: This can't be used as metadata;
metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/fields/time_period_field.dart:65:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/fields/time_period_field.dart:65:2: Error: This can't be used as metadata; metadata should be
a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/patterns/pattern_fields.dart:14:2: Error: 'internal' is imported from both
'package:meta/meta.dart' and 'package:time_machine/src/time_machine_internal.dart'.
@internal
 ^^^^^^^^
../../../flutter/.pub-cache/hosted/pub.dartlang.org/time_machine-0.9.13/lib/src/text/patterns/pattern_fields.dart:14:2: Error: This can't be used as metadata; metadata should
be a reference to a compile-time constant variable, or a call to a constant constructor.
@internal
 ^
00:21 +0 -1: loading C:\Users\sako_\StudioProjects\acs-upb-mobile\test\authentication_test.dart [E]
  Failed to load "C:\Users\sako_\StudioProjects\acs-upb-mobile\test\authentication_test.dart":
  Compilation failed
  Test: C:\Users\sako_\StudioProjects\acs-upb-mobile\test\authentication_test.dart
  Shell: C:\Users\sako_\flutter\bin\cache\artifacts\engine\windows-x64\flutter_tester.exe


  Exception: the Dart compiler exited unexpectedly.
  package:flutter_tools/src/base/common.dart 14:3                throwToolExit
  package:flutter_tools/src/compile.dart 716:9                   DefaultResidentCompiler._compile.<fn>
  package:stack_trace/src/stack_zone_specification.dart 126:26   StackZoneSpecification._registerUnaryCallback.<fn>.<fn>
  package:stack_trace/src/stack_zone_specification.dart 208:15   StackZoneSpecification._run
  package:stack_trace/src/stack_zone_specification.dart 126:14   StackZoneSpecification._registerUnaryCallback.<fn>
  dart:async/zone.dart 1198:47                                   _rootRunUnary
  dart:async/zone.dart 1100:19                                   _CustomZone.runUnary
  dart:async/future_impl.dart 143:18                             _FutureListener.handleValue
  dart:async/future_impl.dart 696:45                             Future._propagateToListeners.handleValueCallback
  dart:async/future_impl.dart 725:32                             Future._propagateToListeners
  dart:async/future_impl.dart 621:9                              Future._propagateToListeners
  dart:async/future_impl.dart 529:5                              Future._completeWithValue
  dart:async/future_impl.dart 567:7                              Future._asyncCompleteWithValue.<fn>
  package:stack_trace/src/stack_zone_specification.dart 208:15   StackZoneSpecification._run
  package:stack_trace/src/stack_zone_specification.dart 116:48   StackZoneSpecification._registerCallback.<fn>
  dart:async/zone.dart 1190:13                                   _rootRun
  dart:async/zone.dart 1093:19                                   _CustomZone.run
  dart:async/zone.dart 997:7                                     _CustomZone.runGuarded
  dart:async/zone.dart 1037:23                                   _CustomZone.bindCallbackGuarded.<fn>
  dart:async/schedule_microtask.dart 41:21                       _microtaskLoop
  dart:async/schedule_microtask.dart 50:5                        _startMicrotaskLoop
  dart:isolate-patch/isolate_patch.dart 118:13                   _runPendingImmediateCallback
  dart:isolate-patch/isolate_patch.dart 169:5                    _RawReceivePortImpl._handleMessage
  ===== asynchronous gap ===========================
  dart:async/zone.dart 1121:19                                   _CustomZone.registerUnaryCallback
  dart:async/future_impl.dart 280:23                             Future.then
  package:flutter_tools/src/compile.dart 714:32                  DefaultResidentCompiler._compile
  ===== asynchronous gap ===========================
  dart:async/zone.dart 1121:19                                   _CustomZone.registerUnaryCallback
  dart:async-patch/async_patch.dart 83:23                        _asyncThenWrapperHelper
  package:flutter_tools/src/compile.dart 588:14                  DefaultResidentCompiler._recompile
  package:flutter_tools/src/compile.dart 333:16                  _RecompileRequest._run
  package:flutter_tools/src/compile.dart 311:30                  _CompilationRequest.run
  package:flutter_tools/src/compile.dart 627:23                  DefaultResidentCompiler._handleCompilationRequest
  package:stack_trace/src/stack_zone_specification.dart 126:26   StackZoneSpecification._registerUnaryCallback.<fn>.<fn>
  package:stack_trace/src/stack_zone_specification.dart 208:15   StackZoneSpecification._run
  package:stack_trace/src/stack_zone_specification.dart 126:14   StackZoneSpecification._registerUnaryCallback.<fn>
  dart:async/zone.dart 1198:47                                   _rootRunUnary
  dart:async/zone.dart 1100:19                                   _CustomZone.runUnary
  dart:async/zone.dart 1005:7                                    _CustomZone.runUnaryGuarded
  dart:async/stream_impl.dart 357:11                             _BufferingStreamSubscription._sendData
  dart:async/stream_impl.dart 611:14                             _DelayedData.perform
  dart:async/stream_impl.dart 730:11                             _StreamImplEvents.handleNext
  dart:async/stream_impl.dart 687:7                              _PendingEvents.schedule.<fn>
  package:stack_trace/src/stack_zone_specification.dart 208:15   StackZoneSpecification._run
  package:stack_trace/src/stack_zone_specification.dart 116:48   StackZoneSpecification._registerCallback.<fn>
  dart:async/zone.dart 1182:47                                   _rootRun
  dart:async/zone.dart 1093:19                                   _CustomZone.run
  dart:async/zone.dart 997:7                                     _CustomZone.runGuarded
  dart:async/zone.dart 1037:23                                   _CustomZone.bindCallbackGuarded.<fn>
  package:stack_trace/src/stack_zone_specification.dart 208:15   StackZoneSpecification._run
  package:stack_trace/src/stack_zone_specification.dart 116:48   StackZoneSpecification._registerCallback.<fn>
  dart:async/zone.dart 1190:13                                   _rootRun
  dart:async/zone.dart 1093:19                                   _CustomZone.run
  dart:async/zone.dart 997:7                                     _CustomZone.runGuarded
  dart:async/zone.dart 1037:23                                   _CustomZone.bindCallbackGuarded.<fn>
  dart:async/schedule_microtask.dart 41:21                       _microtaskLoop
  dart:async/schedule_microtask.dart 50:5                        _startMicrotaskLoop
  dart:isolate-patch/isolate_patch.dart 118:13                   _runPendingImmediateCallback
  dart:isolate-patch/timer_impl.dart 404:11                      _Timer._runTimers
  dart:isolate-patch/timer_impl.dart 428:5                       _Timer._handleMessage
  dart:isolate-patch/isolate_patch.dart 168:12                   _RawReceivePortImpl._handleMessage
  ===== asynchronous gap ===========================
  dart:async/zone.dart 1121:19                                   _CustomZone.registerUnaryCallback
  dart:async/stream_impl.dart 146:17                             _BufferingStreamSubscription._registerDataHandler
  dart:async/stream_impl.dart 118:19                             new _BufferingStreamSubscription.zoned
  dart:async/stream_impl.dart 113:14                             new _BufferingStreamSubscription
  dart:async/stream_controller.dart 880:9                        new _ControllerSubscription
  dart:async/stream_controller.dart 712:47                       _StreamController._subscribe
  dart:async/stream_controller.dart 860:19                       _ControllerStream._createSubscription
  dart:async/stream_impl.dart 493:9                              _StreamImpl.listen
  package:flutter_tools/src/compile.dart 572:26                  DefaultResidentCompiler.recompile
  package:flutter_tools/src/test/test_compiler.dart 159:60       TestCompiler._onCompilationRequest
  ===== asynchronous gap ===========================
  dart:async/zone.dart 1121:19                                   _CustomZone.registerUnaryCallback
  dart:async-patch/async_patch.dart 83:23                        _asyncThenWrapperHelper
  package:stack_trace/src/stack_zone_specification.dart 126:26   StackZoneSpecification._registerUnaryCallback.<fn>.<fn>
  package:stack_trace/src/stack_zone_specification.dart 208:15   StackZoneSpecification._run
  package:stack_trace/src/stack_zone_specification.dart 126:14   StackZoneSpecification._registerUnaryCallback.<fn>
  dart:async/zone.dart 1198:47                                   _rootRunUnary
  dart:async/zone.dart 1100:19                                   _CustomZone.runUnary
  dart:async/zone.dart 1005:7                                    _CustomZone.runUnaryGuarded
  dart:async/stream_impl.dart 357:11                             _BufferingStreamSubscription._sendData
  dart:async/stream_impl.dart 611:14                             _DelayedData.perform
  dart:async/stream_impl.dart 730:11                             _StreamImplEvents.handleNext
  dart:async/stream_impl.dart 687:7                              _PendingEvents.schedule.<fn>
  package:stack_trace/src/stack_zone_specification.dart 208:15   StackZoneSpecification._run
  package:stack_trace/src/stack_zone_specification.dart 116:48   StackZoneSpecification._registerCallback.<fn>
  dart:async/zone.dart 1182:47                                   _rootRun
  dart:async/zone.dart 1093:19                                   _CustomZone.run
  dart:async/zone.dart 997:7                                     _CustomZone.runGuarded
  dart:async/zone.dart 1037:23                                   _CustomZone.bindCallbackGuarded.<fn>
  package:stack_trace/src/stack_zone_specification.dart 208:15   StackZoneSpecification._run
  package:stack_trace/src/stack_zone_specification.dart 116:48   StackZoneSpecification._registerCallback.<fn>
  dart:async/zone.dart 1190:13                                   _rootRun
  dart:async/zone.dart 1093:19                                   _CustomZone.run
  dart:async/zone.dart 997:7                                     _CustomZone.runGuarded
  dart:async/zone.dart 1037:23                                   _CustomZone.bindCallbackGuarded.<fn>
  dart:async/schedule_microtask.dart 41:21                       _microtaskLoop
  dart:async/schedule_microtask.dart 50:5                        _startMicrotaskLoop
  dart:isolate-patch/isolate_patch.dart 118:13                   _runPendingImmediateCallback
  dart:isolate-patch/timer_impl.dart 404:11                      _Timer._runTimers
  dart:isolate-patch/timer_impl.dart 428:5                       _Timer._handleMessage
  dart:isolate-patch/isolate_patch.dart 168:12                   _RawReceivePortImpl._handleMessage
  ===== asynchronous gap ===========================
  dart:async/zone.dart 1121:19                                   _CustomZone.registerUnaryCallback
  dart:async/stream_impl.dart 146:17                             _BufferingStreamSubscription._registerDataHandler
  dart:async/stream_impl.dart 118:19                             new _BufferingStreamSubscription.zoned
  dart:async/stream_impl.dart 113:14                             new _BufferingStreamSubscription
  dart:async/stream_controller.dart 880:9                        new _ControllerSubscription
  dart:async/stream_controller.dart 712:47                       _StreamController._subscribe
  dart:async/stream_controller.dart 860:19                       _ControllerStream._createSubscription
  dart:async/stream_impl.dart 493:9                              _StreamImpl.listen
  package:flutter_tools/src/test/test_compiler.dart 55:31        new TestCompiler
  package:flutter_tools/src/test/flutter_platform.dart 447:22    FlutterPlatform._startTest
  ===== asynchronous gap ===========================
  dart:async/zone.dart 1121:19                                   _CustomZone.registerUnaryCallback
  dart:async-patch/async_patch.dart 83:23                        _asyncThenWrapperHelper
  package:flutter_tools/src/test/flutter_platform.dart 350:36    FlutterPlatform.loadChannel
  package:flutter_tools/src/test/flutter_platform.dart 303:46    FlutterPlatform.load
  package:test_core/src/runner/loader.dart 224:38                Loader.loadFile.<fn>
  ===== asynchronous gap ===========================
  dart:async/zone.dart 1121:19                                   _CustomZone.registerUnaryCallback
  dart:async-patch/async_patch.dart 83:23                        _asyncThenWrapperHelper
  package:test_core/src/runner/loader.dart                       Loader.loadFile.<fn>
  package:test_core/src/runner/load_suite.dart 97:31             new LoadSuite.<fn>.<fn>
  package:test_core/src/runner/load_suite.dart 107:8             new LoadSuite.<fn>
  package:test_api/src/backend/invoker.dart 231:15               Invoker.waitForOutstandingCallbacks.<fn>
  dart:async/zone.dart 1190:13                                   _rootRun
  dart:async/zone.dart 1093:19                                   _CustomZone.run
  dart:async/zone.dart 1630:10                                   _runZoned
  dart:async/zone.dart 1550:10                                   runZoned
  package:test_api/src/backend/invoker.dart 228:5                Invoker.waitForOutstandingCallbacks
  package:test_api/src/backend/invoker.dart 383:17               Invoker._onRun.<fn>.<fn>.<fn>
  ===== asynchronous gap ===========================
  dart:async/zone.dart 1121:19                                   _CustomZone.registerUnaryCallback
  dart:async-patch/async_patch.dart 83:23                        _asyncThenWrapperHelper
  package:test_api/src/backend/invoker.dart                      Invoker._onRun.<fn>.<fn>.<fn>
  dart:async/zone.dart 1190:13                                   _rootRun
  dart:async/zone.dart 1093:19                                   _CustomZone.run
  dart:async/zone.dart 1630:10                                   _runZoned
  dart:async/zone.dart 1550:10                                   runZoned
  package:test_api/src/backend/invoker.dart 370:9                Invoker._onRun.<fn>.<fn>
  dart:async/zone.dart 1190:13                                   _rootRun
  dart:async/zone.dart 1093:19                                   _CustomZone.run
  dart:async/zone.dart 1630:10                                   _runZoned
  dart:async/zone.dart 1550:10                                   runZoned
  package:test_api/src/backend/invoker.dart 150:7                Invoker.guard
  package:test_api/src/backend/invoker.dart 413:15               Invoker._guardIfGuarded
  package:test_api/src/backend/invoker.dart 369:7                Invoker._onRun.<fn>
  package:stack_trace/src/chain.dart 104:24                      Chain.capture.<fn>
  dart:async/zone.dart 1190:13                                   _rootRun
  dart:async/zone.dart 1093:19                                   _CustomZone.run
  dart:async/zone.dart 1630:10                                   _runZoned
  dart:async/zone.dart 1550:10                                   runZoned
  package:stack_trace/src/chain.dart 102:12                      Chain.capture
  package:test_api/src/backend/invoker.dart 368:11               Invoker._onRun
  package:test_api/src/backend/live_test_controller.dart 153:11  LiveTestController.run
  dart:async/future.dart 201:37                                  new Future.microtask.<fn>
  dart:async/zone.dart 1182:47                                   _rootRun
  dart:async/zone.dart 1093:19                                   _CustomZone.run
  dart:async/zone.dart 997:7                                     _CustomZone.runGuarded
  dart:async/zone.dart 1037:23                                   _CustomZone.bindCallbackGuarded.<fn>
  dart:async/zone.dart 1190:13                                   _rootRun
  dart:async/zone.dart 1093:19                                   _CustomZone.run
  dart:async/zone.dart 997:7                                     _CustomZone.runGuarded
  dart:async/zone.dart 1037:23                                   _CustomZone.bindCallbackGuarded.<fn>
  dart:async/schedule_microtask.dart 41:21                       _microtaskLoop
  dart:async/schedule_microtask.dart 50:5                        _startMicrotaskLoop
  dart:isolate-patch/isolate_patch.dart 118:13                   _runPendingImmediateCallback
  dart:isolate-patch/isolate_patch.dart 169:5                    _RawReceivePortImpl._handleMessage

The main problem is caused by the time_machine package, I commented a temporary fix in the corresponding issue: Dana-Ferguson/time_machine#44.

However, even when overriding the meta package dependency, most of the tests still break, mainly because of the null-safety framework changes. I need to look into this more, for now we can just use Flutter 1.22.

Duplicate of website when changing relevance

Description
If one changes the relevance of a website (such as from Only Me to Anyone), the website will be duplicated.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Portal' tab
  2. Click on '๐Ÿ–' and edit a website
  3. Change the relevance and continue
  4. See error

Expected behavior
A single element for a website instead of two with different relevances.

Screenshots
Screenshot_20200926-134859.jpg

Smartphone

  • Samsung Galaxy S10
  • Android 10

Overlapped toasts when updating profile picture

Describe the bug
After picking a new profile picture, the "Profile picture updated successfully" and "Profile updated successfully" toasts overlap.

To Reproduce
Steps to reproduce the behavior:

  1. Click the edit button on the profile card
  2. Press the edit button on the profile picture
  3. Pick an image
  4. Notice the toasts

Expected behavior
Only the "Profile updated successfully" toast shows.

Screenshots

Smartphone (please complete the following information):

  • Device: Pixel 4
  • OS: Android 11
  • Version 1.2.4+7

Show minimum score needed to pass a class

In addition to assignments and associated point values, we should add a new column to the grading page to show the minimum for each assignment that the student needs to obtain in order to pass. Now, visualising this in the pie chart is rather complicated (I opened this issue in nice chart package to explore some options), but showing this information in a simple format should be easy to do and a good feature to have.

The way I see it, these would be the intermediary steps we can take with this feature:

  • v0: A simple freetext "Notes" field attached to grading in a class, where students can write details about how to pass. [good first issue]
  • v1: An additional column in the Grading page for a "min" value for each assignment.
  • v2: A way to visualise these values in the pie chart somehow (see issue linked above).

Filter row has options selected if it shows on top of another row

Describe the bug
In the filter, if a row shows up before a row that has an option selected, it will have that option selected as well.

Expected behavior
All the options in a newly appeared row should be deselected by default.

Screenshots

Additional context
If the page is opened again, the row shows correctly. The wrongfully selected option is not selected anymore and isn't taken into account when the filter is applied. This would mean that this is a UI-only bug.

Infer name from e-mail on sign up

The sign up page could infer (part of) the user's name from the e-mail, since the standard format is first_middle.last (and maybe some numbers at the end). This could make the sign up process even quicker.

Squash commits on master

Commits aren't squashed on a PR merge.
This makes the repo history hard to read: we're different devs of different skill levels. People that are just starting out usually commit a lot and people with a lot of experience tend to either commit less (when working on small stuff) or get even more tangled with commits than juniors :)
It's really easy to implement a squash policy:
https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/configuring-commit-squashing-for-pull-requests
Maybe we should also update the contributing guidelines.
I also wanted to add some extra info to the main .md file so maybe i could bundle that up in a documentation update.

Admin Panel

From Settings page, button visible only for Admins (permissionLevel>=4), takes you to AdminPage.

List with all Users that Requested something
--- all info from forms tab + name + group + email
--- can be filtered by Done (like in Portal)

Admin can approve request => permissionLevel = 3 && forms.done = true
Admins can decline requests => permissionLevel notChanged && forms.done = NULL

Firebase Rules shall be modified

Automatically detect system theme

The app's default theme is currently Dark, but it could be the system's theme instead (just like the system's language is detected on the Auto setting).

Week and Day widgets become identical sometimes

Description
If you try to add certain classes and then edit them, you might see that you can't edit the 'Week' category.

Instead, it appears identical to the 'Day' widget (you should be able to select 'Odd' / 'Even', instead you are shown the days of the week).

To Reproduce
Refer to the video.

  • Device: Samsung Galaxy S10
  • OS: Android 10
  • Via App
  • App version 1.1.4

Additional context

GIF-201013_182949

Opening filter from relevance picker doesn't set the correct default relevance

To Reproduce
Steps to reproduce the behavior:

  1. Go to Portal page
  2. Click on edit button
  3. Tap a website with a relevance different than "Anyone" (you may need to display all websites from the filter)
  4. Say the website relevance in the picker is BSc. Tap "Custom" and you'll notice that no nodes are selected in the opened filter page (BSc should be selected by default).

You can add duplicate subjects in the classes for the timetable

Describe the bug
There is a way via which a class can be added multiple times to the timetable.

To Reproduce
Steps to reproduce the behavior:

  1. Go to the timetables tab
  2. Add classes (the steps differ if you already have some or you don't, and don't matter as the bug manifests either way)
  3. Select a class to be added
  4. Collapse the category in which said class is in
  5. Expand category
  6. Reselect said class
  7. Repeat steps 4-6 several times
  8. Save the selection.

Expected behavior
Each selected class appears only once, and the checkmark doesn't disappear on collapse.

Actual behavior
Some classes will appear multiple times, based on how many times you have selected them during the steps 4-7 above.

Screenshots

See video: https://www.youtube.com/watch?v=Wyvjc2WSy9Q

Smartphone (please complete the following information):

  • Device: Samsung A71
  • OS: Android 10 (One UI 2.1)
  • Browser N/A
  • Version N/A (WebView version: 85.0.4183.127)

Additional context
This issue doesn't seem to affect the actual functionality of the filters.

FAQ questions stay expanded based on list index instead of ID

Describe the bug
If a question is expanded and the user switches between tags, the question with the same index in the new question list will be expanded.

To Reproduce
Steps to reproduce the behavior:

  1. Go to FAQ page
  2. Press on a question to expand it
  3. Select a tag

Expected behavior
Either all questions should [whatever the opposite of expand is] or the specific question that was expanded before should stay expanded, if it is present in the new list.

Screenshots
ezgif-6-d87ff09015de

Allow users to customize timetable time range

The default initialTimeRange for the timetable is 8am-8pm. We could add an option in settings which allows users to customise it the way they want.

And even better - we could have it adapt to the events displayed (Google Calendar does that).

Some cached account information isn't cleared on signout

If userA signs out and userB signs in on the same device (without resetting the app), userB will see the favourite websites, filter and classes options of userA instead of their own, because they're cached in-memory and not cleared on signout.

Settings (app theme, language) are also shared between accounts, we'll have to think whether we want to keep it that way or reset to defaults whenever a user signs out (which would mean that they have to change their settings every time if they selected non-defaults). Eventually, we could save settings in the cloud, associated with the user's account.

Progress:

  • Favourite websites (#89)
  • Filter (#97)
  • Classes
  • Settings

Don't show "Go to today" button in timetable when already showing current week

This button is confusing for users, because most of the time it will do nothing, since the timetable is already showing the current week:

Since it only makes sense when NOT on the current week, we should hide it/disable it when on the current week, or show a toast saying "You're already seeing the current week!".

The classes remains unselected edven the user forgot to save its removal

If a user wants to remove a class from his list of classes, but he forgot to save, the class remains in his list and the class appears unselected in the list.

Steps to reproduce the behavior:

  1. Go to classes
  2. Click on add classes (+)
  3. Unselect a class that you are subscribed
  4. Click on back
  5. Click on add classes
  6. Go to the classes that you have unsubcribed
  7. The class appears to be unsubscribed, but it appears in the object's list

Expected behavior
The class should appear selected if the user has the class in his list

Error Toast Message when creating an account successfully

Describe the bug
When creating an account it displays an error toast message even though the account was created successfully.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Sign Up'
  2. Complete all details
  3. Press on 'Sign Up' button
  4. See error

Expected behavior
It should display only the message that tells you that everything is good and the account was created successfully.

Visual Exemplification
https://user-images.githubusercontent.com/45268599/109211347-c783f800-77b6-11eb-86a9-7ef6c164aa5a.mp4

Smartphone:

  • Device: Huawei P20 Light
  • OS: Android 9

Scraper scalability, caching and improvements proposal

What's good about the scraper:
- It exists and it's written fine
- The idea is solid, having a news feed is fire
What's bad about the scraper:
- No vertical scalability -> One user makes one call on one update -> if we have 800 users refreshing at the same time, the upb webpage will reload 800 times
- No horizontal scalability -> what if we think of implementing 7 other scrapers? How do they fit in?
Proposal:
- Build a scalable, cacheable solution
Implementation details:
Vertical scalability:
- Build a 2 layer cache system for the newsfeed:
โ—‹ When a user refreshes their news feed, it first checks the local cache to see if a similar request has been made in the past k seconds. If yes -> cache hit, retrieve data from local, on device storage vault, load data. If not-> check level 2 cache. On L2 cache hit, retrieve data and write it in L1 cache with appropriate timestamp. On L2 cache miss, write data in L2, then L1, then show data
โ—‹ L1 can be implemented in a variety of ways, as a poc I suggest at least storing the json locally and replacing it each time with the newest data known.
โ—‹ L2 can be implemented either as cloud storage, table storage or database.
โ—‹ Checking L1 and L2 can be done via MD5 hash or a similar solution
Horizontal scalability:
- Implement a newsFeedProvider factory to spawn newsfeed providers
- Implement an observer that keeps track of asynchronous data gets and notifies them to either interrupt the process on hang or accept new data gets and pushes them onto a pipeline handler that delievers them to the ListView
Nice to have:
- 2nd scaraper to test concurrency issues (maybe similar news site or international students' news site? (i.e. the erasmus page?)
- Filtering on data sourcers
Different sorting features with a "recommended" options that uses some sort of basic ml/ai (maybe word bagging) to promote more relevant information first

Web version doesn't work with ad blocker

When trying to acces the app from a browser with an ad blocker, an empty screen is shown and the following error is in the console:
image

This behaviour was observed on Firefox with the uBlock Origin plugin installed.

@GeorgeMD can you please share your experience?

The image of the people is magnified on the web version

Describe the bug
When the user opens the info about a person on the People page using the web version, it can be observed that the Image magnified. Please notice that if the user uses the Mozila Firefox browser, it can be observed that the image is not round but it is egg-shaped and there is another round image that is not loaded.

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'People Page' on a web version
  2. Click on any people
  3. See error
    or:
  4. Go to 'People Page' using Mozila Firefox
  5. Click on any people
  6. See error

Expected behavior
The should be loaded the same image but a little bigger size.

Screenshots
If applicable, add screenshots to help explain your problem.
Bug_report_1
bug_report_2

Desktop (please complete the following information):

  • OS: Windows
  • Browser Chorme Edge Mozila Firefox
  • Version 86.0.4240.111
  • Browser Mozila Firefox
  • Version 82.0.2 (64-bit)

Some classes don't have "Even / Odd" option when re-editing them

Describe the bug
Some classes don't have "Even / Odd" option when re-editing them. I have no idea what type of event triggers this behaviour, so I hope some screenshots would help us. This seems to be an issue which is not consistent for bi-weekly classes (see screenshots).

To Reproduce
Steps to reproduce the behavior:

  1. Go to Timetable
  2. Click on events
  3. Click on an event and tap the 'Crayon' button
  4. You might see the error

Expected behavior
The Even / Odd option should appear for every editing of an event.

Screenshots
88384da6-3a34-4d42-830b-9ec2da7ce270

526cba0f-a963-4883-837e-c227e0ac73e2

The device info is, however, irrelevant since the issue seems to appear on the website of the app as well.
image

Smartphone (please complete the following information):

  • Device: [e.g. Samsung Galaxy S10]
  • OS: [e.g. Android 10]
  • In app
  • Version [e.g. 1.2.4]

PWA version sometimes cuts off strings

Describe the bug
This is very random, but sometimes some strings don't display completely on the PWA version.

To Reproduce
Steps to reproduce the behavior:

  1. Go to web version of app in Chrome on Android
  2. Open the menu and select "Add to homepage" to install the PWA
  3. Open installed PWA and (maybe) notice the odd strings

To test this in development, we need to build the web version and serve it over HTTP: https://stackoverflow.com/questions/62195515/access-flutter-localhost-from-real-mobile-browser

Screenshots
Web version:
image
PWA version:
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.