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