Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions assets/icons/chat_icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions assets/icons/home_icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions assets/icons/list_icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions assets/icons/three-dots-vertical.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/Rectangle 14.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 15 additions & 6 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@

import 'package:book_store_app/screens/add_book/add_book_screen.dart';

import 'package:book_store_app/screens/cart/cart_screen.dart';
import 'package:get/get.dart';
import 'package:book_store_app/screens/detais_book_screen.dart';
import 'package:book_store_app/screens/home/home_screens.dart';



import 'package:flutter/material.dart';



void main() {
runApp(const MyApp());
}
Expand All @@ -9,12 +21,9 @@ class MyApp extends StatelessWidget {

@override
Widget build(BuildContext context) {
return const MaterialApp(
home: Scaffold(
body: Center(
child: Text("Book Store App"),
),
),
return const GetMaterialApp(
debugShowCheckedModeBanner: false,
home: HomeScreen(),
);
}
}
20 changes: 20 additions & 0 deletions lib/models/my_models.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@


class ModCardOfBook{
String img;
String title;
String prise;
String auth;
String rate;
String dsc;
int IsCart;
ModCardOfBook({required this.img,required this.title, required this.auth,required this.prise ,required this.rate,required this.dsc, this.IsCart=1});

}
List<ModCardOfBook> listOfBookCard=[
ModCardOfBook(img: 'https://m.media-amazon.com/images/I/31Kaxk93VmL._AC_SY580_.jpg',title: 'Letting go',auth: 'david hawkins', rate:'2' ,prise: '29', dsc:'A spectacular visual journey through 40 years of haute couture from one of the best-known and most trend-setting brands in fashion.',IsCart: 2),
ModCardOfBook(img: 'https://images-na.ssl-images-amazon.com/images/I/41L9zGuDGHL.jpg',title: 'The Book of Man',auth: 'Osho', rate:'5' ,prise: '33', dsc: 'B spectacular visual journey through 40 years of haute couture from one of the best-known and most trend-setting brands in fashion.',IsCart: 1),
ModCardOfBook(img: 'https://images-na.ssl-images-amazon.com/images/I/41ZwJeOY7jL._SX336_BO1,204,203,200_.jpg',title: 'The Book of Life',auth: 'J.Krishnamurti', rate:'4' ,prise: '34', dsc: 'C spectacular visual journey through 40 years of haute couture from one of the best-known and most trend-setting brands in fashion.',IsCart: 2),
ModCardOfBook(img: 'https://images-na.ssl-images-amazon.com/images/I/91JxEYMbYbL.jpg',title: 'Why we sleep',auth: 'Matthew Walker', rate:'3' ,prise: '24.99', dsc: 'D spectacular visual journey through 40 years of haute couture from one of the best-known and most trend-setting brands in fashion.',IsCart: 3),

];
90 changes: 90 additions & 0 deletions lib/screens/add_book/add_book_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import 'package:book_store_app/screens/home/home_screens.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';

import '../../models/my_models.dart';
import '../widgets/custom_app_bar.dart';
import '../widgets/my_button.dart';
import '../widgets/my_text_field.dart';
import '../widgets/title_text.dart';

class AddBook extends StatefulWidget {
const AddBook({Key? key}) : super(key: key);

@override
State<AddBook> createState() => _AddBookState();
}

class _AddBookState extends State<AddBook> {
TextEditingController nameContoroller=TextEditingController();
TextEditingController authorContoroller=TextEditingController();
TextEditingController priceContoroller=TextEditingController();
TextEditingController imageContoroller=TextEditingController();
TextEditingController desContoroller=TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppBar(),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TitleText(text: "Add Book"),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
children: [
MyTextField(
hint: 'Book Name',
maxLine: 1, controller: nameContoroller,
),
MyTextField(
hint: 'Author Name',
maxLine: 1,
controller: authorContoroller,
),
MyTextField(
hint: 'Price',
maxLine: 1,
controller: priceContoroller,
),
MyTextField(
hint: 'Image link',
maxLine: 1,
controller: imageContoroller,
),
MyTextField(
hint: 'Description',
maxLine: 4,
controller: desContoroller,
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 16.0),
child: MyButton(
myOnTap: (){
listOfBookCard.add(ModCardOfBook(img: imageContoroller.text, auth: authorContoroller.text, dsc: desContoroller.text, rate: '0', title: nameContoroller.text, prise: priceContoroller.text));
Get.to(HomeScreen());
print(listOfBookCard.length);

},
height: MediaQuery.of(context).size.width * 0.15,
width: MediaQuery.of(context).size.width,
tex: "Add",
bgColor: Colors.black,
texColor: Colors.white,
),
),
],
),
)
],
),
),
),
);
}
}
61 changes: 61 additions & 0 deletions lib/screens/cart/cart_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart';

