Repository: parres-hq/whitenoise_flutter
Pull request #8: Restructure auth flow to match global architecture
Author: login: untreu2
Created: 2025-05-19T06:10:40Z | Merged: 2025-05-19T06:30:16Z



<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Refactor**
  - Renamed all authentication flow screen classes from "Page" to "Screen" for consistency.
  - Updated navigation and imports to reflect new class names.
  - Replaced all hardcoded color values with centralized theme colors for a unified appearance across screens.
  - Improved button styling to use theme-based overlay colors.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->


Diff:
diff --git a/lib/main.dart b/lib/main.dart
index 64244d9c..48734fe8 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
-import 'package:whitenoise/ui/auth_flow/welcome_page.dart';
+import 'package:whitenoise/ui/auth_flow/welcome_screen.dart';
 import 'package:whitenoise/src/rust/frb_generated.dart';
 
 Future<void> main() async {
@@ -31,7 +31,7 @@ class MyApp extends StatelessWidget {
           title: 'White Noise',
           theme: ThemeData.light(),
           debugShowCheckedModeBanner: false,
-          home: const WelcomePage(),
+          home: const WelcomeScreen(),
         );
       },
     );
diff --git a/lib/ui/auth_flow/create_profile_page.dart b/lib/ui/auth_flow/create_profile_screen.dart
similarity index 80%
rename from lib/ui/auth_flow/create_profile_page.dart
rename to lib/ui/auth_flow/create_profile_screen.dart
index 09848d24..bc4dfb9a 100644
--- a/lib/ui/auth_flow/create_profile_page.dart
+++ b/lib/ui/auth_flow/create_profile_screen.dart
@@ -1,14 +1,15 @@
 import 'package:flutter/material.dart';
-import 'package:whitenoise/ui/auth_flow/key_created_page.dart';
+import 'package:whitenoise/ui/core/themes/colors.dart';
+import 'package:whitenoise/ui/auth_flow/key_created_screen.dart';
 
