From 42426d55de9af8d872c24cf377d424a70735d0b3 Mon Sep 17 00:00:00 2001
From: MorEmad <69675013+MorEmad@users.noreply.github.com>
Date: Fri, 26 Aug 2022 20:10:21 +0300
Subject: [PATCH 1/3] Update main.dart
---
lib/main.dart | 2 ++
1 file changed, 2 insertions(+)
diff --git a/lib/main.dart b/lib/main.dart
index bcc58f7..0431fe0 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,3 +1,5 @@
+
+//Mortadah Emad
import 'package:flutter/material.dart';
void main() {
From d17710b2f0562907ea3d88e3a6df0d2ae6a26c73 Mon Sep 17 00:00:00 2001
From: MorEmad <69675013+MorEmad@users.noreply.github.com>
Date: Fri, 26 Aug 2022 20:10:21 +0300
Subject: [PATCH 2/3] Update main.dart
---
assets/icons/chat_icon.svg | 3 +
assets/icons/home_icon.svg | 3 +
assets/icons/list_icon.svg | 5 +
assets/icons/three-dots-vertical.svg | 3 +
assets/images/Rectangle 14.png | Bin 0 -> 4724 bytes
lib/main.dart | 17 +--
lib/models/my_models.dart | 20 ++++
lib/screens/add_book/add_book_screen.dart | 90 ++++++++++++++++
lib/screens/cart/cart_screen.dart | 61 +++++++++++
lib/screens/detais_book_screen.dart | 114 +++++++++++++++++++++
lib/screens/home/home_screens.dart | 77 ++++++++++++++
lib/screens/home/widget/my_app_bar.dart | 32 ++++++
lib/screens/widgets/card_of_book.dart | 99 ++++++++++++++++++
lib/screens/widgets/custom_app_bar.dart | 37 +++++++
lib/screens/widgets/my_bottom_nav_bar.dart | 62 +++++++++++
lib/screens/widgets/my_button.dart | 48 +++++++++
lib/screens/widgets/my_text_field.dart | 51 +++++++++
lib/screens/widgets/start_rate.dart | 32 ++++++
lib/screens/widgets/title_text.dart | 21 ++++
pubspec.lock | 50 +++++++++
pubspec.yaml | 8 +-
21 files changed, 825 insertions(+), 8 deletions(-)
create mode 100644 assets/icons/chat_icon.svg
create mode 100644 assets/icons/home_icon.svg
create mode 100644 assets/icons/list_icon.svg
create mode 100644 assets/icons/three-dots-vertical.svg
create mode 100644 assets/images/Rectangle 14.png
create mode 100644 lib/models/my_models.dart
create mode 100644 lib/screens/add_book/add_book_screen.dart
create mode 100644 lib/screens/cart/cart_screen.dart
create mode 100644 lib/screens/detais_book_screen.dart
create mode 100644 lib/screens/home/home_screens.dart
create mode 100644 lib/screens/home/widget/my_app_bar.dart
create mode 100644 lib/screens/widgets/card_of_book.dart
create mode 100644 lib/screens/widgets/custom_app_bar.dart
create mode 100644 lib/screens/widgets/my_bottom_nav_bar.dart
create mode 100644 lib/screens/widgets/my_button.dart
create mode 100644 lib/screens/widgets/my_text_field.dart
create mode 100644 lib/screens/widgets/start_rate.dart
create mode 100644 lib/screens/widgets/title_text.dart
diff --git a/assets/icons/chat_icon.svg b/assets/icons/chat_icon.svg
new file mode 100644
index 0000000..acdc168
--- /dev/null
+++ b/assets/icons/chat_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/home_icon.svg b/assets/icons/home_icon.svg
new file mode 100644
index 0000000..8ee81c9
--- /dev/null
+++ b/assets/icons/home_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/list_icon.svg b/assets/icons/list_icon.svg
new file mode 100644
index 0000000..9235d82
--- /dev/null
+++ b/assets/icons/list_icon.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/icons/three-dots-vertical.svg b/assets/icons/three-dots-vertical.svg
new file mode 100644
index 0000000..cd0c79a
--- /dev/null
+++ b/assets/icons/three-dots-vertical.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/assets/images/Rectangle 14.png b/assets/images/Rectangle 14.png
new file mode 100644
index 0000000000000000000000000000000000000000..d48c9f12cb321925286917539d6d3bd59752026c
GIT binary patch
literal 4724
zcmV-)5{vDLP)
zT-S9y^XLEBR}MK`L{dYM6e)@lCDB@HOA#e+O%uQ}(!h3V19F2DMguoa(IqHQSS}i*
z2pq@;(!g!(*sW{VYa|CYV#o3#*|G#{r9@GrC@w>C77oeTXa4Nd^B&bAXwr@#ker$S
z|9$tKbMCp}cTXqGCKc=2y!hBQ`O7{yWr)oLwJC{_+Bs^P_d
z{?}u(@4a{W@c$d&^i=R@ty(`;uh%^yGa{H$sl;Cmuv#q;5!UKe6w4*~eph!FEEXH;
zyiK8?^K*p(8F^h5>2#Js6y-JR1MM&}V;y!<}khZ
z_OX*s{&r02fB&)&j67MZ*Ph7db1a!%22`z9;N*#OdXeQ*d2?pNYG*J-n9UkiSK?5N
z2Gq(mq!I~?jb2715&{nho6Uwc|F@v>aG~%Da)kmE1{n@5p{uJCM%98OGhZt+$U3vm
zXB72{NXC(4@0|49f8YM^i@1zyWnDa6C={MC8jXCQ!W$WoNMv9YSmVR0wK`JC47?3q
znRBz*#P5JXo3OMH!TZ1d6;6Kg5hCFQ#8+3bFdsxg&*SWwGjO`x@VBl(b~ue>lJOPo&UpHzt}fg_V?EvdvF
zM191m?F>|BNfnkyGimYxgcJicW>8a9y!rYoIPt+R
zi9@?QxX8Kz0zPF}d9PF^10ydo^BPf^y1cIjL%sgu6HgrVD33kqrI@3}o5WLUOxxh%s3Qaqmo@@(4NeprbolJ^zzc}WCO
zVm?P^Ph?3os`5nQRc49AA0k8IRmvCe$p;_8;jm+VenDb2ol3**aG;~J1Hr{b%!WcR
zk?Bs01J|!!g2!n?QT`yxNNtd0hsYecP=O96wx9nmOG
zXk<`iGG(Ozjj1*N0cU11g<7p&&-7SfiF@33R7?pvba8B9q@`Mk_3(U}>dVBaSE^iKP6j(c?yM
zvlrie^qc4(9Du{)#pKJsLY6`;o)wL(B9|_pt<+Uepq0v?7fP@Ymqq@xvD>t*YlYg-
zCUQ<-~>xCB|wsQS1d7MHV5eXJi8M
z=_1q>g4M)!#BazFiqlyvJWXC_32QK^f>G=hOlg@o&|`~es@hSUoyYTk^%r>S!WedL
z+k!MRWi(k3E~(IFqi`1TIC1(*#CV`=I)ySBQDLS8)^rj~JS(5~@Y!bK#c->NYYHJ^
z5rp)3T~O-`nexQelSE^qj|8dmLS5c$F}Q%1Ha}{Wnk;*sWl?fzOioXrZ^sat?G55w@
z5@BbBs_f6Amy00vd`Y%XwUOOHWJd_82%S2HvVk!xe;)^$%JGK;FOVz(-kSEq6Fb^gze2uDX76s
z(GK_+FeN5Kd{*ieM2V-5uTJ9TRD`fF;-imGGRQk{b!-ZEZ{GkfOLXq@FC^Bcmh;f8
z4YFkl82K6-c*rC~`3fYVt`{ioHfaysRE-j$V6};s%IpdK6Bh~hA`F6Ha571?r)ZXM
z;ij5gra0%}^g0n)SwfwGUb}J)N7QIYXj0jCg}qXw{)!HkSWU^UWV4&3+?gp$
z>eS>6`g@w`fHVA1lSHYpt(9md^VCNzpM@({`_cRaR&C6f~!
z+lKJ|@z+qIT=aK#V#}@}G_|+F<@HD(xRP4tfi1}EI;Dd+W=Zpu8sT81d!k;7p9MbC
z!1s+tI|;-rx=0d}S-4NLA
z(YFri@Ej7np}^MldKrDwL1{H_l0cqyemWWzXU1pI(%MR6P{Nh-=WzSJ5oCySVY>vz
z>(YqS*YprI63opwDr}_$yPYQyZwlovkWE>(G`q2i;l56Id@ig+qqus0RF>V+96`xW
zJhrqj1S95WXK?ZK2Wa>E5om43=*<~C{~vGC58APJ_YfZ1`6pX^;VEbSUE+lV`e%6)nRqe`Xt%LJaWzu&NoZxIXKkEK53Q2
z$*yo4ZyWw=Sz3(^L0BQtcE#U}QyK;}N6Rg2J#9bA
zg&fMs7&Z=Vf{|s>IfX5*rV*#1)Y%PgPEKQXF@|Pe3-<5rhm(hx2`3N?rP0~q##is!
zN}^e53XE&xDF-UWWR)emIuXOs7e0rfn!y(*PSFrhezXQ0`)~^JB&R=Sxj$f+Dp08z
zWOs}6*=n(r14C6>g^j&N_!2z<>=c;W3UxICA_>8oc2
zYI$OMMXQ+^NaHtWqu8~r66*cD8IX9&kq7@yAK^K%PQTf;X#<-;}E|FxFgIPuvu
zCq)ghgb?Xg^loTGYBNH%xCfL=VN%~L=bIlo%q?0
z?t#ze#l}rN`1W7Efs&D}vCKKwXqKXC5IUwC@#|9yc>h!wC9+eDfMSDSkn;>ZWO*6o
zTv!fGc3(GzyO}<*ENAT|ry1Y>vpYGXSTQy>N57aygtMRY&$PyHxk>#4N!`Hd;9@(nTvm%V^8UatE{F;wHiAv_cGq
z4u^&M2^!KW0**PF5*sU1!n*#0NasjMx@nDy@sB_FDmHYuAm~!!W+Fvd6OP7kaPR%~
z2k+U6-ku)LudUQfdO}itnHSfb&3O8!A7f&Xo{@_G^pS614}(+Wa8;E!`M0;OvL6?)
zuGx;EO|4kh+Cbb10lGC^346y{e{%8+UVrsC!YeVf(ANFv$3LW{6YCU}Esl&9b`VvJ
zO)lf#-#&-C_q5VkbNqPXTVFpCXlsX`_FA+ZmHl@)6sAeYqkUZq?!W(bc8wy=UztX9
zIfJj?wPmfO{3jSaw5b`}2ivf|-6MA}GA=j8msBz(R@AnZ0d8TS$N`
zE78lD+a$>(BxWI$#AAO$_|#Qw?QdbC=&1d~T;sYn3Zq6xY(k0tEJGb^@;4$reHGf$
zEdKn_y##duFTDH-{{EkAh-XUJu)Ya{8{63YYjPv7t=|tZ8tUu{NggDfDXeuRMtk-&
z*-Na(VnH-Ccc8uZHjWOw-|LsCb#?6B(T2eKHaz{a6A+d_&lTAoxkWQ_^lfcvo3q*N
z0kMS=C7WMZfWM`QebOT5lnR-&Fm?rfJq^gkujA7%Tr{9%e0f1(Uu`8`i*f~b$F4!#
zn2T~pLpRQBXuMyA?%b*7aqpf6gd($ur>hu`0cWO8OO^_;ukx9{;KA?O*N5|?i^Q{0
zcC6TP4vM34S#dXbFN>9i2riRMQ^7fWyBrXvP|WNZHu%v?7g_cgMVq^q$dt5Jf_?GT
z1-4uZ=Vl!jMyHu25`+5}t4%a{6((kPptC|n(0Rc1h{T;-chF{u36c)FPNvsrj&oHb
zUO)b^?7hPBiwe5vYB*2@Ro4F`%X_HA2d=I}In8?{hDz)JsdO6Cb3uGL7Q{+=ltj((
z;#sKnRw!IrRtqTx9fQN`M>@VFXJggol+q$r9D8@T@P~Vc5sI$hm+y{3H~3^L3Uq9l@r#~$8A_u}L{Z00t>M4PWMz%o|YHN+&DUX4PldYE|~
z!Kq1HJbV5r+}dKu*Drqf)HB4^_r}<7qx5@=u_VR0B#nTuVR7POaBw>u8d~q<
zVEB&R6xD(pQMq5_{<%?hp?~@LYb-Y~KsPfpJB4pPc)y(5!2bq=SgVxf;YwV$31ciQ
z|M*A8(LzHZ7NwbV_NjdjJ#yrK7MSAo&c~m=-{NgHEX0c=DhKct&dKFUNoG&1Hv~pq
zE-!3c`HtMV4>LUF;P5sn>Kcb1IgFE;UtYL`=bwLryA~@)hAc)#{(xI82WO4K+S*PN
z?XMzXAfX{v9n7R2jZv6&;hdk{`@q9L_?;E7cs=*lYex#(sxgs#-)oFk>Tb3HqOYIIPF<8chKW__L-y9R2SE0IX<`%!KFH`PS0UA
zQ9vXVk#kPAs&Rvxm19G(VvtjvPYERt4Z9z`>(TEV|LvFz_&;9#-CGVTM$>(6nI9$+Dmhv9!dW1IQ|QRJ~nh%TCySl0000 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),
+
+];
\ No newline at end of file
diff --git a/lib/screens/add_book/add_book_screen.dart b/lib/screens/add_book/add_book_screen.dart
new file mode 100644
index 0000000..0c0e8bb
--- /dev/null
+++ b/lib/screens/add_book/add_book_screen.dart
@@ -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 createState() => _AddBookState();
+}
+
+class _AddBookState extends State {
+ 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,
+ ),
+ ),
+ ],
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/screens/cart/cart_screen.dart b/lib/screens/cart/cart_screen.dart
new file mode 100644
index 0000000..d84e714
--- /dev/null
+++ b/lib/screens/cart/cart_screen.dart
@@ -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 createState() => _CartScreenState();
+}
+
+class _CartScreenState extends State {
+ @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(),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/screens/detais_book_screen.dart b/lib/screens/detais_book_screen.dart
new file mode 100644
index 0000000..ace8a16
--- /dev/null
+++ b/lib/screens/detais_book_screen.dart
@@ -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 createState() => _DetaisBookState();
+}
+
+class _DetaisBookState extends State {
+ @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,),
+ ),
+
+
+ ],
+ ),
+ ),
+ );
+ }
+}
+
+
diff --git a/lib/screens/home/home_screens.dart b/lib/screens/home/home_screens.dart
new file mode 100644
index 0000000..a354eec
--- /dev/null
+++ b/lib/screens/home/home_screens.dart
@@ -0,0 +1,77 @@
+import 'package:book_store_app/screens/add_book/add_book_screen.dart';
+import 'package:book_store_app/screens/cart/cart_screen.dart';
+import 'package:book_store_app/screens/home/widget/my_app_bar.dart';
+import 'package:book_store_app/screens/widgets/my_bottom_nav_bar.dart';
+import 'package:book_store_app/screens/widgets/my_text_field.dart';
+import 'package:book_store_app/screens/widgets/title_text.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import '../../models/my_models.dart';
+import '../widgets/card_of_book.dart';
+
+class HomeScreen extends StatefulWidget {
+ const HomeScreen({Key? key}) : super(key: key);
+
+ @override
+ State createState() => _HomeScreenState();
+}
+
+class _HomeScreenState extends State {
+ TextEditingController searchController = TextEditingController();
+
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ body: SafeArea(
+ child: SingleChildScrollView(
+ child: Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 16.0),
+ child: Stack(
+ children: [
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ MyAppBar(),
+ MyTextField(
+ hint: "Search...",
+ icon: Icons.search_rounded,
+ maxLine: 1,
+ controller: searchController,
+ ),
+ TitleText(
+ text: "Book List",
+ ),
+ Container(
+ height: MediaQuery.of(context).size.height * 0.66,
+ width: double.infinity,
+ child: ListView.separated(
+ itemBuilder: (BuildContext context, int index) =>
+ 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,
+ ),
+ itemCount: listOfBookCard.length,
+ separatorBuilder: (BuildContext context, int index) =>
+ const SizedBox(
+ height: 16,
+ ),
+ ),
+ ),
+ ],
+ ),
+ MybottomNavBar()
+ ],
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/screens/home/widget/my_app_bar.dart b/lib/screens/home/widget/my_app_bar.dart
new file mode 100644
index 0000000..d7b9eb1
--- /dev/null
+++ b/lib/screens/home/widget/my_app_bar.dart
@@ -0,0 +1,32 @@
+
+import 'package:flutter/cupertino.dart';
+import 'package:flutter_svg/svg.dart';
+
+class MyAppBar extends StatelessWidget {
+ const MyAppBar({
+ Key? key,
+ }) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding:
+ const EdgeInsets.symmetric(horizontal: 0, vertical: 16),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Image.asset("assets/images/Rectangle 14.png"),
+ SizedBox(
+ width: 4,
+ ),
+ Text(
+ "Hi, Ali!",
+ style: TextStyle(fontWeight: FontWeight.bold),
+ ),
+ Spacer(),
+ SvgPicture.asset("assets/icons/three-dots-vertical.svg")
+ ],
+ ),
+ );
+ }
+}
\ No newline at end of file
diff --git a/lib/screens/widgets/card_of_book.dart b/lib/screens/widgets/card_of_book.dart
new file mode 100644
index 0000000..177ba77
--- /dev/null
+++ b/lib/screens/widgets/card_of_book.dart
@@ -0,0 +1,99 @@
+import 'package:book_store_app/screens/widgets/start_rate.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 '../detais_book_screen.dart';
+
+class CardBook extends StatelessWidget {
+ RxInt IsCart;
+
+ String img;
+ String title;
+ String auth;
+ String prise;
+ String rate;
+ String dsc;
+ int index;
+ CardBook({
+ Key? key,
+ required this.index,
+ required int isCard ,
+ required this.img,
+ required this.title,
+ required this.auth,
+ required this.prise,
+ required this.rate,
+ required this.dsc,
+ }) : IsCart = (isCard).obs,super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return Row(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ InkWell(
+ onTap: () {
+ Get.to(DetaisBook(
+ img: img,
+ title: title,
+ auth: auth,
+ rate: rate,
+ prise: prise,
+ dsc: dsc,
+ ));
+ },
+ child: Image.network(
+ img,
+ height: 100,
+ ),
+ ),
+ const SizedBox(
+ width: 32,
+ ),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ title,
+ style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 18),
+ ),
+ const SizedBox(
+ height: 8,
+ ),
+ Text(
+ auth,
+ style: const TextStyle(
+ color: Colors.grey,
+ fontWeight: FontWeight.w400,
+ fontSize: 14),
+ ),
+ const SizedBox(
+ height: 8,
+ ),
+ const Text(
+ "\$ 23",
+ style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
+ ),
+ const SizedBox(
+ height: 8,
+ ),
+ StartRate(rate: int.parse(rate))
+ ],
+ ),
+ Spacer(),
+ IconButton(
+ onPressed: () {
+ IsCart.value++;
+ listOfBookCard.elementAt(index).IsCart=IsCart.value;
+ },
+ icon: Obx(() => Icon(
+ Icons.shopping_cart,
+ color: IsCart.value % 2 == 0 ? Colors.black : Colors.grey,
+ )))
+ ],
+ );
+ }
+}
diff --git a/lib/screens/widgets/custom_app_bar.dart b/lib/screens/widgets/custom_app_bar.dart
new file mode 100644
index 0000000..8ace0e5
--- /dev/null
+++ b/lib/screens/widgets/custom_app_bar.dart
@@ -0,0 +1,37 @@
+import 'package:book_store_app/screens/home/home_screens.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 'my_bottom_nav_bar.dart';
+
+class MyAppBar extends StatelessWidget with PreferredSizeWidget {
+ int selected;
+ MyAppBar({
+ this.selected=0,
+ Key? key,
+ }) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return AppBar(
+ backgroundColor: Colors.transparent,
+ elevation: 0,
+ leading: IconButton(onPressed: (){
+ Get.to(HomeScreen());
+ MybottomNavBar.selected.value=selected;
+ },icon:const Icon(Icons.arrow_back_ios,color: Colors.black,size: 20,)),
+ actions: [
+ Padding(
+ padding: const EdgeInsets.only(right: 16.0),
+ child: SvgPicture.asset("assets/icons/three-dots-vertical.svg",color: Colors.black,height: 20,width: 20,),
+ )
+ ],
+ );
+ }
+
+ @override
+ Size get preferredSize => Size.fromHeight(kToolbarHeight);
+}
\ No newline at end of file
diff --git a/lib/screens/widgets/my_bottom_nav_bar.dart b/lib/screens/widgets/my_bottom_nav_bar.dart
new file mode 100644
index 0000000..7f0f96a
--- /dev/null
+++ b/lib/screens/widgets/my_bottom_nav_bar.dart
@@ -0,0 +1,62 @@
+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 '../add_book/add_book_screen.dart';
+import '../cart/cart_screen.dart';
+import '../home/home_screens.dart';
+
+class MybottomNavBar extends StatelessWidget {
+ static RxInt selected=0.obs ;
+ MybottomNavBar({
+ Key? key,
+ }) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return Positioned(
+ bottom: 32,
+ left: 72,
+ right: 72,
+ child: Container(
+ padding: EdgeInsets.symmetric(vertical: 8),
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(14),
+ color: Colors.white,
+ ),
+ child:Obx(()=> Row(
+ mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+ children: [
+ IconButton(
+ onPressed: () {
+ Get.to(HomeScreen());
+ selected.value=0;
+ },
+ icon: SvgPicture.asset(
+ "assets/icons/home_icon.svg",
+ color:selected==0?Colors.black: Colors.grey,
+ )),
+ IconButton(
+ onPressed: () {
+ Get.to((CartScreen()));
+ selected.value=1;
+ },
+ icon: Icon(Icons.shopping_cart_outlined),
+ color: selected==1?Colors.black: Colors.grey,
+ ),
+ IconButton(
+ onPressed: () {
+ Get.to(AddBook());
+ selected.value=2;
+ },
+ icon: Icon(Icons.add),
+ color: selected==2?Colors.black: Colors.grey,
+ )
+ ],
+ ),)
+ ),
+ );
+ }
+}
diff --git a/lib/screens/widgets/my_button.dart b/lib/screens/widgets/my_button.dart
new file mode 100644
index 0000000..36c6f47
--- /dev/null
+++ b/lib/screens/widgets/my_button.dart
@@ -0,0 +1,48 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/svg.dart';
+
+class MyButton extends StatelessWidget {
+ double height;
+ double width;
+ String tex;
+ var icon;
+ Color bgColor;
+ Color texColor;
+ var myOnTap;
+ MyButton({
+ Key? key,
+ this.myOnTap,
+ this.icon,
+ this.texColor = Colors.black,
+ this.bgColor = Colors.white,
+ required this.width,
+ required this.height,
+ required this.tex,
+ }) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return InkWell(
+ onTap: myOnTap,
+ child: Container(
+ height: height,
+ width: width,
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(height / 4),
+ color: bgColor,
+ ),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ icon != null ? SvgPicture.asset(icon) : Container(),
+ SizedBox(
+ width: 16,
+ ),
+ Text(tex,style: TextStyle(color: texColor),),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/screens/widgets/my_text_field.dart b/lib/screens/widgets/my_text_field.dart
new file mode 100644
index 0000000..c21d856
--- /dev/null
+++ b/lib/screens/widgets/my_text_field.dart
@@ -0,0 +1,51 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+
+class MyTextField extends StatelessWidget {
+ String hint;
+ var icon;
+ int maxLine;
+ TextEditingController controller;
+ MyTextField({
+ required this.controller,
+ required this.maxLine,
+ this.icon,
+ required this.hint,
+ Key? key,
+ }) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: const EdgeInsets.symmetric(vertical: 8.0),
+ child: TextField(
+ controller: controller,
+ maxLines: maxLine,
+ textAlign: TextAlign.left,
+ keyboardType: TextInputType.text,
+ decoration: InputDecoration(
+ suffixIcon: icon != null
+ ? Icon(
+ icon,
+ color: Colors.grey,
+ )
+ : Text(""),
+ hintText: hint,
+ hintStyle: TextStyle(
+ fontSize: 16,
+ ),
+ border: OutlineInputBorder(
+ borderRadius: BorderRadius.circular(8),
+ borderSide: const BorderSide(
+ width: 0,
+ style: BorderStyle.none,
+ ),
+ ),
+ filled: true,
+ contentPadding: EdgeInsets.all(16),
+ fillColor: Colors.white,
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/screens/widgets/start_rate.dart b/lib/screens/widgets/start_rate.dart
new file mode 100644
index 0000000..6d4191b
--- /dev/null
+++ b/lib/screens/widgets/start_rate.dart
@@ -0,0 +1,32 @@
+
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+
+class StartRate extends StatelessWidget {
+ const StartRate({
+ Key? key,
+ required this.rate,
+ }) : super(key: key);
+
+ final int rate;
+
+ @override
+ Widget build(BuildContext context) {
+ return Row(
+ children: [
+ for (int i=0; i0; i--)
+ const Icon(
+ Icons.star,
+ color: Colors.grey,
+ size: 14,
+ ),
+ ],
+ );
+ }
+}
\ No newline at end of file
diff --git a/lib/screens/widgets/title_text.dart b/lib/screens/widgets/title_text.dart
new file mode 100644
index 0000000..ec9c3d2
--- /dev/null
+++ b/lib/screens/widgets/title_text.dart
@@ -0,0 +1,21 @@
+
+import 'package:flutter/cupertino.dart';
+
+class TitleText extends StatelessWidget {
+ String text;
+ TitleText({
+ required this.text,
+ Key? key,
+ }) : super(key: key);
+
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: const EdgeInsets.symmetric(vertical: 16.0),
+ child: Text(
+ text,
+ style: TextStyle(fontWeight: FontWeight.bold, fontSize: 24),
+ ),
+ );
+ }
+}
diff --git a/pubspec.lock b/pubspec.lock
index 7bc8bdd..6d0e364 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -57,6 +57,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
+ floating_bottom_navigation_bar:
+ dependency: "direct main"
+ description:
+ name: floating_bottom_navigation_bar
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.5.2"
flutter:
dependency: "direct main"
description: flutter
@@ -69,11 +76,25 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
+ flutter_svg:
+ dependency: "direct main"
+ description:
+ name: flutter_svg
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.1.4"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
+ get:
+ dependency: "direct main"
+ description:
+ name: get
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "4.6.5"
lints:
dependency: transitive
description:
@@ -109,6 +130,27 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
+ path_drawing:
+ dependency: transitive
+ description:
+ name: path_drawing
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.1"
+ path_parsing:
+ dependency: transitive
+ description:
+ name: path_parsing
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "1.0.1"
+ petitparser:
+ dependency: transitive
+ description:
+ name: petitparser
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "5.0.0"
sky_engine:
dependency: transitive
description: flutter
@@ -163,5 +205,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
+ xml:
+ dependency: transitive
+ description:
+ name: xml
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "6.1.0"
sdks:
dart: ">=2.17.6 <3.0.0"
+ flutter: ">=2.11.0-0.1.pre"
diff --git a/pubspec.yaml b/pubspec.yaml
index cd0f457..0aebba8 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -34,6 +34,9 @@ dependencies:
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
+ flutter_svg: ^1.1.4
+ get: any
+ floating_bottom_navigation_bar: ^1.5.2
dev_dependencies:
flutter_test:
@@ -58,8 +61,9 @@ flutter:
uses-material-design: true
# To add assets to your application, add an assets section, like this:
- # assets:
- # - images/a_dot_burr.jpeg
+ assets:
+ - assets/images/
+ - assets/icons/
# - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see
From 13ee11d56a22d1833e625dae8b16165ab8b4b563 Mon Sep 17 00:00:00 2001
From: MorEmad <69675013+MorEmad@users.noreply.github.com>
Date: Fri, 2 Sep 2022 04:40:22 +0300
Subject: [PATCH 3/3] Update main.dart
---
lib/main.dart | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/lib/main.dart b/lib/main.dart
index 0431fe0..784d0fb 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,7 +1,17 @@
-//Mortadah Emad
+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());
}
@@ -11,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(),
);
}
}