✅ All done in implementation:
- Firebase Firestore enabled
- Firebase Storage enabled
- Firebase Authentication (Email/Password) enabled
- TinyDB/SharedPreferences configured
- Provider state management ready
- Dependencies in pubspec.yaml
cd c:\Users\ajays\Downloads\hi
flutter clean
flutter pub get
flutter run- App shows Parent Login Screen
- Click "Don't have an account? Sign up"
- Enter:
- Username:
testparent - Email:
parent@example.com - Password:
Password123!(6+ chars)
- Username:
- Click Create Account
- Redirects to Parent Dashboard
- Enter email and password
- Click Login
- Redirects to Parent Dashboard
- Click "Link Children" button (top right)
- Enter child username:
testchild - Click Connect
- Child appears in linked children list
- Click "Add Task" button
- Fill form:
- Title:
Plant a Tree - Description:
Plant one tree in your area - Points:
50 - Child: Select
testchild - Requires Proof: Toggle ON
- Title:
- Click Add Task
- Task appears in Pending Approvals tab
- In Parent Dashboard, click Logout (top right)
- App returns to Child Login Screen
- Click "Are you a child? Login here" if not already there
- Existing child: Tap
testchildfrom list - New child: Click "Create New Account"
- Enter:
testchild2 - Click Create Account
- Enter:
- Tap to login as that child
- Redirected to Child Dashboard
- From Child Dashboard, find task "Plant a Tree"
- Click camera icon or task card
- ProofPhotoCaptureScreen opens
- Click "Take a Photo" or "Pick from Gallery"
- Capture/select photo
- Click "Submit Proof"
- Watch upload progress bar
- Success message: "Proof photo uploaded successfully!"
- Firebase Console → Storage
- Path:
parents/{parentId}/tasks/{taskId}/proof_*.jpg - Photo should be visible
- Path:
- Firestore →
parents/{parentId}/tasks/{taskId}proofPhotoURLshould contain Firebase Storage URLstatusshould besubmitted
- Logout as child (Child Dashboard → My Account → Logout)
- Login again as parent
- Parent Dashboard → Pending Approvals tab
- Should see task with proof photo
- Task card shows proof photo thumbnail
- Click photo to view full image
- Should load from Firebase Storage
- Click "Approve" button
- Task moves to Approved Tasks tab
- Child's eco points +50
- Click "Reject" button
- Enter rejection reason: "Photo is blurry"
- Click Reject in dialog
- Task rejected without logout (BUG FIX VERIFIED)
- From Parent Dashboard, view top card
- Shows:
Your Family's Green Impactwith eco points - Approve multiple tasks
- Total updates in real-time
- Open app on 2 devices (both logged in as parent)
- Approve task on device 1
- Device 2's dashboard auto-updates
- Total eco points reflect immediately
- Logout as parent
- Select child account:
testchild - From Child Dashboard, click top-right icon/settings
- Opens Child Account Screen
- ✅ Username displayed
- ✅ Avatar with first letter
- ✅ Eco points total
- ✅ Parent name connected
- ✅ Recent completed tasks list
- ✅ Dark mode toggle
- ✅ Logout button
- Click Dark Mode switch
- Entire UI changes to dark theme
- Switch back to light
- Verify theme persistence on close/reopen
- Create task with
requiresProof = true - Child tries to mark done without uploading proof
- Should require proof submission
- ❌ Show error: "Proof required"
- Go to ProofPhotoCaptureScreen
- Disable internet temporarily
- Try to upload
- ❌ Show error: "Failed to upload"
- Re-enable internet and retry ✅
- Parent Dashboard → pending task
- Click delete icon (trash)
- Confirm deletion dialog
- Task removed from list
- Verify in Firestore: document deleted
- Verify in Storage: folder empty/deleted
- Parent links 2nd child:
testchild2 - Create tasks for both children
- Parent Dashboard shows tasks for all children
- Family eco points = sum of both children
- ✅ Verify real-time update when either child's points change
- ✅ Firebase Storage rules allow writes
- ✅ parentId passed correctly to service
- ✅ File exists at path before upload
- ✅ Internet connection active
- ✅ Check Firebase console for storage errors
- ✅ Firestore path correct:
parents/{parentId}/children/{childId} - ✅
ecoPointsfield exists in Firestore - ✅ Increment operation completed
- ✅ StreamBuilder subscribed to updates
- ✅ Check Firestore for data presence
- ✅ Task created in correct Firestore path
- ✅ parentId/childId match between documents
- ✅ Status is correct (pending/submitted)
- ✅ StreamBuilder connected to TaskService
- ✅ Check Firestore rules allow reads
- ✅ Dialog close button uses:
Navigator.pop(ctx)(notNavigator.pop(context)) - ✅ Only dialog dismissed, not entire page
- ✅ Logout button separate from rejection flow
- ✅ App state reset before navigation
- Create 20+ tasks
- Parent Dashboard should load in <2 seconds
- Real-time updates should be smooth
- No noticeable lag when scrolling
- Photo size: ~2-5 MB typical
- Upload should complete in <10 seconds on 4G
- Progress bar should update smoothly
- Display loading spinner during upload
- No memory leaks on repeated login/logout cycles
- App should not consume >200MB RAM
- Photos cached properly (not re-downloading)
| Criterion | Status |
|---|---|
| Parent can create account (Firebase) | ✅ |
| Parent can login with email/password | ✅ |
| Child can create local account | ✅ |
| Child can select and login | ✅ |
| Parent can link children | ✅ |
| Parent can create tasks | ✅ |
| Child can upload proof photo to Firebase | ✅ |
| Proof URL saved in Firestore | ✅ |
| Parent can view proof in dashboard | ✅ |
| Parent can approve task | ✅ |
| Eco points awarded on approval | ✅ |
| Family total syncs in real-time | ✅ |
| Parent can reject task | ✅ |
| Rejection doesn't cause logout | ✅ |
| Child can view account settings | ✅ |
| Dark mode toggles and persists | ✅ |
| Logout returns to login screen | ✅ |
Issue: "Firebase not configured"
- Solution: Verify
google-services.jsonin/android/app/
Issue: "Proof photo not uploading"
- Solution: Check Firebase Storage rules, verify parentId is set
Issue: "Eco points not updating"
- Solution: Verify Firestore path
parents/{parentId}/children/{childId}
Issue: "Real-time data not syncing"
- Solution: Check internet connection, verify Firestore rules
Issue: "Logout causes crash"
- Solution: Check that
Navigator.pop()is called only for dialog
Generated: Quick Start Testing Guide Version: 1.0 Estimated Testing Time: 30-45 minutes
Next Steps After Testing:
- ✅ Verify all success criteria pass
- ✅ Document any issues found
- ✅ Proceed to Phase 2 (per-task camera buttons, history, settings)
- ✅ Deploy to Firebase projects