import '../../models/my_models.dart';
import '../widgets/card_of_book.dart';
import '../widgets/custom_app_bar.dart';
import '../widgets/my_bottom_nav_bar.dart';
import '../widgets/title_text.dart';

class CartScreen extends StatefulWidget {
const CartScreen({Key? key}) : super(key: key);

@override
State<CartScreen> createState() => _CartScreenState();
}

class _CartScreenState extends State<CartScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppBar(),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Stack(
children: [
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TitleText(text: "Cart"),
Container(
margin: EdgeInsets.symmetric(horizontal: 16),
height: MediaQuery.of(context).size.height * 0.77,
width: double.infinity,
child: ListView.separated(
itemBuilder: (BuildContext context, int index) => listOfBookCard[index].IsCart%2==0?
CardBook(index: index,
title: listOfBookCard[index].title,
rate: listOfBookCard[index].rate,
auth: listOfBookCard[index].auth,
img: listOfBookCard[index].img,
prise: listOfBookCard[index].prise,
dsc: listOfBookCard[index].dsc,
isCard: listOfBookCard[index].IsCart,
):Container(),
itemCount: listOfBookCard.length,
separatorBuilder: (BuildContext context, int index) =>
const SizedBox(
height: 16,
),
)),
],
),
MybottomNavBar(),
],
),
),
);
}
}
114 changes: 114 additions & 0 deletions lib/screens/detais_book_screen.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@

import 'package:book_store_app/screens/widgets/custom_app_bar.dart';
import 'package:book_store_app/screens/widgets/my_button.dart';
import 'package:book_store_app/screens/widgets/start_rate.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:get/get.dart';
import 'package:get/get_core/src/get_main.dart';

import 'widgets/card_of_book.dart';

class DetaisBook extends StatefulWidget {
String img;
String title;
String auth;
String prise;
String rate;
String dsc;
DetaisBook({
Key? key,
required this.img,
required this.title,
required this.auth,
required this.prise,
required this.rate,
required this.dsc,
}) : super(key: key);



@override
State<DetaisBook> createState() => _DetaisBookState();
}

class _DetaisBookState extends State<DetaisBook> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: MyAppBar(),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Center(child: Image.network(widget.img,height: MediaQuery.of(context).size.height*0.4,)),
Padding(
padding: EdgeInsets.only(top: 16.0),
child: Text(
widget.title,
style: const TextStyle(
fontWeight: FontWeight.bold, fontSize: 22),
),
),
Text(
widget.auth,
style: const TextStyle(
color: Colors.grey,
fontWeight: FontWeight.w400,
fontSize: 14),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: const [
StartRate(rate:5),
SizedBox(width: 8,),
Text(
'5.0',
style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.w400,
fontSize: 14),
),
Text(
'/5.0',
style: TextStyle(
color: Colors.grey,
fontWeight: FontWeight.w400,
fontSize: 14),
),
],
),
),
Text(
widget.dsc,
style: TextStyle(
color: Colors.grey,
fontWeight: FontWeight.w400,
fontSize: 14),
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
MyButton(icon:"assets/icons/list_icon.svg",height:MediaQuery.of(context).size.width*0.12,width: MediaQuery.of(context).size.width*0.4,tex: "Preview",bgColor: Colors.white,),
SizedBox(width: 16,),
MyButton(icon: "assets/icons/chat_icon.svg",height: MediaQuery.of(context).size.width*0.12,width: MediaQuery.of(context).size.width*0.4,tex: "Reviews",bgColor: Colors.white,),
],
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 32),
child: MyButton(height: MediaQuery.of(context).size.width*0.15,width: MediaQuery.of(context).size.width,tex: "Buy Now for \$${widget.prise}",bgColor: Colors.black,texColor: Colors.white,),
),


],
),
),
);
}
}


Loading