Giter Site home page Giter Site logo

quickcheck's Introduction


QuickCheck is a cross-platform application for teachers that assists in rapid formative assessment so they can focus more on teaching and less on organization.

This application relies on the QuickCheck Backend for data synchronization.

To Build

With Dart, Flutter, and Android Studio set up, run flutter pub get in the project directory, followed by flutter build web (or any other distribution platform).

To Demo

Try it at QuickCheck Web.

quickcheck's People

Contributors

tonydoesathing avatar macobri avatar ethanlebowitz avatar

Watchers

James Cloos avatar  avatar

quickcheck's Issues

Make StudentAssessmentTable widget

  • Takes in a list of Students and a List of Assessments
  • Outputs table where student names are on the y axis and the assessments are on the x axis
  • Display on HomePage with statically-defined lists (pre-generated)

Make AddStudentPage more user-friendly

  • clicking Save yields error popup if textfield empty
  • clicking Cancel prompts user if textfield not empty, asking if user wants to discard. If yes, continues, if no, closes prompt
  • clicking "back" in the appbar does same thing as cancel^^^

Implement AddGroup page

Button on HomePage that links to AddGroup page and takes in an optional onSave(Group) callback and a list of students
Should have a TextField for name, a list of students with checkboxes next to their names (these are the students that will be added to the group), a save button at the bottom and a cancel button next to that.
Pressing the save button calls the onSave callback with the newly created group; can't save if the group doesn't have a name (pops up with an error just like the AddStudent page). Cancel takes the user back to the previous page (pops up with a confirmation dialog like the AddStudent page though if there have been changes). <-- same thing with the back button

onSave should add the group to the GroupRepository

HomePage with buttons

  • set up Main to create an app with the HomePage widget as the home
  • give HomePage a Scaffold with an AppBar and FAB for "AddAssessment"
  • add button in the top for "Add Student"

AssessmentRepository abstract class

  • need AssessmentRepository class and Assessment data model
  • get assessments Stream, getAssessments, getAssessment(id), addAssessment(Map<Student, int>)

Login page

Should have text input for username, password input for password, and text input for server address

Make HomePageBloc

Make HomePageBloc > Bloc, HomePageEvent > Equatable, HomePageState > Equatable.
Bloc takes in a StudentRepository and an AssessmentRepository in its constructor, and initialize it with the LoadingStudentTable state.
Events:

  • LoadStudentTableEvent
    States:
  • LoadingStudentTable (displays nothing)
  • DisplayStudentTable (displays table of students and their assessments)

on LoadStudentTableEvent, follow this pattern:
on<DisplayReminders>( (event, emit) async { emit(HomeLoaded(event.reminders, event.selected)); await emit.forEach(_reminderRepository.reminders, onData: (List<Reminder> data) { return HomeLoaded(data, event.selected); }); }, transformer: restartable(), );
Emit DisplayStudentTable then listen for stream changes; the restartable transformer allows only one of these listens to be active at a time, so we can process other events as well.

AddClassPage

On the view classes page, there should be a button in the top right to add a new class
The add class page is just a copy of the add student page; there's a textinput box for the name and save and cancel button, etc.
On add, it adds the class to the repository

AddStudentPage

  • Clicking on the button in HomePage navigates you to the AddStudentPage
  • It's a StatefulWidget with a TextController and takes in an optional callback onSave(Student student)
  • Made up of a Scaffold with an AppBar, a text box in the body, and a footer action bar with a Save button and a Cancel button
  • clicking Save button calls onSave with new student that has name equal to textbox value
  • clicking cancel goes back to previous page

Implement GroupAssessmentTable

Like StudentAssessmentTable, GroupAssessmentTable makes a table out of a list of groups
Replace table on homepage with this

Create class

On load, if there's no class, prompt to create a class
Create class page:

  • basically copy of create student page (just a textbox for the name)
    Adds to the Class Repository

Hook up HomePageBloc

In main(), initialize a StudentRepository and an AssessmentRepository (using the in-memory versions), and pass them into App via constructor. Then, use MultiRepositoryProvider in App to provide the repositories to the context.

Override App's dispose function to dispose of the repositories.

Using BlocProvider, create new HomePageBloc for HomePage (using context.read() to give it the required repositories), then make use of a BlocProvider to provide the bloc.
When LoadingStudentTable, display nothing in the body.
When DisplayStudentTable, display the StudentAssessmentTable widget.

Update the onSave callback for AddStudent to add the Student to the StudentRepository

Make Student copyable

  • add copyWith({args})->Student function to Student to make it easily copyable
  • make id nullable

Make AddAssessmentPage

  • Clicking on the AddAssessment FAB on the HomePage navigates you to the AddAssessmentPage
  • It's a StatefulWidget with a TextController, optional function callback(Assessment assessment), and a Map<Student, int> of the scores (initialized with all the students, and -1 for each score)
  • Made up of a Scaffold with an AppBar, a text box for the name, a bottom footer with a Save and Cancel button, and a scollable list of AssessmentWidgets
    • StatelessWidget
    • Takes in optional callback(Student student, int score) and a Student
    • Displays student name on the left and potential scores on the right; the score icons are at 50% opacity if score doesn't match up with associated icon (4 for best, 3 for good, 2 for okay, 1 for needs help, 0 for N/A)
    • On tap of an icon, calls callback with the student and and the new score
  • On tap of AssessmentWidget score icon, update the map of the associated student and rerender
  • clicking Save button calls onSave with new Assessment that has name equal to textbox value and scores Map equal to a copy of the page's Map
  • clicking cancel goes back to previous page

Edit Group

Expand AddGroupPage to take in an optional group and populate the fields with it

ViewClassesPage

Should display a list of class names with icons showing that they're clickable
When you click on a class, it takes you to the class page (previously homepage) for that class

Edit Student

Expand AddStudentPage to optionally take in a student; if it does, it populates fields with student's info

Auth repository

Make auth repo

  • has URL, token
  • has getters for these variables

Make networked auth repo

Make networked repos take in an authrepo
Update networked repos to have token in header
Update networked repos urls to be making requests to appropriate endpoints

ClassRepository and Data Structure

Simple abstract class repository; getClass(int id), getClasses(), addClass(Class class)
A class consists of an id, a name, a list of students, a list of groups, and a list of assessments
Refactor Student, Group, and Assessment to have a classroom id variable
Refactor the student, group, and assessment repositories to take a class id object for getAll requests

ViewClassPage

Essentially a copy of the HomePage, except it takes an id of a class and loads a class from the repository.
Create a new bloc for it.
Have the bloc pull a class from the repository.
Have Add...Event to add things to their respective repository in the bloc; display an error state on error; update the state

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.