feat(garage): show selected motorcycle photo during confirmation

This commit is contained in:
bponders12-cell 2026-09-01 12:10:57 -04:00
parent aae1b5fca1
commit 0e13422cd1
1 changed files with 33 additions and 43 deletions

View File

@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import '../../models/motorcycle_models.dart'; import '../../models/motorcycle_models.dart';
import 'garage_providers.dart'; import 'garage_providers.dart';
import 'widgets/motorcycle_photo.dart';
class AddMotorcycleScreen extends ConsumerStatefulWidget { class AddMotorcycleScreen extends ConsumerStatefulWidget {
const AddMotorcycleScreen({super.key}); const AddMotorcycleScreen({super.key});
@ -103,9 +104,7 @@ class _AddMotorcycleScreenState extends ConsumerState<AddMotorcycleScreen> {
} }
Future<void> _selectVariant(MotorcycleVariant variant) async { Future<void> _selectVariant(MotorcycleVariant variant) async {
setState(() { setState(() => _selectedVariant = variant);
_selectedVariant = variant;
});
await _loadSpecSummary(); await _loadSpecSummary();
} }
@ -171,23 +170,22 @@ class _AddMotorcycleScreenState extends ConsumerState<AddMotorcycleScreen> {
return PopScope( return PopScope(
canPop: _step == 1, canPop: _step == 1,
onPopInvokedWithResult: (didPop, result) { onPopInvokedWithResult: (didPop, result) {
if (!didPop && _step > 1) { if (!didPop && _step > 1) _goBack();
_goBack();
}
}, },
child: Scaffold( child: Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text(_getStepTitle()), title: Text(_getStepTitle()),
leading: IconButton( leading: IconButton(icon: const Icon(Icons.arrow_back), onPressed: _goBack),
icon: const Icon(Icons.arrow_back),
onPressed: _goBack,
),
), ),
body: _isLoading body: _isLoading
? const Center(child: CircularProgressIndicator()) ? const Center(child: CircularProgressIndicator())
: Column( : Column(
children: [ children: [
LinearProgressIndicator(value: _step / 5.0, backgroundColor: Colors.white10, valueColor: const AlwaysStoppedAnimation(Colors.cyanAccent)), LinearProgressIndicator(
value: _step / 5.0,
backgroundColor: Colors.white10,
valueColor: const AlwaysStoppedAnimation(Colors.cyanAccent),
),
Expanded(child: _buildStepContent()), Expanded(child: _buildStepContent()),
], ],
), ),
@ -197,35 +195,23 @@ class _AddMotorcycleScreenState extends ConsumerState<AddMotorcycleScreen> {
String _getStepTitle() { String _getStepTitle() {
switch (_step) { switch (_step) {
case 1: case 1: return 'Select Year';
return 'Select Year'; case 2: return 'Select Manufacturer';
case 2: case 3: return 'Select Model (${_selectedMake?.name ?? ""})';
return 'Select Manufacturer'; case 4: return 'Select Variant';
case 3: case 5: return 'Confirm Motorcycle';
return 'Select Model (${_selectedMake?.name ?? ""})'; default: return 'Add Motorcycle';
case 4:
return 'Select Variant';
case 5:
return 'Confirm Motorcycle';
default:
return 'Add Motorcycle';
} }
} }
Widget _buildStepContent() { Widget _buildStepContent() {
switch (_step) { switch (_step) {
case 1: case 1: return _buildYearStep();
return _buildYearStep(); case 2: return _buildMakeStep();
case 2: case 3: return _buildModelStep();
return _buildMakeStep(); case 4: return _buildVariantStep();
case 3: case 5: return _buildConfirmStep();
return _buildModelStep(); default: return const SizedBox();
case 4:
return _buildVariantStep();
case 5:
return _buildConfirmStep();
default:
return const SizedBox();
} }
} }
@ -256,7 +242,6 @@ class _AddMotorcycleScreenState extends ConsumerState<AddMotorcycleScreen> {
Widget _buildMakeStep() { Widget _buildMakeStep() {
final query = _searchController.text.toLowerCase(); final query = _searchController.text.toLowerCase();
final filtered = _makes.where((m) => m.name.toLowerCase().contains(query)).toList(); final filtered = _makes.where((m) => m.name.toLowerCase().contains(query)).toList();
return Column( return Column(
children: [ children: [
Padding( Padding(
@ -295,7 +280,6 @@ class _AddMotorcycleScreenState extends ConsumerState<AddMotorcycleScreen> {
Widget _buildModelStep() { Widget _buildModelStep() {
final query = _searchController.text.toLowerCase(); final query = _searchController.text.toLowerCase();
final filtered = _models.where((m) => m.name.toLowerCase().contains(query)).toList(); final filtered = _models.where((m) => m.name.toLowerCase().contains(query)).toList();
return Column( return Column(
children: [ children: [
Padding( Padding(
@ -358,7 +342,7 @@ class _AddMotorcycleScreenState extends ConsumerState<AddMotorcycleScreen> {
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
Container( Container(
padding: const EdgeInsets.all(20), padding: const EdgeInsets.all(12),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white10, color: Colors.white10,
borderRadius: BorderRadius.circular(16), borderRadius: BorderRadius.circular(16),
@ -366,8 +350,14 @@ class _AddMotorcycleScreenState extends ConsumerState<AddMotorcycleScreen> {
), ),
child: Column( child: Column(
children: [ children: [
const Icon(Icons.two_wheeler, size: 64, color: Colors.cyanAccent), MotorcyclePhoto(
const SizedBox(height: 12), year: _selectedYear!,
make: _selectedMake!.name,
model: _selectedModel!.name,
height: 220,
borderRadius: BorderRadius.circular(10),
),
const SizedBox(height: 14),
Text( Text(
'$_selectedYear ${_selectedMake?.name} ${_selectedModel?.name}', '$_selectedYear ${_selectedMake?.name} ${_selectedModel?.name}',
textAlign: TextAlign.center, textAlign: TextAlign.center,