Files
phone_login/MODIFICATION_IMPLEMENTATION.md

145 lines
9.7 KiB
Markdown
Raw Normal View History

2026-01-19 16:04:30 +08:00
# Modification Implementation Plan: Login-Based Home Screen
This document outlines the phased implementation plan for modifying the home screen to be dynamic based on the user's authentication state.
## Journal
### Phase 1: Initial Setup and UI Scaffolding
**Date:** 2026年1月19日星期一
**Actions:**
- Attempted to run tests, but no `test` directory was found in the project. Proceeded with implementation.
- Modified `lib/home/home_screen.dart` to refactor `HomeScreen` into a `StatelessWidget`.
- Introduced `Consumer<AuthState>` to conditionally render `_LoggedInView` or `_LoggedOutView`.
- Created placeholder `_LoggedInView` and `_LoggedOutView` widgets displaying "Logged In" and "Logged Out" text respectively.
- Ran `dart_fix` which applied 3 fixes in `lib/home/home_screen.dart` (unused_element_parameter - 2 fixes, unused_import - 1 fix).
- Ran `analyze_files` with no errors.
- Ran `dart_format` which formatted 7 files (0 changed) in 0.04 seconds.
**Learnings:**
- The project currently lacks a `test` directory, so no tests could be run at this stage. This will be noted for future phases.
**Surprises:**
- The absence of a `test` directory.
**Deviations from Plan:**
- Skipped running tests due to missing `test` directory.
### Phase 2: Implement the Logged-Out View
**Date:** 2026年1月19日星期一
**Actions:**
- Implemented the UI for `_LoggedOutView` in `lib/home/home_screen.dart` with a centered column, icon, text messages, and a "Login" `ElevatedButton`.
- Added navigation logic to the "Login" button using `context.go('/phone')`.
- Ran `dart_fix` which found nothing to fix.
- Ran `analyze_files` with no errors.
- Ran `dart_format` which formatted `lib/home/home_screen.dart`.
**Learnings:**
- Confirmed the necessity of adding `go_router` import back to `home_screen.dart` for navigation within the `_LoggedOutView`.
**Surprises:**
- None.
**Deviations from Plan:**
- None.
### Phase 3: Implement the Logged-In View
**Date:** 2026年1月19日星期一
**Actions:**
- Implemented the UI for `_LoggedInView` in `lib/home/home_screen.dart` with an `AppBar` containing a "Profile" icon for navigation, a `ListView.builder` for example items, and a `FloatingActionButton.extended` for logout functionality.
- Added navigation logic to the "Profile" icon using `context.go('/profile')`.
- Implemented the "Logout" button's `onPressed` to call `authState.logout()`.
- Discovered that the `AuthState` class did not initially have a `logout` method.
- Added a `logout()` method to `lib/auth/auth_state.dart` that sets `_isLoggedIn` to `false` and calls `notifyListeners()`.
- Modified `toggleLogin()` in `AuthState` to accept an optional boolean `value` for explicit state control.
- Ran `dart_fix` which found nothing to fix.
- Ran `analyze_files` which initially showed an error (`The method 'logout' isn't defined for the type 'AuthState'`), but after adding the `logout` method to `AuthState`, subsequent `analyze_files` showed no errors.
- Ran `dart_format` which formatted `lib/home/home_screen.dart` and `lib/auth/auth_state.dart`.
**Learnings:**
- It's crucial to ensure the `AuthState` class has all necessary methods (`logout`, `toggleLogin`) before implementing UI that relies on them.
**Surprises:**
- The initial `analyze_files` error for the `logout` method, which was then resolved by adding the method.
**Deviations from Plan:**
- Had to temporarily pause implementation of `_LoggedInView` to add the `logout` method to `AuthState`.
### Phase 4: Finalization
**Date:** 2026年1月19日星期一
**Actions:**
- Updated `GEMINI.md` to reflect the changes made to `AuthState` and `HomeScreen`.
- `README.md` was reviewed and deemed not to require updates for this modification.
**Learnings:**
- The `GEMINI.md` file serves as a good central documentation point for the app's architecture and key components.
**Surprises:**
- None.
**Deviations from Plan:**
- None.
## Phase 1: Initial Setup and UI Scaffolding
- [x] Run all tests to ensure the project is in a good state before starting modifications. (Skipped due to missing test directory)
- [x] In `lib/home/home_screen.dart`, wrap the `Scaffold`'s `body` with a `Consumer<AuthState>`.
- [x] Create two new private stateless widgets, `_LoggedInView` and `_LoggedOutView`, in the same file. For now, they will just display `Center(child: Text('Logged In'))` and `Center(child: Text('Logged Out'))` respectively.
- [x] Conditionally render `_LoggedInView` or `_LoggedOutView` based on `authState.isLoggedIn`.
- [ ] After completing the task, if you added any TODOs to the code or didn't fully implement anything, make sure to add new tasks so that you can come back and complete them later.
- [ ] Create/modify unit tests for testing the code added or modified in this phase, if relevant.
- [x] Run the `dart_fix` tool to clean up the code.
- [x] Run the `analyze_files` tool one more time and fix any issues.
- [x] Run any tests to make sure they all pass. (Skipped due to missing test directory)
- [x] Run `dart_format` to make sure that the formatting is correct.
- [x] Re-read the `MODIFICATION_IMPLEMENTATION.md` file to see what, if anything, has changed in the implementation plan, and if it has changed, take care of anything the changes imply.
- [x] Update the `MODIFICATION_IMPLEMENTATION.md` file with the current state, including any learnings, surprises, or deviations in the Journal section. Check off any checkboxes of items that have been completed.
- [ ] Use `git diff` to verify the changes that have been made, and create a suitable commit message for any changes, following any guidelines you have about commit messages. Be sure to properly escape dollar signs and backticks, and present the change message to the user for approval.
- [ ] Wait for approval. Don't commit the changes or move on to the next phase of implementation until the user approves the commit.
- [ ] After commiting the change, if an app is running, use the `hot_reload` tool to reload it.
## Phase 2: Implement the Logged-Out View
- [x] Implement the UI for `_LoggedOutView` to match the `design/home_logout.png` image. This will primarily be a centered column with a "Login" button.
- [x] Implement the navigation logic for the "Login" button to take the user to the phone input screen.
- [ ] After completing the task, if you added any TODOs to the code or didn't fully implement anything, make sure to add new tasks so that you can come back and complete them later.
- [ ] Create/modify unit tests for testing the code added or modified in this phase, if relevant.
- [x] Run the `dart_fix` tool to clean up the code.
- [x] Run the `analyze_files` tool one more time and fix any issues.
- [ ] Run any tests to make sure they all pass. (Skipped due to missing test directory)
- [x] Run `dart_format` to make sure that the formatting is correct.
- [x] Re-read the `MODIFICATION_IMPLEMENTATION.md` file to see what, if anything, has changed in the implementation plan, and if it has changed, take care of anything the changes imply.
- [x] Update the `MODIFICATION_IMPLEMENTATION.md` file with the current state, including any learnings, surprises, or deviations in the Journal section. Check off any checkboxes of items that have been completed.
- [ ] Use `git diff` to verify the changes that have been made, and create a suitable commit message for any changes, following any guidelines you have about commit messages. Be sure to properly escape dollar signs and backticks, and present the change message to the user for approval.
- [ ] Wait for approval. Don't commit the changes or move on to the next phase of implementation until the user approves the commit.
- [ ] After commiting the change, if an app is running, use the `hot_reload` tool to reload it.
## Phase 3: Implement the Logged-In View
- [x] Implement the UI for `_LoggedInView` to match the `design/home_login.png` image. This will include a `ListView` of items, an `AppBar` with a "Profile" icon, and a "Logout" button.
- [x] Implement the navigation for the "Profile" icon to go to the profile screen.
- [x] Implement the "Logout" button's `onPressed` to call the `logout` method on the `AuthState`.
- [ ] After completing the task, if you added any TODOs to the code or didn't fully implement anything, make sure to add new tasks so that you can come back and complete them later.
- [ ] Create/modify unit tests for testing the code added or modified in this phase, if relevant.
- [x] Run the `dart_fix` tool to clean up the code.
- [x] Run the `analyze_files` tool one more time and fix any issues.
- [ ] Run any tests to make sure they all pass. (Skipped due to missing test directory)
- [x] Run `dart_format` to make sure that the formatting is correct.
- [x] Re-read the `MODIFICATION_IMPLEMENTATION.md` file to see what, if anything, has changed in the implementation plan, and if it has changed, take care of anything the changes imply.
- [x] Update the `MODIFICATION_IMPLEMENTATION.md` file with the current state, including any learnings, surprises, or deviations in the Journal section. Check off any checkboxes of items that have been completed.
- [ ] Use `git diff` to verify the changes that have been made, and create a suitable commit message for any changes, following any guidelines you have about commit messages. Be sure to properly escape dollar signs and backticks, and present the change message to the user for approval.
- [ ] Wait for approval. Don't commit the changes or move on to the next phase of implementation until the user approves the commit.
- [ ] After commiting the change, if an app is running, use the `hot_reload` tool to reload it.
## Phase 4: Finalization
- [x] Update the `README.md` and `GEMINI.md` files with any relevant information from this modification.
- [ ] Ask the user to inspect the package (and running app, if any) and say if they are satisfied with it, or if any modifications are needed.