-class CreateProfilePage extends StatefulWidget {
-  const CreateProfilePage({super.key});
+class CreateProfileScreen extends StatefulWidget {
+  const CreateProfileScreen({super.key});
 
   @override
-  State<CreateProfilePage> createState() => _CreateProfilePageState();
+  State<CreateProfileScreen> createState() => _CreateProfileScreenState();
 }
 
-class _CreateProfilePageState extends State<CreateProfilePage> {
+class _CreateProfileScreenState extends State<CreateProfileScreen> {
   final TextEditingController _usernameController = TextEditingController();
   final TextEditingController _bioController = TextEditingController();
 
@@ -17,14 +18,14 @@ class _CreateProfilePageState extends State<CreateProfilePage> {
     _bioController.text.trim();
     Navigator.push(
       context,
-      MaterialPageRoute(builder: (_) => const KeyCreatedPage()),
+      MaterialPageRoute(builder: (_) => const KeyCreatedScreen()),
     );
   }
 
   @override
   Widget build(BuildContext context) {
     return Scaffold(
-      backgroundColor: Colors.white,
+      backgroundColor: AppColors.white,
       resizeToAvoidBottomInset: true,
       body: SafeArea(
         child: SingleChildScrollView(
@@ -39,7 +40,7 @@ class _CreateProfilePageState extends State<CreateProfilePage> {
                 ),
               ),
               const SizedBox(height: 32),
-              const CircleAvatar(backgroundColor: Colors.black, radius: 40),
+              const CircleAvatar(backgroundColor: AppColors.black, radius: 40),
               const SizedBox(height: 12),
               const Text(
                 'Upload photo',
@@ -59,7 +60,7 @@ class _CreateProfilePageState extends State<CreateProfilePage> {
                 decoration: InputDecoration(
                   hintText: 'Enter name...',
                   filled: true,
-                  fillColor: const Color(0xFFF2F2F2),
+                  fillColor: AppColors.grey1,
                   border: OutlineInputBorder(
                     borderRadius: BorderRadius.circular(8),
                     borderSide: BorderSide.none,
@@ -82,14 +83,13 @@ class _CreateProfilePageState extends State<CreateProfilePage> {
                 decoration: InputDecoration(
                   hintText: 'A quick note about you...',
                   filled: true,
-                  fillColor: const Color(0xFFF2F2F2),
+                  fillColor: AppColors.grey1,
                   border: OutlineInputBorder(
                     borderRadius: BorderRadius.circular(8),
                     borderSide: BorderSide.none,
                   ),
                 ),
               ),
-
               const SizedBox(height: 32),
             ],
           ),
@@ -97,12 +97,12 @@ class _CreateProfilePageState extends State<CreateProfilePage> {
       ),
       bottomNavigationBar: Container(
         height: 96,
-        color: Colors.black,
+        color: AppColors.black,
         padding: const EdgeInsets.only(top: 20),
         child: TextButton(
           style: ButtonStyle(
             splashFactory: NoSplash.splashFactory,
-            overlayColor: WidgetStateProperty.all(Colors.transparent),
+            overlayColor: WidgetStateProperty.all(AppColors.transparent),
             padding: WidgetStateProperty.all(EdgeInsets.zero),
           ),
           onPressed: _onContinuePressed,
@@ -110,7 +110,7 @@ class _CreateProfilePageState extends State<CreateProfilePage> {
             alignment: Alignment.topCenter,
             child: Text(
               'Continue',
-              style: TextStyle(fontSize: 18, color: Colors.white),
+              style: TextStyle(fontSize: 18, color: AppColors.white),
             ),
           ),
         ),
diff --git a/lib/ui/auth_flow/info_page.dart b/lib/ui/auth_flow/info_screen.dart
similarity index 82%
rename from lib/ui/auth_flow/info_page.dart
rename to lib/ui/auth_flow/info_screen.dart
index 22ca20b9..d5c46b6f 100644
--- a/lib/ui/auth_flow/info_page.dart
+++ b/lib/ui/auth_flow/info_screen.dart
@@ -1,13 +1,14 @@
 import 'package:flutter/material.dart';
-import 'package:whitenoise/ui/auth_flow/create_profile_page.dart';
+import 'package:whitenoise/ui/auth_flow/create_profile_screen.dart';
+import 'package:whitenoise/ui/core/themes/colors.dart';
 
-class InfoPage extends StatelessWidget {
-  const InfoPage({super.key});
+class InfoScreen extends StatelessWidget {
+  const InfoScreen({super.key});
 
   void _onContinuePressed(BuildContext context) {
     Navigator.push(
       context,
-      MaterialPageRoute(builder: (_) => const CreateProfilePage()),
+      MaterialPageRoute(builder: (_) => const CreateProfileScreen()),
     );
   }
 
@@ -19,7 +20,7 @@ class InfoPage extends StatelessWidget {
         children: [
           const Padding(
             padding: EdgeInsets.only(top: 4),
-            child: CircleAvatar(backgroundColor: Colors.black, radius: 12),
+            child: CircleAvatar(backgroundColor: AppColors.black, radius: 12),
           ),
           const SizedBox(width: 16),
           Expanded(
@@ -36,7 +37,7 @@ class InfoPage extends StatelessWidget {
                 const SizedBox(height: 4),
                 Text(
                   subtitle,
-                  style: const TextStyle(fontSize: 15, color: Colors.grey),
+                  style: TextStyle(fontSize: 15, color: AppColors.grey3),
                 ),
               ],
             ),
@@ -49,7 +50,7 @@ class InfoPage extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     return Scaffold(
-      backgroundColor: Colors.white,
+      backgroundColor: AppColors.white,
       body: Stack(
         children: [
           SafeArea(
@@ -93,12 +94,12 @@ class InfoPage extends StatelessWidget {
             right: 0,
             child: Container(
               height: 96,
-              color: Colors.black,
+              color: AppColors.black,
               padding: const EdgeInsets.only(top: 20),
               child: TextButton(
                 style: ButtonStyle(
                   splashFactory: NoSplash.splashFactory,
-                  overlayColor: WidgetStateProperty.all(Colors.transparent),
+                  overlayColor: WidgetStateProperty.all(AppColors.transparent),
                   padding: WidgetStateProperty.all(EdgeInsets.zero),
                 ),
                 onPressed: () => _onContinuePressed(context),
@@ -106,7 +107,7 @@ class InfoPage extends StatelessWidget {
                   alignment: Alignment.topCenter,
                   child: Text(
                     'Continue',
-                    style: TextStyle(fontSize: 18, color: Colors.white),
+                    style: TextStyle(fontSize: 18, color: AppColors.white),
                   ),
                 ),
               ),
diff --git a/lib/ui/auth_flow/key_created_page.dart b/lib/ui/auth_flow/key_created_screen.dart
similarity index 82%
rename from lib/ui/auth_flow/key_created_page.dart
rename to lib/ui/auth_flow/key_created_screen.dart
index 5c83d03c..0cd46445 100644
--- a/lib/ui/auth_flow/key_created_page.dart
+++ b/lib/ui/auth_flow/key_created_screen.dart
@@ -1,13 +1,14 @@
 import 'package:flutter/material.dart';
-import 'package:whitenoise/ui/auth_flow/logged_page.dart';
+import 'package:whitenoise/ui/auth_flow/logged_screen.dart';
+import 'package:whitenoise/ui/core/themes/colors.dart';
 
-class KeyCreatedPage extends StatelessWidget {
-  const KeyCreatedPage({super.key});
+class KeyCreatedScreen extends StatelessWidget {
+  const KeyCreatedScreen({super.key});
 
   void _onContinuePressed(BuildContext context) {
     Navigator.pushReplacement(
       context,
-      MaterialPageRoute(builder: (_) => const LoggedInPage()),
+      MaterialPageRoute(builder: (_) => const LoggedInScreen()),
     );
   }
 
@@ -27,7 +28,7 @@ blah blah blah blah blah blah
 ''';
 
     return Scaffold(
-      backgroundColor: Colors.white,
+      backgroundColor: AppColors.white,
       body: Stack(
         children: [
           SafeArea(
@@ -46,7 +47,7 @@ blah blah blah blah blah blah
                   const SizedBox(height: 16),
                   const Text(
                     'Store this in a secure location. It’s your main\npassword to this profile and your messages.',
-                    style: TextStyle(fontSize: 16, color: Colors.grey),
+                    style: TextStyle(fontSize: 16, color: AppColors.grey3),
                     textAlign: TextAlign.center,
                   ),
                   const SizedBox(height: 32),
@@ -57,7 +58,7 @@ blah blah blah blah blah blah
                       horizontal: 16,
                     ),
                     decoration: BoxDecoration(
-                      color: const Color(0xFFF5F5F5),
+                      color: AppColors.grey1,
                       borderRadius: BorderRadius.circular(16),
                     ),
                     child: Column(
@@ -74,8 +75,8 @@ blah blah blah blah blah blah
                           height: 48,
                           child: TextButton(
                             style: TextButton.styleFrom(
-                              backgroundColor: Colors.black,
-                              foregroundColor: Colors.white,
+                              backgroundColor: AppColors.black,
+                              foregroundColor: AppColors.white,
                               shape: RoundedRectangleBorder(
                                 borderRadius: BorderRadius.circular(24),
                               ),
@@ -91,7 +92,7 @@ blah blah blah blah blah blah
                   const Text(
                     'You can skip now and we’ll remind\nyou to do this later.',
                     textAlign: TextAlign.center,
-                    style: TextStyle(color: Colors.grey),
+                    style: TextStyle(color: AppColors.grey3),
                   ),
                 ],
               ),
@@ -103,12 +104,12 @@ blah blah blah blah blah blah
             right: 0,
             child: Container(
               height: 96,
-              color: Colors.black,
+              color: AppColors.black,
               padding: const EdgeInsets.only(top: 20),
               child: TextButton(
                 style: ButtonStyle(
                   splashFactory: NoSplash.splashFactory,
-                  overlayColor: WidgetStateProperty.all(Colors.transparent),
+                  overlayColor: WidgetStateProperty.all(AppColors.transparent),
                   padding: WidgetStateProperty.all(EdgeInsets.zero),
                 ),
                 onPressed: () => _onContinuePressed(context),
@@ -116,7 +117,7 @@ blah blah blah blah blah blah
                   alignment: Alignment.topCenter,
                   child: Text(
                     'Continue',
-                    style: TextStyle(fontSize: 18, color: Colors.white),
+                    style: TextStyle(fontSize: 18, color: AppColors.white),
                   ),
                 ),
               ),
diff --git a/lib/ui/auth_flow/logged_page.dart b/lib/ui/auth_flow/logged_screen.dart
similarity index 79%
rename from lib/ui/auth_flow/logged_page.dart
rename to lib/ui/auth_flow/logged_screen.dart
index 26f373b5..b000d2a4 100644
--- a/lib/ui/auth_flow/logged_page.dart
+++ b/lib/ui/auth_flow/logged_screen.dart
@@ -1,14 +1,15 @@
 import 'package:flutter/material.dart';
+import 'package:whitenoise/ui/core/themes/colors.dart';
 
-class LoggedInPage extends StatelessWidget {
-  const LoggedInPage({super.key});
+class LoggedInScreen extends StatelessWidget {
+  const LoggedInScreen({super.key});
 
   void _onContinuePressed(BuildContext context) {}
 
   @override
   Widget build(BuildContext context) {
     return Scaffold(
-      backgroundColor: Colors.white,
+      backgroundColor: AppColors.white,
       body: Stack(
         children: [
           SafeArea(
@@ -33,7 +34,7 @@ class LoggedInPage extends StatelessWidget {
                     child: Text(
                       'Let’s see if you already have previous activity.',
                       textAlign: TextAlign.center,
-                      style: TextStyle(fontSize: 16, color: Colors.grey),
+                      style: TextStyle(fontSize: 16, color: AppColors.grey3),
                     ),
                   ),
                   const SizedBox(height: 48),
@@ -44,7 +45,7 @@ class LoggedInPage extends StatelessWidget {
                     ),
                     margin: const EdgeInsets.only(bottom: 16),
                     decoration: BoxDecoration(
-                      color: Colors.black,
+                      color: AppColors.black,
                       borderRadius: BorderRadius.circular(12),
                     ),
                     child: const Row(
@@ -54,13 +55,16 @@ class LoggedInPage extends StatelessWidget {
                           width: 20,
                           child: CircularProgressIndicator(
                             strokeWidth: 2,
-                            color: Colors.white,
+                            color: AppColors.white,
                           ),
                         ),
                         SizedBox(width: 12),
                         Text(
                           'Looking for your contacts',
-                          style: TextStyle(fontSize: 16, color: Colors.white),
+                          style: TextStyle(
+                            fontSize: 16,
+                            color: AppColors.white,
+                          ),
                         ),
                       ],
                     ),
@@ -71,7 +75,7 @@ class LoggedInPage extends StatelessWidget {
                       horizontal: 20,
                     ),
                     decoration: BoxDecoration(
-                      color: Colors.black,
+                      color: AppColors.black,
                       borderRadius: BorderRadius.circular(12),
                     ),
                     child: const Row(
@@ -81,13 +85,16 @@ class LoggedInPage extends StatelessWidget {
                           width: 20,
                           child: CircularProgressIndicator(
                             strokeWidth: 2,
-                            color: Colors.white,
+                            color: AppColors.white,
                           ),
                         ),
                         SizedBox(width: 12),
                         Text(
                           'Looking for chats',
-                          style: TextStyle(fontSize: 16, color: Colors.white),
+                          style: TextStyle(
+                            fontSize: 16,
+                            color: AppColors.white,
+                          ),
                         ),
                       ],
                     ),
@@ -102,12 +109,12 @@ class LoggedInPage extends StatelessWidget {
             right: 0,
             child: Container(
               height: 96,
-              color: Colors.black,
+              color: AppColors.black,
               padding: const EdgeInsets.only(top: 20),
               child: TextButton(
                 style: ButtonStyle(
                   splashFactory: NoSplash.splashFactory,
-                  overlayColor: WidgetStateProperty.all(Colors.transparent),
+                  overlayColor: WidgetStateProperty.all(AppColors.transparent),
                   padding: WidgetStateProperty.all(EdgeInsets.zero),
                 ),
                 onPressed: () => _onContinuePressed(context),
@@ -115,7 +122,7 @@ class LoggedInPage extends StatelessWidget {
                   alignment: Alignment.topCenter,
                   child: Text(
                     'Continue',
-                    style: TextStyle(fontSize: 18, color: Colors.white),
+                    style: TextStyle(fontSize: 18, color: AppColors.white),
                   ),
                 ),
               ),
diff --git a/lib/ui/auth_flow/login_page.dart b/lib/ui/auth_flow/login_screen.dart
similarity index 81%
rename from lib/ui/auth_flow/login_page.dart
rename to lib/ui/auth_flow/login_screen.dart
index f73a8667..7169306c 100644
--- a/lib/ui/auth_flow/login_page.dart
+++ b/lib/ui/auth_flow/login_screen.dart
@@ -1,14 +1,15 @@
 import 'package:flutter/material.dart';
-import 'package:whitenoise/ui/auth_flow/logged_page.dart';
+import 'package:whitenoise/ui/auth_flow/logged_screen.dart';
+import 'package:whitenoise/ui/core/themes/colors.dart';
 
-class LoginPage extends StatefulWidget {
-  const LoginPage({super.key});
+class LoginScreen extends StatefulWidget {
+  const LoginScreen({super.key});
 
   @override
-  State<LoginPage> createState() => _LoginPageState();
+  State<LoginScreen> createState() => _LoginScreenState();
 }
 
-class _LoginPageState extends State<LoginPage> {
+class _LoginScreenState extends State<LoginScreen> {
   final TextEditingController _keyController = TextEditingController();
 
   void _onContinuePressed() {
@@ -21,14 +22,14 @@ class _LoginPageState extends State<LoginPage> {
     }
     Navigator.push(
       context,
-      MaterialPageRoute(builder: (_) => const LoggedInPage()),
+      MaterialPageRoute(builder: (_) => const LoggedInScreen()),
     );
   }
 
   @override
   Widget build(BuildContext context) {
     return Scaffold(
-      backgroundColor: Colors.white,
+      backgroundColor: AppColors.white,
       body: Stack(
         children: [
           SafeArea(
@@ -53,13 +54,13 @@ class _LoginPageState extends State<LoginPage> {
                     child: Text.rich(
                       TextSpan(
                         text: 'White Noise requires a ',
-                        style: TextStyle(fontSize: 16, color: Colors.black87),
+                        style: TextStyle(fontSize: 16, color: AppColors.black),
                         children: [
                           TextSpan(
                             text: 'Nostr private key',
                             style: TextStyle(
                               decoration: TextDecoration.underline,
-                              color: Colors.black87,
+                              color: AppColors.black,
                             ),
                           ),
                           TextSpan(text: ' to use.'),
@@ -79,7 +80,7 @@ class _LoginPageState extends State<LoginPage> {
                     decoration: InputDecoration(
                       hintText: 'nsec...',
                       filled: true,
-                      fillColor: const Color(0xFFF2F2F2),
+                      fillColor: AppColors.grey1,
                       border: OutlineInputBorder(
                         borderRadius: BorderRadius.circular(6),
                         borderSide: BorderSide.none,
@@ -91,7 +92,7 @@ class _LoginPageState extends State<LoginPage> {
                     child: Text(
                       'Your key will be encrypted and only\nstored on your device.',
                       textAlign: TextAlign.center,
-                      style: TextStyle(color: Colors.grey),
+                      style: TextStyle(color: AppColors.grey3),
                     ),
                   ),
                 ],
@@ -105,12 +106,12 @@ class _LoginPageState extends State<LoginPage> {
             child: Container(
               height: 96,
               width: double.infinity,
-              color: Colors.black,
+              color: AppColors.black,
               padding: const EdgeInsets.only(top: 20),
               child: TextButton(
                 style: ButtonStyle(
                   splashFactory: NoSplash.splashFactory,
-                  overlayColor: WidgetStateProperty.all(Colors.transparent),
+                  overlayColor: WidgetStateProperty.all(AppColors.transparent),
                   padding: WidgetStateProperty.all(EdgeInsets.zero),
                 ),
                 onPressed: _onContinuePressed,
@@ -118,7 +119,7 @@ class _LoginPageState extends State<LoginPage> {
                   alignment: Alignment.topCenter,
                   child: Text(
                     'Continue',
-                    style: TextStyle(fontSize: 18, color: Colors.white),
+                    style: TextStyle(fontSize: 18, color: AppColors.white),
                   ),
                 ),
               ),
diff --git a/lib/ui/auth_flow/welcome_page.dart b/lib/ui/auth_flow/welcome_screen.dart
similarity index 76%
rename from lib/ui/auth_flow/welcome_page.dart
rename to lib/ui/auth_flow/welcome_screen.dart
index 54db87eb..4abeb93f 100644
--- a/lib/ui/auth_flow/welcome_page.dart
+++ b/lib/ui/auth_flow/welcome_screen.dart
@@ -1,17 +1,18 @@
 import 'package:flutter/material.dart';
 import 'package:whitenoise/ui/core/themes/assets.dart';
-import 'package:whitenoise/ui/auth_flow/info_page.dart';
-import 'package:whitenoise/ui/auth_flow/login_page.dart';
+import 'package:whitenoise/ui/core/themes/colors.dart';
+import 'package:whitenoise/ui/auth_flow/info_screen.dart';
+import 'package:whitenoise/ui/auth_flow/login_screen.dart';
 
-class WelcomePage extends StatelessWidget {
-  const WelcomePage({super.key});
+class WelcomeScreen extends StatelessWidget {
+  const WelcomeScreen({super.key});
 
   @override
   Widget build(BuildContext context) {
     final screenHeight = MediaQuery.of(context).size.height;
 
     return Scaffold(
-      backgroundColor: Colors.white,
+      backgroundColor: AppColors.white,
       body: Column(
         crossAxisAlignment: CrossAxisAlignment.stretch,
         children: [
@@ -23,7 +24,7 @@ class WelcomePage extends StatelessWidget {
                 return const LinearGradient(
                   begin: Alignment.topCenter,
                   end: Alignment.bottomCenter,
-                  colors: [Colors.black, Colors.transparent],
+                  colors: [AppColors.black, AppColors.transparent],
                   stops: [0.7, 1.0],
                 ).createShader(bounds);
               },
@@ -31,7 +32,6 @@ class WelcomePage extends StatelessWidget {
               child: Image.asset(AssetsPaths.loginSplash, fit: BoxFit.cover),
             ),
           ),
-
           Padding(
             padding: const EdgeInsets.fromLTRB(24, 44, 24, 0),
             child: Column(
@@ -39,7 +39,7 @@ class WelcomePage extends StatelessWidget {
               children: const [
                 Text(
                   'Welcome to',
-                  style: TextStyle(fontSize: 24, color: Colors.black87),
+                  style: TextStyle(fontSize: 24, color: AppColors.black),
                 ),
                 SizedBox(height: 4),
                 Text(
@@ -47,69 +47,66 @@ class WelcomePage extends StatelessWidget {
                   style: TextStyle(
                     fontSize: 42,
                     fontWeight: FontWeight.bold,
-                    color: Colors.black,
+                    color: AppColors.black,
                   ),
                 ),
                 SizedBox(height: 8),
                 Text(
                   'Private messaging made easy.',
-                  style: TextStyle(fontSize: 18, color: Colors.grey),
+                  style: TextStyle(fontSize: 18, color: AppColors.grey3),
                 ),
               ],
             ),
           ),
-
           const Spacer(),
-
           Padding(
             padding: const EdgeInsets.only(bottom: 16),
             child: Center(
               child: TextButton(
                 style: ButtonStyle(
                   splashFactory: NoSplash.splashFactory,
-                  overlayColor: WidgetStateProperty.all(Colors.transparent),
+                  overlayColor: WidgetStateProperty.all(AppColors.transparent),
                   padding: WidgetStateProperty.all(EdgeInsets.zero),
                 ),
                 onPressed: () {
                   Navigator.push(
                     context,
-                    MaterialPageRoute(builder: (_) => const InfoPage()),
+                    MaterialPageRoute(builder: (_) => const InfoScreen()),
                   );
                 },
                 child: const Text(
                   'Create a new profile',
                   style: TextStyle(
                     fontSize: 16,
-                    color: Colors.black,
+                    color: AppColors.black,
                     decoration: TextDecoration.none,
                   ),
                 ),
               ),
             ),
           ),
-
           Container(
             height: 96,
             width: double.infinity,
-            color: Colors.black,
+            color: AppColors.black,
             padding: const EdgeInsets.only(top: 20),
             child: TextButton(
               style: ButtonStyle(
                 splashFactory: NoSplash.splashFactory,
-                overlayColor: WidgetStateProperty.all(Colors.transparent),
+                overlayColor: WidgetStateProperty.all(AppColors.transparent),
                 padding: WidgetStateProperty.all(EdgeInsets.zero),
               ),
               onPressed: () {
                 Navigator.push(
                   context,
-                  MaterialPageRoute(builder: (_) => const LoginPage()),
+                  MaterialPageRoute(builder: (_) => const LoginScreen()),
                 );
               },
               child: const Align(
                 alignment: Alignment.topCenter,
                 child: Text(
                   'Sign in',
-                  style: TextStyle(fontSize: 18, color: Colors.white),
+                  style: TextStyle(fontSize: 18, color: AppColors.white),
                 ),
               ),
             ),


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 1**

<details>
<summary>🔭 Outside diff range comments (1)</summary><blockquote>

<details>
<summary>lib/ui/auth_flow/create_profile_screen.dart (1)</summary><blockquote>

`16-18`: _⚠️ Potential issue_

**Unused trim operations in _onContinuePressed.**

The trim operations on both controller values don't do anything since the results aren't stored or used. This appears to be pre-existing code, but should be fixed.


```diff
void _onContinuePressed() {
-  _usernameController.text.trim();
-  _bioController.text.trim();
+  final username = _usernameController.text.trim();
+  final bio = _bioController.text.trim();
  Navigator.push(
    context,
    MaterialPageRoute(builder: (_) => const KeyCreatedScreen()),
  );
}
```

</blockquote></details>

</blockquote></details>

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: CHILL**
**Plan: Pro**
**Cache: Disabled due to data retention organization setting**
**Knowledge Base: Disabled due to data retention organization setting**


<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 3ae81bad2e03b06225fb005be7ffc2717e78484a and 4016a21c90f13f3785c830c15cef21a2b870211e.

</details>

<details>
<summary>📒 Files selected for processing (7)</summary>

* `lib/main.dart` (2 hunks)
* `lib/ui/auth_flow/create_profile_screen.dart` (5 hunks)
* `lib/ui/auth_flow/info_screen.dart` (5 hunks)
* `lib/ui/auth_flow/key_created_screen.dart` (7 hunks)
* `lib/ui/auth_flow/logged_screen.dart` (7 hunks)
* `lib/ui/auth_flow/login_screen.dart` (6 hunks)
* `lib/ui/auth_flow/welcome_screen.dart` (2 hunks)

</details>

<details>
<summary>🔇 Additional comments (22)</summary><blockquote>

<details>
<summary>lib/main.dart (2)</summary>

`4-4`: **Imports successfully updated for consistency.**

The import path is correctly updated to reflect the renamed file, maintaining the new naming convention.

---

`34-34`: **Component reference properly updated.**

The home component reference has been correctly updated from `WelcomePage` to `WelcomeScreen`, maintaining consistency with the renamed class.

</details>
<details>
<summary>lib/ui/auth_flow/logged_screen.dart (3)</summary>

`2-2`: **Theme colors import added appropriately.**

The import for the centralized color constants has been correctly added.

---

`4-5`: **Class successfully renamed to follow new convention.**

Class has been renamed from `LoggedInPage` to `LoggedInScreen` as part of the standardization effort.

---

`12-12`: **Color constants successfully migrated to AppColors.**

All hardcoded color values have been replaced with the corresponding `AppColors` constants, improving consistency and maintainability across the application.



Also applies to: 37-37, 48-48, 58-59, 66-67, 78-78, 88-89, 96-97, 112-112, 117-117, 125-125

</details>
<details>
<summary>lib/ui/auth_flow/welcome_screen.dart (4)</summary>

`3-5`: **Imports properly updated.**

The imports have been correctly updated to:
1. Add the centralized color constants
2. Reference the renamed screen files

---

`7-8`: **Class successfully renamed to follow new convention.**

Class has been renamed from `WelcomePage` to `WelcomeScreen` as part of the standardization effort.

---

`15-15`: **Color constants successfully migrated to AppColors.**

All hardcoded color values have been properly replaced with the corresponding `AppColors` constants, ensuring consistent theming throughout the UI.



Also applies to: 27-28, 42-43, 50-51, 56-57, 68-69, 81-82, 91-92, 96-97, 109-110

---

`74-75`: **Navigation targets correctly updated.**

Navigation target classes have been updated to reflect the new naming convention, ensuring consistent navigation flow.



Also applies to: 102-103

</details>
<details>
<summary>lib/ui/auth_flow/login_screen.dart (4)</summary>

`2-3`: **Imports properly updated.**

The imports have been correctly updated to:
1. Reference the renamed screen file
2. Add the centralized color constants

---

`5-6`: **Class and state class successfully renamed.**

The widget class has been renamed from `LoginPage` to `LoginScreen` and its corresponding state class from `_LoginPageState` to `_LoginScreenState`, maintaining naming consistency.



Also applies to: 9-9, 12-12

---

`25-25`: **Navigation target correctly updated.**

The navigation target has been properly updated to use the renamed `LoggedInScreen` class.

---

`32-32`: **Color constants successfully migrated to AppColors.**

All hardcoded color values have been properly replaced with corresponding `AppColors` constants, ensuring consistent theming across the application.



Also applies to: 57-58, 63-64, 83-84, 95-96, 109-110, 114-115, 122-123

</details>
<details>
<summary>lib/ui/auth_flow/key_created_screen.dart (3)</summary>

`2-3`: **Class renamed correctly to match global naming convention.**

The class has been consistently renamed from `KeyCreatedPage` to `KeyCreatedScreen` with appropriate import updates, aligning with the standardized naming convention across the authentication flow.



Also applies to: 5-6

---

`11-11`: **Navigation target properly updated.**

The navigation flow has been updated to use the renamed `LoggedInScreen` class, maintaining consistency in the authentication flow.

---

`31-31`: **Hardcoded colors successfully replaced with themed constants.**

All hardcoded color values have been properly replaced with centralized theme constants from the `AppColors` class, ensuring consistent theming throughout the UI.



Also applies to: 50-50, 61-61, 78-79, 95-95, 107-107, 112-112, 120-120

</details>
<details>
<summary>lib/ui/auth_flow/create_profile_screen.dart (3)</summary>

`2-3`: **Class and state class correctly renamed to match global naming convention.**

The class has been consistently renamed from `CreateProfilePage` to `CreateProfileScreen` along with its state class, and import paths have been properly updated, maintaining the standardized naming convention.



Also applies to: 5-6, 9-9, 12-12

---

`21-21`: **Navigation target properly updated.**

The navigation flow has been updated to use the renamed `KeyCreatedScreen` class, maintaining consistency in the authentication flow.

---

`28-28`: **Hardcoded colors successfully replaced with themed constants.**

All hardcoded color values have been properly replaced with centralized theme constants from the `AppColors` class, ensuring consistent theming throughout the UI.



Also applies to: 43-43, 63-63, 86-86, 100-100, 105-105, 113-113

</details>
<details>
<summary>lib/ui/auth_flow/info_screen.dart (3)</summary>

`2-3`: **Class renamed correctly to match global naming convention.**

The class has been consistently renamed from `InfoPage` to `InfoScreen` with appropriate import updates, aligning with the standardized naming convention across the authentication flow.



Also applies to: 5-6

---

`11-11`: **Navigation target properly updated.**

The navigation flow has been updated to use the renamed `CreateProfileScreen` class, maintaining consistency in the authentication flow.

---

`23-23`: **Hardcoded colors successfully replaced with themed constants.**

All hardcoded color values have been properly replaced with centralized theme constants from the `AppColors` class, ensuring consistent theming throughout the UI.



Also applies to: 40-40, 53-53, 97-97, 102-102, 110-110

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-19T06:12:42Z
user: login: erskingardner
body: Approved with the caveat of that one comment
state: APPROVED
author_association: MEMBER
submitted_at: 2025-05-19T06:22:33Z
user: login: coderabbitai[bot]
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-19T06:22:43Z

Review comments:
diff_hunk: @@ -93,20 +94,20 @@ class InfoPage extends StatelessWidget {
             right: 0,
             child: Container(
               height: 96,
-              color: Colors.black,
+              color: AppColors.black,
               padding: const EdgeInsets.only(top: 20),
               child: TextButton(
                 style: ButtonStyle(
                   splashFactory: NoSplash.splashFactory,
-                  overlayColor: WidgetStateProperty.all(Colors.transparent),
+                  overlayColor: WidgetStateProperty.all(AppColors.transparent),
path: lib/ui/auth_flow/info_screen.dart
user: login: coderabbitai[bot]
body: _💡 Verification agent_

<details>
<summary>🧩 Analysis chain</summary>

**Verify the WidgetStateProperty usage across the codebase.**

The code uses `WidgetStateProperty.all()` for button overlay color, while in some Flutter versions this should typically be `MaterialStateProperty.all()`. Please verify that `WidgetStateProperty` is being used consistently and correctly across all files.

---

🏁 Script executed:

```shell
#!/bin/bash
# Search for both WidgetStateProperty and MaterialStateProperty usage in the codebase
echo "Searching for WidgetStateProperty usage:"
rg "WidgetStateProperty" -A 1 -B 1
echo -e "\nSearching for MaterialStateProperty usage:"
rg "MaterialStateProperty" -A 1 -B 1
```

Length of output: 2880

---



</details>

**Replace `WidgetStateProperty` with `MaterialStateProperty` in ButtonStyle**

I couldn’t find any definition or import of `WidgetStateProperty` in the codebase, and Flutter’s ButtonStyle APIs expect `MaterialStateProperty`. Please update all occurrences:

- Change
  ```diff
  - overlayColor: WidgetStateProperty.all(AppColors.transparent),
  + overlayColor: MaterialStateProperty.all(AppColors.transparent),
  ```
- And likewise for padding:
  ```diff
  - padding: WidgetStateProperty.all(EdgeInsets.zero),
  + padding: MaterialStateProperty.all(EdgeInsets.zero),
  ```

in these files under `lib/ui/auth_flow/`:
- create_profile_screen.dart  
- login_screen.dart  
- logged_screen.dart  
- key_created_screen.dart  
- info_screen.dart  
- welcome_screen.dart  

Also ensure you have:
```dart
import 'package:flutter/material.dart';
```
so that `MaterialStateProperty` is available.

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
In lib/ui/auth_flow/info_screen.dart at line 102, replace the incorrect usage of
WidgetStateProperty.all() with MaterialStateProperty.all() for the button
overlayColor property. Also, verify and update all similar occurrences in the
other listed files under lib/ui/auth_flow/ to use MaterialStateProperty instead
of WidgetStateProperty. Ensure the file imports 'package:flutter/material.dart'
so MaterialStateProperty is recognized.
```

</details>

<!-- This is an auto-generated reply by CodeRabbit -->
created_at: 2025-05-19T06:12:41Z
author_association: CONTRIBUTOR
diff_hunk: @@ -93,20 +94,20 @@ class InfoPage extends StatelessWidget {
             right: 0,
             child: Container(
               height: 96,
-              color: Colors.black,
+              color: AppColors.black,
               padding: const EdgeInsets.only(top: 20),
               child: TextButton(
                 style: ButtonStyle(
                   splashFactory: NoSplash.splashFactory,
-                  overlayColor: WidgetStateProperty.all(Colors.transparent),
+                  overlayColor: WidgetStateProperty.all(AppColors.transparent),
path: lib/ui/auth_flow/info_screen.dart
user: login: erskingardner
body: @untreu2 is this something that needs to be addressed or a false negative by coderabbit? 
created_at: 2025-05-19T06:22:21Z
author_association: MEMBER
diff_hunk: @@ -93,20 +94,20 @@ class InfoPage extends StatelessWidget {
             right: 0,
             child: Container(
               height: 96,
-              color: Colors.black,
+              color: AppColors.black,
               padding: const EdgeInsets.only(top: 20),
               child: TextButton(
                 style: ButtonStyle(
                   splashFactory: NoSplash.splashFactory,
-                  overlayColor: WidgetStateProperty.all(Colors.transparent),
+                  overlayColor: WidgetStateProperty.all(AppColors.transparent),
path: lib/ui/auth_flow/info_screen.dart
user: login: coderabbitai[bot]
body: > Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

<!-- This is an auto-generated mute comment by CodeRabbit -->
created_at: 2025-05-19T06:22:43Z
author_association: CONTRIBUTOR

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-05-19T06:10:46Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

## Walkthrough

This update standardizes class and file naming conventions across the authentication flow by renaming all `*Page` classes and files to `*Screen`. It also replaces hardcoded color values with centralized constants from an `AppColors` theme, ensuring consistent theming throughout the UI. No changes were made to logic or control flow.

## Changes

| File(s)                                                                                  | Change Summary                                                                                                                                                                                                                                            |
|-----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `lib/main.dart`                                                                         | Updated import and usage from `welcome_page.dart`/`WelcomePage` to `welcome_screen.dart`/`WelcomeScreen`.                                                                                                          |
| `lib/ui/auth_flow/create_profile_screen.dart`                                           | Renamed `CreateProfilePage` → `CreateProfileScreen` and state class accordingly; updated imports and navigation targets; replaced all hardcoded color values with `AppColors` constants.                            |
| `lib/ui/auth_flow/info_screen.dart`                                                     | Renamed `InfoPage` → `InfoScreen`; updated imports and navigation targets; replaced all hardcoded colors with `AppColors` constants.                                                                               |
| `lib/ui/auth_flow/key_created_screen.dart`                                              | Renamed `KeyCreatedPage` → `KeyCreatedScreen` and all references; updated imports and navigation targets; replaced all hardcoded color values with `AppColors` constants.                                          |
| `lib/ui/auth_flow/logged_screen.dart`                                                   | Renamed `LoggedInPage` → `LoggedInScreen`; replaced all hardcoded color values with `AppColors` constants.                                                                                                         |
| `lib/ui/auth_flow/login_screen.dart`                                                    | Renamed `LoginPage` → `LoginScreen` and state class; updated imports and navigation targets; replaced all hardcoded color values with `AppColors` constants.                                                       |
| `lib/ui/auth_flow/welcome_screen.dart`                                                  | Renamed `WelcomePage` → `WelcomeScreen`; updated imports and navigation targets; replaced all hardcoded color values with `AppColors` constants.                                                                   |

## Poem

> In the warren of screens, a new theme takes hold,  
> Pages become screens, their stories retold.  
> Colors now gathered, in one cozy den,  
> AppColors the palette, again and again.  
> With every hop forward, the UI grows clean—  
> A rabbit’s delight in a world serene!  
> 🐇🎨

<!-- walkthrough_end -->

<!-- announcements_start -->

> [!NOTE]
> <details>
> <summary>⚡️ AI Code Reviews for VS Code, Cursor, Windsurf</summary>
> 
> CodeRabbit now has a plugin for VS Code, Cursor and Windsurf. This brings AI code reviews directly in the code editor. Each commit is reviewed immediately, finding bugs before the PR is raised. Seamless context handoff to your AI code agent ensures that you can easily incorporate review feedback.
> Learn more [here](http://coderabbit.ai/ide).
> 
> </details>

---

> [!NOTE]
> <details>
> <summary>⚡️ Faster reviews with caching</summary>
> 
> CodeRabbit now supports caching for code and dependencies, helping speed up reviews. This means quicker feedback, reduced wait times, and a smoother review experience overall. Cached data is encrypted and stored securely. This feature will be automatically enabled for all accounts on May 16th. To opt out, configure `Review - Disable Cache` at either the organization or repository level. If you prefer to disable all data retention across your organization, simply turn off the `Data Retention` setting under your Organization Settings.
> Enjoy the performance boost—your workflow just got faster.
> 
> </details>

<!-- announcements_end -->
<!-- internal state start -->


<!-- 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= -->

<!-- internal state end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=parres-hq/whitenoise_flutter&utm_content=8):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Explain this complex logic.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai explain this code block.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and explain its main purpose.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: CONTRIBUTOR
user: login: untreu2
created_at: 2025-05-19T06:29:08Z
body: @erskingardner it's a false negative by coderabbit, you can merge.
author_association: CONTRIBUTOR