Files
phone_login/lib/home/home_screen.dart
soragui 4d0207f41f feat: Implement _LoggedInView UI and AuthState improvements
Implements the UI for the _LoggedInView in home_screen.dart, including:
- An AppBar with a Profile icon that navigates to the profile screen.
- A ListView.builder displaying example items.
- A FloatingActionButton.extended for Logout that calls the `authState.logout()` method.
- Adds a `logout()` method to `AuthState` to clear the login state.
- Modifies the `toggleLogin()` method in `AuthState` to accept an optional boolean value for explicit state control.
- Ensured code formatting and resolved any linting issues.
2026-01-19 15:48:09 +08:00

98 lines
2.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:phone_login/auth/auth_state.dart';
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Home')),
body: Consumer<AuthState>(
builder: (context, authState, child) {
return authState.isLoggedIn
? const _LoggedInView()
: const _LoggedOutView();
},
),
);
}
}
class _LoggedInView extends StatelessWidget {
const _LoggedInView();
@override
Widget build(BuildContext context) {
final authState = Provider.of<AuthState>(context, listen: false);
return Scaffold(
appBar: AppBar(
title: const Text('Welcome Back!'),
actions: [
IconButton(
icon: const Icon(Icons.person),
onPressed: () {
context.go('/profile'); // Navigate to profile screen
},
),
],
),
body: ListView.builder(
itemCount: 20, // Example items
itemBuilder: (context, index) {
return Card(
margin: const EdgeInsets.all(8.0),
child: ListTile(
leading: const Icon(Icons.star),
title: Text('Item ${index + 1}'),
subtitle: const Text('This is an example item.'),
),
);
},
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () {
authState.logout(); // Call logout method
},
label: const Text('Logout'),
icon: const Icon(Icons.logout),
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
);
}
}
class _LoggedOutView extends StatelessWidget {
const _LoggedOutView();
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Icon(Icons.lock, size: 100, color: Colors.grey),
const SizedBox(height: 20),
Text('Welcome!', style: Theme.of(context).textTheme.headlineMedium),
const SizedBox(height: 10),
const Text(
'Please log in to continue.',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.grey),
),
const SizedBox(height: 30),
ElevatedButton(
onPressed: () {
context.go('/phone');
},
child: const Text('Login'),
),
],
),
);
}
}