0% found this document useful (0 votes)
6 views5 pages

Home Screen - Dart

aFfFAF

Uploaded by

mahmoud shaban
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views5 pages

Home Screen - Dart

aFfFAF

Uploaded by

mahmoud shaban
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

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),
],
),
),
);
}
}

You might also like