import 'dart:io';
import 'package:flutter/[Link]';
import 'package:flutter/[Link]';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:mazad_web/data/car_data.dart';
import 'package:mazad_web/models/car_ad.dart';
import 'package:mazad_web/views/home/model_selection_screen.dart';
import 'package:mazad_web/views/home/widgets/car_search_bar.dart';
import 'package:mazad_web/views/home/widgets/categories/category_section.dart';
import 'package:mazad_web/views/home/widgets/home_banner.dart';
import 'package:mazad_web/views/login/login_screen.dart';
import 'package:mazad_web/views/registration_screen/registration_screen.dart';
import 'package:mazad_web/views/sell_car_screen/sell_car_screen.dart';
import 'package:mazad_web/views/car_details_screen/car_details_screen.dart';
import 'package:mazad_web/views/account_screen/account_screen.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({[Link]});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final TextEditingController _searchController = TextEditingController();
List<String> filteredMakes = [];
List<CarAd> carAds = [];
User? get currentUser => [Link];
@override
void initState() {
[Link]();
_searchController.addListener(_filterMakes);
}
void _filterMakes() {
final input = _searchController.[Link]();
setState(() {
filteredMakes = [Link]
.where((make) =>
[Link]().startsWith(input) && [Link])
.toList();
});
}
void _handleSearch() {
final query = _searchController.[Link]();
if ([Link] && [Link](query)) {
_openModelSelection(query);
} else {
[Link](context).showSnackBar(
const SnackBar(content: Text('Please enter a valid car make')),
);
}
}
void _openModelSelection(String make) {
final models = carCategories[make] ?? [];
[Link](
context,
MaterialPageRoute(
builder: (context) => ModelSelectionScreen(make: make, models: models),
),
);
}
@override
void dispose() {
_searchController.dispose();
[Link]();
}
@override
Widget build(BuildContext context) {
final user = currentUser;
return Scaffold(
backgroundColor: [Link],
appBar: AppBar(
backgroundColor: [Link],
elevation: 1,
titleSpacing: 0,
title: Row(
children: [
const SizedBox(width: 12),
const Text(
'Auto Mazad',
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 25,
color: [Link]),
),
const SizedBox(width: 16),
TextButton(
onPressed: () async {
if (user == null) {
[Link](
context,
MaterialPageRoute(builder: (_) => const LoginScreen()),
);
return;
}
final ad = await [Link]<CarAd>(
context,
MaterialPageRoute(builder: (_) => const SellCarScreen()),
);
if (ad != null) {
setState(() {
[Link](0, ad); // Show newest ad on top
});
}
},
child: const Text(
'Sell a Car',
style: TextStyle(
color: [Link],
fontWeight: [Link],
fontSize: 16,
),
),
),
],
),
actions: [
if (user == null) ...[
Padding(
padding: const [Link](horizontal: 6),
child: [Link](
icon: const Icon([Link], size: 18),
label: const Text('Login'),
style: [Link](
elevation: 0,
foregroundColor: [Link],
backgroundColor: [Link],
shape: RoundedRectangleBorder(
borderRadius: [Link](20)),
),
onPressed: () {
[Link](
context,
MaterialPageRoute(builder: (_) => const LoginScreen()),
);
},
),
),
Padding(
padding: const [Link](horizontal: 6),
child: [Link](
icon: const Icon(Icons.app_registration, size: 18),
label: const Text('Register'),
style: [Link](
elevation: 0,
foregroundColor: [Link],
backgroundColor: [Link],
shape: RoundedRectangleBorder(
borderRadius: [Link](20)),
),
onPressed: () {
[Link](
context,
MaterialPageRoute(
builder: (_) => const RegistrationScreen()),
);
},
),
),
] else ...[
IconButton(
icon: const Icon(Icons.account_circle, color: [Link]),
onPressed: () {
[Link](
context,
MaterialPageRoute(builder: (_) => const AccountScreen()),
);
},
),
],
],
),
body: SingleChildScrollView(
padding: const [Link](vertical: 16),
child: Column(
crossAxisAlignment: [Link],
children: [
Padding(
padding: const [Link](horizontal: 16),
child: CarSearchBar(
controller: _searchController, onSearch: _handleSearch),
),
const SizedBox(height: 16),
if ([Link])
Padding(
padding: const [Link](horizontal: 16),
child: Wrap(
spacing: 8,
runSpacing: 8,
children: [Link]((make) {
return ActionChip(
label: Text(make),
onPressed: () {
_searchController.text = make;
_openModelSelection(make);
},
);
}).toList(),
),
),
const SizedBox(height: 24),
const Padding(
padding: [Link](horizontal: 16),
child: Text('Browse by Car Make',
style: TextStyle(fontSize: 18, fontWeight: [Link])),
),
const SizedBox(height: 12),
CategorySection(
carCategories: carCategories,
onMakeSelected: _openModelSelection),
const SizedBox(height: 24),
const HomeBanner(),
const SizedBox(height: 24),
if ([Link])
Padding(
padding: const [Link](horizontal: 16),
child: Wrap(
spacing: 12,
runSpacing: 12,
children: [Link]((ad) {
return GestureDetector(
onTap: () {
[Link](
context,
MaterialPageRoute(
builder: (_) => CarDetailsScreen(ad: ad)));
},
child: Card(
elevation: 2,
shape: RoundedRectangleBorder(
borderRadius: [Link](12)),
child: Container(
width: 220,
padding: const [Link](12),
child: Column(
crossAxisAlignment: [Link],
children: [
if ([Link])
ClipRRect(
borderRadius: [Link](8),
child: kIsWeb
? [Link](
[Link],
height: 100,
width: [Link],
fit: [Link],
)
: [Link](
File([Link]),
height: 100,
width: [Link],
fit: [Link],
),
),
const SizedBox(height: 8),
Text('${[Link]} ${[Link]}',
style: const TextStyle(
fontWeight: [Link])),
Text('Year: ${[Link]}'),
Text('Mileage: ${[Link]} km'),
Text('Transmission: ${[Link]}'),
],
),
),
),
);
}).toList(),
),
),
const SizedBox(height: 32),
],
),
),
);
}
}