# GEMINI.md ## App: phone_login This document describes the "phone_login" Flutter application, its purpose, implementation details, and file layout. ## Purpose The "phone_login" app is a simple Flutter application that demonstrates a phone number-based authentication flow. It includes screens for entering a phone number, verifying an SMS code, and displaying different content based on the user's authentication status. The app also features a basic home screen and a profile screen. ## Implementation Details The application is built using the Flutter framework and follows a layered architecture to separate concerns. ### Key Components: * **Authentication:** The authentication flow is designed to be handled by Firebase Authentication, but it is currently mocked for demonstration purposes. The `AuthState` class manages the user's authentication state, now including `logout()` functionality and a more flexible `toggleLogin()` method. * **Navigation:** `go_router` is used for declarative routing and navigation. It includes a redirect mechanism to handle authentication-aware routes. * **State Management:** `provider` is used for state management, with `ChangeNotifierProvider` making the `AuthState` available throughout the app. * **UI:** The user interface is built with Flutter's Material Design widgets. The screens are designed to be simple and intuitive. The `HomeScreen` now dynamically renders a `_LoggedInView` or `_LoggedOutView` based on the user's authentication status. ### File Layout: ``` lib/ ├── main.dart # App entry point ├── app.dart # MaterialApp setup, theme, and routing ├── auth/ # Authentication-related screens and logic │ ├── auth_state.dart # Manages authentication state │ ├── phone_input_screen.dart │ └── sms_verification_screen.dart ├── home/ # Home screen │ └── home_screen.dart ├── profile/ # User profile screen │ └── profile_screen.dart ├── services/ # Backend services (e.g., Firebase) ├── shared/ # Common widgets, utilities, models │ ├── models/ │ └── widgets/ └── theme/ # Theming and styling ```