Term Project - Milestone 3

  1. Project Milestones
  2. Objectives
  3. Collaboration
  4. Due
  5. New instructions
    1. Instructions for Dr. Strayhorn-Carter’s Mindfulness Project
    2. Instructions for Custom Projects
  6. Other General Requirements
  7. Submission
  8. Repeat of General Instructions from Milestone 2

Project Milestones

Due Title
  Term Project Description
March 16 Milestone 1: Prototypes, User Flow Diagram, and Starter Code
March 23 Milestone 2: Primary and Secondary Display
April 6 Milestone 3: Authentication and Cloud Data (this page)
April 27 Milestone 4: Minimum Viable Product
May 7 Final deliverables

Objectives

Collaboration

Work with your project partner(s), if any, on this assignment. The GitHub history must show approximately equal amounts of code contribution from both partners.

Due

Sunday, April 6 @ 11:59pm via GitHub.

New instructions

  1. Complete unfinished functionality from Milestone 2
  2. You will be implementing Firebase auth and database functionality. Put a file in the root of your project named TESTER.txt and inside it put the login and password for an account that will work with your app.
  3. Read through the instructions below. If you are working on a custom project or on a team, respond to the Milestone 3 Responsibility Survey on Canvas.
  4. The General Instructions from Milestone 2 still apply. Review them at the bottom of this page.

Instructions for Dr. Strayhorn-Carter’s Mindfulness Project

  1. You must have a Log in or screen that accepts email and password authentication using Firebase Authentication.
    • Manually create users to authenticate in the Firebase Authentication screen in the Firebase Console. Do not create a Sign Up screen in your app.
    • The Login screen must present error messages and success messages to the user.
    • The Login screen must not be accessible when the user is logged in.
    • Successfully logging in must take the user to the Splash Screen.
  2. You must implement Logout functionality. This can be a button on the Progress Screen, a button in the app bar, or in a Nav Drawer. The Logout functionality must only work if the user is logged in.
  3. Create one or more Collections in the Firestore that capture the weeks of the program and their contents. I suggest the following:
    • You have a collection of Weeks. Each Week contains a unique label, an order, and a status indicator (see the different status indicates in Milestone 2).
    • Each week also has a list of Weekly Content. We don’t quite know what data this will entail yet. However, you will need for each Weekly Content a) a unique identifier, b) the order is will be displayed in the week, c) a status indicator (complete or incomplete), and d) some sort of content.
    • For now, you need only support two types of content: a text instruction for meditating, and a question that the user must submit a response to.
    • Bear in mind that there will be more than one Weekly Content for each week.
    • You only need to create two sample Weeks for this Milestone.
  4. Your Progress Screen must display data from the Cloud Firestore, including at a minimum the week’s name and status indicator, as in Milestone 2, but this time using Cloud Data.
  5. Tapping on a week in the Progress Screen takes you to the Week Screen. This screen must also display data from the Cloud Firestore.
    • Display the Weekly Content for the Week in order.
    • Display the content and the status for the content.
    • When the content is a question:
      1. provide a Form with multiline TextField for the user to type the answer and a Submit button.
      2. Clicking the submit button saves the answer to the Firestore along with a timestamp of when the answer was recorded.
      3. If the user has already answered the question, pre-populate the TextField with their old answer from the Firestore.
      4. Mark the status for the question as completed when the user submits a response.
    • When the content is a meditation prompt, simply display it nicely in Text. Mark the status for the prompt to be complete when the user clicks a “Done” button (or something similar).
    • Ensure the status indicator for each content updates appropriately in the UI.
    • You only need to create two sample Weekly Contents for each week for this Milestone.

Instructions for Custom Projects

  1. You must have a Sign Up or Registration screen that, at a minimum, allows the user to enter an email, a password, and a password confirmation.
    • The Sign Up screen must create a user using Firebase Authentication.
    • The Sign Up screen must validate that email is in a valid format and that the passwords match.
    • The Sign Up screen must present error messages and success messages to the user.
    • The Sign Up screen must not be accessible when the user is logged in.
    • Successfully signing up must take the user to the Primary Display.
  2. You must have a Log in or Registration screen that accepts email and password authentication using Firebase Authentication.
    • The Login screen must present error messages and success messages to the user.
    • The Login screen must not be accessible when the user is logged in.
    • Successfully logging in must take the user to the Primary Display.
  3. You must implement Logout functionality. This can be a button on the Primary Display, a button in the app bar, or in a Nav Drawer. The Logout functionality must only work if the user is logged in.
  4. Custom projects must have their data in the Cloud Firestore. Data can be entered manually through the Firebase console.
  5. Custom projects previously displayed data in their app using hard-coded class objects. Now, your Primary and Secondary displays must read this data from the Firestore.
  6. Your app must write some data to the Cloud Firestore. This written data must be read and displayed in some part of your app.

Other General Requirements

Submission

Commit and push your project to GitHub.

Repeat of General Instructions from Milestone 2

  1. Updated your README.md file to include a statement of “This app was developed primarily for … “ either Android or iOS so I know what to test on. I will evaluate your app based on whether you primarily use Android or iPhone.
    • An Android “Medium Phone” emulated device. This device’s dimensions (1080x2400) is close to that of the loaned Moto G*Power phones (1080x2300).
    • An “iPhone 16” simulator.
  2. Use relative positioning and the axis alignment attributes of Columns, Rows, and Stacks to greatest extend possible to create a “responsive” look and feel across phone sizes.
  3. Do not use large values for SizedBoxes or the margin or padding attributes of widgets to achieve alignments. Use them to create small spaces. Ask me if you’d like feedback on the best way to position something.
  4. Your app must have an App Bar unless otherwise approved by me:
    • Each Screen must have an appropriate title.
    • The App Bar must have backward navigation.
  5. The project must be free of warnings and errors. These are reported in the “Problems” tab. You may not ignore warnings without instructor permission.
  6. Your app must not have runtime errors, including crashes and RenderFlex overflow errors.
  7. Code must be formatted according to Dart conventions. VS Code’s formatting tool will do this for you.
  8. For those working in pairs: the GitHub history must show approximately equal amounts of code contribution from both partners.