From 22bc7420afa0a21e93adc43e835faa7da070cddf Mon Sep 17 00:00:00 2001 From: Al-Qasim Mahmood <104140247+KasmThio@users.noreply.github.com> Date: Thu, 25 Aug 2022 19:57:19 +0300 Subject: [PATCH 1/3] firstPageDone --- lib/home_page/books_main/book_widgets.dart | 45 ++++++++++++++ .../books_main/books_list_bulder.dart | 15 +++++ lib/home_page/books_main/books_model.dart | 50 ++++++++++++++++ lib/home_page/books_main/rating_widget.dart | 43 ++++++++++++++ lib/home_page/my_app_bar/app_bar_footer.dart | 15 +++++ lib/home_page/my_app_bar/search_bar.dart | 31 ++++++++++ lib/home_page/my_app_bar/user_widget.dart | 24 ++++++++ lib/main.dart | 59 +++++++++++++++++-- 8 files changed, 278 insertions(+), 4 deletions(-) create mode 100644 lib/home_page/books_main/book_widgets.dart create mode 100644 lib/home_page/books_main/books_list_bulder.dart create mode 100644 lib/home_page/books_main/books_model.dart create mode 100644 lib/home_page/books_main/rating_widget.dart create mode 100644 lib/home_page/my_app_bar/app_bar_footer.dart create mode 100644 lib/home_page/my_app_bar/search_bar.dart create mode 100644 lib/home_page/my_app_bar/user_widget.dart diff --git a/lib/home_page/books_main/book_widgets.dart b/lib/home_page/books_main/book_widgets.dart new file mode 100644 index 0000000..8ca3778 --- /dev/null +++ b/lib/home_page/books_main/book_widgets.dart @@ -0,0 +1,45 @@ +import 'package:book_store_app/home_page/books_main/rating_widget.dart'; +import 'package:flutter/material.dart'; + + +import 'books_model.dart'; + +class MyBook extends StatelessWidget{ + const MyBook({Key? key, required this.bookData}) : super(key: key); + final BookData bookData; + + + @override + Widget build(BuildContext context){ + return Padding( + padding: const EdgeInsets.all(8.0), + child: Container(height: 150, width: 21, color: Color(0xffE5E5E5), + child: Row( + children: [ClipRRect(borderRadius:BorderRadius.circular(8) , + child: Image.network(bookData.bookImage, height: 280,width: 100,)), + Padding( + padding: const EdgeInsets.only(left:20), + child: Column(crossAxisAlignment: CrossAxisAlignment.start,mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Text(bookData.bookName,style: const TextStyle( + fontSize: 18,fontWeight: FontWeight.bold + + ),), + ),Text(bookData.bookAuthor,style: const TextStyle( + fontSize: 14, + ),), + + Text(bookData.bookPrice,style: TextStyle(fontSize: 16,fontWeight: FontWeight.bold),), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: StarRating(rating: bookData.bookRate,), + ) + ],), + ), + ], + ),), + ); + } +} diff --git a/lib/home_page/books_main/books_list_bulder.dart b/lib/home_page/books_main/books_list_bulder.dart new file mode 100644 index 0000000..5ecefe3 --- /dev/null +++ b/lib/home_page/books_main/books_list_bulder.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; +import 'book_widgets.dart'; +import 'books_model.dart'; + + +class MyBooksCard extends StatelessWidget { + const MyBooksCard({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Expanded(child: ListView(children: BookData.books.map((e) => MyBook(bookData: e)).toList(),)); + } +} \ No newline at end of file diff --git a/lib/home_page/books_main/books_model.dart b/lib/home_page/books_main/books_model.dart new file mode 100644 index 0000000..c741ca1 --- /dev/null +++ b/lib/home_page/books_main/books_model.dart @@ -0,0 +1,50 @@ +class BookData{ + final String bookName; + final double bookRate; + final String bookAuthor; + final String bookDescription; + final String bookImage; + final String bookPrice; + + BookData({ + required this.bookPrice, + required this.bookName, + required this.bookAuthor, + required this.bookDescription, + required this.bookRate, + required this.bookImage + }); + + static List books = [ + BookData(bookName: 'bookName', + bookAuthor: 'bookAuthor', + bookDescription: 'bookDescription', + bookRate: 3.5, + bookImage: 'https://api.lorem.space/image/book?w=150&h=220', + bookPrice: '19 \$'), + BookData(bookName: 'bookName', + bookAuthor: 'bookAuthor', + bookDescription: 'bookDescription', + bookRate: 5, + bookImage: 'https://api.lorem.space/image/book?w=150&h=220', + bookPrice: '15 \$'), + BookData(bookName: 'bookName', + bookAuthor: 'bookAuthor', + bookDescription: 'bookDescription', + bookRate: 5, + bookImage: 'https://api.lorem.space/image/book?w=150&h=220', + bookPrice: '15 \$'), + BookData(bookName: 'bookName', + bookAuthor: 'bookAuthor', + bookDescription: 'bookDescription', + bookRate: 5, + bookImage: 'https://api.lorem.space/image/book?w=150&h=220', + bookPrice: '15 \$'), + BookData(bookName: 'bookName', + bookAuthor: 'bookAuthor', + bookDescription: 'bookDescription', + bookRate: 5, + bookImage: 'https://api.lorem.space/image/book?w=150&h=220', + bookPrice: '15 \$') + ]; +} diff --git a/lib/home_page/books_main/rating_widget.dart b/lib/home_page/books_main/rating_widget.dart new file mode 100644 index 0000000..0ae26ca --- /dev/null +++ b/lib/home_page/books_main/rating_widget.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; + +typedef RatingChangeCallback = void Function(double rating); + +class StarRating extends StatelessWidget { + final int starCount; + final double rating; + final RatingChangeCallback? onRatingChanged; + final Color color = const Color(0xffffc41f); + + StarRating({Key? key, this.starCount = 5, this.rating = .0, + this.onRatingChanged,}) : super(key: key); + + Widget buildStar(BuildContext context, int index) { + Icon icon; + if (index >= rating) { + icon = const Icon( + Icons.star_border, + color: Colors.black26 + ); + } + else if (index > rating - 1 && index < rating) { + icon = Icon( + Icons.star_half, + color: color + ); + } else { + icon = Icon( + Icons.star, + color: color + ); + } + return InkResponse( + onTap: onRatingChanged == null ? null : () => onRatingChanged!(index + 1.0), + child: icon, + ); + } + + @override + Widget build(BuildContext context) { + return Row(children: List.generate(starCount, (index) => buildStar(context, index))); + } +} \ No newline at end of file diff --git a/lib/home_page/my_app_bar/app_bar_footer.dart b/lib/home_page/my_app_bar/app_bar_footer.dart new file mode 100644 index 0000000..7d91d0e --- /dev/null +++ b/lib/home_page/my_app_bar/app_bar_footer.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class BookListText extends StatelessWidget { + const BookListText({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return const Padding( + padding: EdgeInsets.only(right: 280), + child: Text('Book List',style: TextStyle(fontSize: 24,fontWeight: FontWeight.bold),), + ); + } +} \ No newline at end of file diff --git a/lib/home_page/my_app_bar/search_bar.dart b/lib/home_page/my_app_bar/search_bar.dart new file mode 100644 index 0000000..8f2dcbf --- /dev/null +++ b/lib/home_page/my_app_bar/search_bar.dart @@ -0,0 +1,31 @@ +import 'package:flutter/material.dart'; + +class MySearchBar extends StatelessWidget { + const MySearchBar({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(top:30), + child: Column( + children: [ + Container(height: 50,width: 370,alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8),color: const Color(0xffFFFFFF)),child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: const [ + Padding( + padding: EdgeInsets.only(left: 10.0), + child: Text('Search...'), + + ), Padding( + padding: EdgeInsets.only(right: 10.0), + child: Icon(Icons.search), + ) + ],),), + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/home_page/my_app_bar/user_widget.dart b/lib/home_page/my_app_bar/user_widget.dart new file mode 100644 index 0000000..ccb673e --- /dev/null +++ b/lib/home_page/my_app_bar/user_widget.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; + +class UserName extends StatelessWidget { + const UserName({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Text('Hi, Kasm',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 18),); + } +} + +class UserImage extends StatelessWidget { + const UserImage({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container(width: 50,height: 50,decoration: + BoxDecoration(borderRadius: BorderRadius.circular(10),color: Colors.red),); + } +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index bcc58f7..da0086d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,10 @@ import 'package:flutter/material.dart'; +import 'home_page/books_main/books_list_bulder.dart'; +import 'home_page/my_app_bar/app_bar_footer.dart'; +import 'home_page/my_app_bar/search_bar.dart'; +import 'home_page/my_app_bar/user_widget.dart'; + void main() { runApp(const MyApp()); } @@ -9,12 +14,58 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { - return const MaterialApp( + return MaterialApp( home: Scaffold( - body: Center( - child: Text("Book Store App"), - ), + backgroundColor: const Color(0xffE5E5E5), + body:PageView( children:[Column( + children: [Padding( + padding: const EdgeInsets.only(top: 50), + child: Row( + children: const [ + SizedBox(width: 10,), + UserImage(),SizedBox(width: 10,), + UserName(), + SizedBox(width: 240,), + Icon(Icons.more_vert_sharp) + ],), + ),const MySearchBar(), + const SizedBox(height: 30,), + const BookListText(), + const SizedBox(height: 10,), + const MyBooksCard(), + ], + ) ]), ), ); } } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From c12f23a43869f6dcab3123785bbfcc2bf6864649 Mon Sep 17 00:00:00 2001 From: Al-Qasim Mahmood <104140247+KasmThio@users.noreply.github.com> Date: Sat, 27 Aug 2022 18:12:18 +0300 Subject: [PATCH 2/3] second update --- .../book_page_buttons/book_all_buttons.dart | 34 +++++++++++ .../book_page_buttons/book_buy_button.dart | 24 ++++++++ .../book_preview_button.dart | 20 +++++++ .../book_reviews_button.dart | 18 ++++++ lib/book_page/book_page_image/book_image.dart | 19 +++++++ lib/book_page/book_page_main.dart | 40 +++++++++++++ .../book_page_texts/book_author.dart | 21 +++++++ .../book_page_texts/book_descrption.dart | 20 +++++++ lib/book_page/book_page_texts/book_name.dart | 21 +++++++ lib/book_page/book_page_texts/book_rate.dart | 26 +++++++++ lib/home_page/books_main/book_widgets.dart | 56 ++++++++++--------- .../books_main/books_list_bulder.dart | 5 +- lib/home_page/books_main/books_model.dart | 24 ++++---- lib/main.dart | 23 +++++++- 14 files changed, 310 insertions(+), 41 deletions(-) create mode 100644 lib/book_page/book_page_buttons/book_all_buttons.dart create mode 100644 lib/book_page/book_page_buttons/book_buy_button.dart create mode 100644 lib/book_page/book_page_buttons/book_preview_button.dart create mode 100644 lib/book_page/book_page_buttons/book_reviews_button.dart create mode 100644 lib/book_page/book_page_image/book_image.dart create mode 100644 lib/book_page/book_page_main.dart create mode 100644 lib/book_page/book_page_texts/book_author.dart create mode 100644 lib/book_page/book_page_texts/book_descrption.dart create mode 100644 lib/book_page/book_page_texts/book_name.dart create mode 100644 lib/book_page/book_page_texts/book_rate.dart diff --git a/lib/book_page/book_page_buttons/book_all_buttons.dart b/lib/book_page/book_page_buttons/book_all_buttons.dart new file mode 100644 index 0000000..e6bcf36 --- /dev/null +++ b/lib/book_page/book_page_buttons/book_all_buttons.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; + +import '../../home_page/books_main/books_model.dart'; +import 'book_buy_button.dart'; +import 'book_preview_button.dart'; +import 'book_reviews_button.dart'; + +class BookPageButton extends StatelessWidget { + const BookPageButton({ + Key? key, + required this.book, + }) : super(key: key); + + final BookData book; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Column( + children: [ + Row(mainAxisAlignment: MainAxisAlignment.center, + children: const [ + PreviewButton(), + SizedBox(width: 13,), + ReviewsButton() + ], + ),const SizedBox(height: 34,), + BuyButton(book: book) + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/book_page/book_page_buttons/book_buy_button.dart b/lib/book_page/book_page_buttons/book_buy_button.dart new file mode 100644 index 0000000..987d178 --- /dev/null +++ b/lib/book_page/book_page_buttons/book_buy_button.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; + +import '../../home_page/books_main/books_model.dart'; + +class BuyButton extends StatelessWidget { + const BuyButton({ + Key? key, + required this.book, + }) : super(key: key); + + final BookData book; + + @override + Widget build(BuildContext context) { + return Container(width: 319,height: 60,decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8),color: Colors.black + ),child: Center( + child: Text('Buy Now for ${book.bookPrice}', + style: const TextStyle(color: Colors.white, + fontWeight:FontWeight.bold, + fontSize: 16),), + ),); + } +} \ No newline at end of file diff --git a/lib/book_page/book_page_buttons/book_preview_button.dart b/lib/book_page/book_page_buttons/book_preview_button.dart new file mode 100644 index 0000000..633e660 --- /dev/null +++ b/lib/book_page/book_page_buttons/book_preview_button.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; + +class PreviewButton extends StatelessWidget { + const PreviewButton({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container(height: 40,width: 152,decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8),color: Colors.white + ),child: + Row(mainAxisAlignment: MainAxisAlignment.center, + children: const [ + Icon(Icons.list_outlined),SizedBox(width: 15,), + Text('Preview',style: TextStyle(fontWeight: FontWeight.bold),) + ],), + ); + } +} \ No newline at end of file diff --git a/lib/book_page/book_page_buttons/book_reviews_button.dart b/lib/book_page/book_page_buttons/book_reviews_button.dart new file mode 100644 index 0000000..4581ad9 --- /dev/null +++ b/lib/book_page/book_page_buttons/book_reviews_button.dart @@ -0,0 +1,18 @@ +import 'package:flutter/material.dart'; + +class ReviewsButton extends StatelessWidget { + const ReviewsButton({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container(height: 40,width: 152,decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8),color: Colors.white + ),child:Row(mainAxisAlignment: MainAxisAlignment.center, + children: const [ + Icon(Icons.reviews_outlined),SizedBox(width: 15,), + Text('Reviews',style: TextStyle(fontWeight: FontWeight.bold),) + ],),); + } +} \ No newline at end of file diff --git a/lib/book_page/book_page_image/book_image.dart b/lib/book_page/book_page_image/book_image.dart new file mode 100644 index 0000000..f68b022 --- /dev/null +++ b/lib/book_page/book_page_image/book_image.dart @@ -0,0 +1,19 @@ +import 'package:flutter/material.dart'; + +import '../../home_page/books_main/books_model.dart'; + +class BookPageImage extends StatelessWidget { + const BookPageImage({ + Key? key, + required this.book, + }) : super(key: key); + + final BookData book; + + @override + Widget build(BuildContext context) { + return SizedBox(width: 216,height: 320, + child: ClipRRect(borderRadius: BorderRadius.circular(8), + child: Image.network(book.bookImage,fit: BoxFit.fill,))); + } +} \ No newline at end of file diff --git a/lib/book_page/book_page_main.dart b/lib/book_page/book_page_main.dart new file mode 100644 index 0000000..b48bd7b --- /dev/null +++ b/lib/book_page/book_page_main.dart @@ -0,0 +1,40 @@ +import 'package:flutter/material.dart'; + +import '../home_page/books_main/books_model.dart'; +import 'book_page_buttons/book_all_buttons.dart'; +import 'book_page_image/book_image.dart'; +import 'book_page_texts/book_author.dart'; +import 'book_page_texts/book_descrption.dart'; +import 'book_page_texts/book_name.dart'; +import 'book_page_texts/book_rate.dart'; + +class BookPage extends StatelessWidget { + const BookPage({Key? key, required this.book}) : super(key: key); + final BookData book; + @override + Widget build(BuildContext context){ + return MaterialApp( + home: Scaffold( + backgroundColor: const Color(0xffE5E5E5), + body: Padding( + padding: const EdgeInsets.symmetric(horizontal: 28.0), + child: Center( + child: Column( + children: [ + const SizedBox(height: 100,), + BookPageImage(book: book), + BookPageName(book: book), + BookPageAuthor(book: book), + BookPageRate(book: book), + BookPageDescription(book: book), + Align( + alignment: Alignment.bottomCenter, + child: BookPageButton(book: book),) + ], + ), + ), + ) + ) + ); + } +} \ No newline at end of file diff --git a/lib/book_page/book_page_texts/book_author.dart b/lib/book_page/book_page_texts/book_author.dart new file mode 100644 index 0000000..d7f4a1e --- /dev/null +++ b/lib/book_page/book_page_texts/book_author.dart @@ -0,0 +1,21 @@ +import 'package:flutter/cupertino.dart'; + +import '../../home_page/books_main/books_model.dart'; + +class BookPageAuthor extends StatelessWidget { + const BookPageAuthor({ + Key? key, + required this.book, + }) : super(key: key); + + final BookData book; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(top: 12.0), + child: + Text(book.bookAuthor,style: const TextStyle(fontSize:14)), + ); + } +} \ No newline at end of file diff --git a/lib/book_page/book_page_texts/book_descrption.dart b/lib/book_page/book_page_texts/book_descrption.dart new file mode 100644 index 0000000..6c7bf66 --- /dev/null +++ b/lib/book_page/book_page_texts/book_descrption.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; + +import '../../home_page/books_main/books_model.dart'; + +class BookPageDescription extends StatelessWidget { + const BookPageDescription({ + Key? key, + required this.book, + }) : super(key: key); + + final BookData book; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(top: 19.0), + child: Text(book.bookDescription,style: const TextStyle(fontSize:16,)), + ); + } +} \ No newline at end of file diff --git a/lib/book_page/book_page_texts/book_name.dart b/lib/book_page/book_page_texts/book_name.dart new file mode 100644 index 0000000..9bb0228 --- /dev/null +++ b/lib/book_page/book_page_texts/book_name.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; + +import '../../home_page/books_main/books_model.dart'; + +class BookPageName extends StatelessWidget { + const BookPageName({ + Key? key, + required this.book, + }) : super(key: key); + + final BookData book; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(top: 22.0), + child: Text(book.bookName, + style: const TextStyle(fontWeight: FontWeight.bold,fontSize:24),), + ); + } +} \ No newline at end of file diff --git a/lib/book_page/book_page_texts/book_rate.dart b/lib/book_page/book_page_texts/book_rate.dart new file mode 100644 index 0000000..0118879 --- /dev/null +++ b/lib/book_page/book_page_texts/book_rate.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import '../../home_page/books_main/books_model.dart'; +import '../../home_page/books_main/rating_widget.dart'; + +class BookPageRate extends StatelessWidget { + const BookPageRate({ + Key? key, + required this.book, + }) : super(key: key); + + final BookData book; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(top: 12.0), + child: Row(mainAxisAlignment: MainAxisAlignment.center, + children: [ + StarRating(rating: book.bookRate,), + Text(' ${book.bookRate} / 5.0', + style: const TextStyle(fontWeight: FontWeight.bold,fontSize:14)), + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/home_page/books_main/book_widgets.dart b/lib/home_page/books_main/book_widgets.dart index 8ca3778..fd21311 100644 --- a/lib/home_page/books_main/book_widgets.dart +++ b/lib/home_page/books_main/book_widgets.dart @@ -2,6 +2,8 @@ import 'package:book_store_app/home_page/books_main/rating_widget.dart'; import 'package:flutter/material.dart'; +import '../../book_page/book_page_main.dart'; +import '../../main.dart'; import 'books_model.dart'; class MyBook extends StatelessWidget{ @@ -11,35 +13,37 @@ class MyBook extends StatelessWidget{ @override Widget build(BuildContext context){ - return Padding( - padding: const EdgeInsets.all(8.0), - child: Container(height: 150, width: 21, color: Color(0xffE5E5E5), - child: Row( - children: [ClipRRect(borderRadius:BorderRadius.circular(8) , - child: Image.network(bookData.bookImage, height: 280,width: 100,)), - Padding( - padding: const EdgeInsets.only(left:20), - child: Column(crossAxisAlignment: CrossAxisAlignment.start,mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Text(bookData.bookName,style: const TextStyle( - fontSize: 18,fontWeight: FontWeight.bold + return GestureDetector(onTap: (){Navigator.push(context, MaterialPageRoute(builder: (context) => BookPage(book: bookData,)));}, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Container(height: 150, width: 21, color: Color(0xffE5E5E5), + child: Row( + children: [ClipRRect(borderRadius:BorderRadius.circular(8) , + child: Image.network(bookData.bookImage, height: 280,width: 100,)), + Padding( + padding: const EdgeInsets.only(left:20), + child: Column(crossAxisAlignment: CrossAxisAlignment.start,mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Text(bookData.bookName,style: const TextStyle( + fontSize: 18,fontWeight: FontWeight.bold + ),), + ),Text(bookData.bookAuthor,style: const TextStyle( + fontSize: 14, ),), - ),Text(bookData.bookAuthor,style: const TextStyle( - fontSize: 14, - ),), - Text(bookData.bookPrice,style: TextStyle(fontSize: 16,fontWeight: FontWeight.bold),), - Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: StarRating(rating: bookData.bookRate,), - ) - ],), - ), - ], - ),), + Text(bookData.bookPrice,style: TextStyle(fontSize: 16,fontWeight: FontWeight.bold),), + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: StarRating(rating: bookData.bookRate,), + ) + ],), + ), + ], + ),), + ), ); } } diff --git a/lib/home_page/books_main/books_list_bulder.dart b/lib/home_page/books_main/books_list_bulder.dart index 5ecefe3..434d36a 100644 --- a/lib/home_page/books_main/books_list_bulder.dart +++ b/lib/home_page/books_main/books_list_bulder.dart @@ -10,6 +10,9 @@ class MyBooksCard extends StatelessWidget { @override Widget build(BuildContext context) { - return Expanded(child: ListView(children: BookData.books.map((e) => MyBook(bookData: e)).toList(),)); + return Expanded(child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: ListView(children: BookData.books.map((e) => MyBook(bookData: e)).toList(),), + )); } } \ No newline at end of file diff --git a/lib/home_page/books_main/books_model.dart b/lib/home_page/books_main/books_model.dart index c741ca1..7229c5b 100644 --- a/lib/home_page/books_main/books_model.dart +++ b/lib/home_page/books_main/books_model.dart @@ -20,31 +20,31 @@ class BookData{ bookAuthor: 'bookAuthor', bookDescription: 'bookDescription', bookRate: 3.5, - bookImage: 'https://api.lorem.space/image/book?w=150&h=220', - bookPrice: '19 \$'), + bookImage: 'https://api.lorem.space/image/book?w=150&h=220&hash=B0E33EF4', + bookPrice: '\$ 15'), BookData(bookName: 'bookName', bookAuthor: 'bookAuthor', bookDescription: 'bookDescription', bookRate: 5, - bookImage: 'https://api.lorem.space/image/book?w=150&h=220', - bookPrice: '15 \$'), + bookImage: 'https://api.lorem.space/image/book?w=150&h=220&hash=2D297A22', + bookPrice: '\$ 15'), BookData(bookName: 'bookName', bookAuthor: 'bookAuthor', bookDescription: 'bookDescription', bookRate: 5, - bookImage: 'https://api.lorem.space/image/book?w=150&h=220', - bookPrice: '15 \$'), + bookImage: 'https://api.lorem.space/image/book?w=150&h=220&hash=8B7BCDC2', + bookPrice: '\$ 15'), BookData(bookName: 'bookName', bookAuthor: 'bookAuthor', bookDescription: 'bookDescription', - bookRate: 5, - bookImage: 'https://api.lorem.space/image/book?w=150&h=220', - bookPrice: '15 \$'), + bookRate: 1.5, + bookImage: 'https://api.lorem.space/image/book?w=150&h=220&hash=A89D0DE6', + bookPrice: '\$ 15'), BookData(bookName: 'bookName', bookAuthor: 'bookAuthor', - bookDescription: 'bookDescription', + bookDescription: 'kmoeiwmfomewomewocmwmecome\noimcoiewmciomweocmokewmciomewiocmewoimcioewmciomewiocmoiewmciomewiocmeiowmcioemwciomewiocmeowmcioewmcioewmoicmewoimcoeiwmcoiewmcoimewoicmewoicm', bookRate: 5, - bookImage: 'https://api.lorem.space/image/book?w=150&h=220', - bookPrice: '15 \$') + bookImage: 'https://api.lorem.space/image/book?w=150&h=220&hash=BDC01094', + bookPrice: '\$ 15') ]; } diff --git a/lib/main.dart b/lib/main.dart index da0086d..212f275 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,5 @@ -import 'package:flutter/material.dart'; +import 'package:flutter/material.dart'; import 'home_page/books_main/books_list_bulder.dart'; import 'home_page/my_app_bar/app_bar_footer.dart'; import 'home_page/my_app_bar/search_bar.dart'; @@ -23,7 +23,8 @@ class MyApp extends StatelessWidget { child: Row( children: const [ SizedBox(width: 10,), - UserImage(),SizedBox(width: 10,), + UserImage(), + SizedBox(width: 10,), UserName(), SizedBox(width: 240,), Icon(Icons.more_vert_sharp) @@ -59,6 +60,24 @@ class MyApp extends StatelessWidget { + + + + + + + + + + + + + + + + + + From 0928654a4ac3e8745dfc7aac0466851a38e85db7 Mon Sep 17 00:00:00 2001 From: Al-Qasim Mahmood <104140247+KasmThio@users.noreply.github.com> Date: Fri, 2 Sep 2022 03:10:15 +0300 Subject: [PATCH 3/3] TaskDone --- lib/add_page/add_butoon.dart | 53 ++++ lib/add_page/add_page_main.dart | 59 +++++ lib/add_page/my_text_fields.dart | 235 ++++++++++++++++++ .../book_page_buttons/book_buy_button.dart | 18 +- lib/book_page/book_page_main.dart | 5 +- lib/cart_page/cart_main.dart | 51 ++++ lib/home_page/books_main/book_widgets.dart | 11 +- .../books_main/books_list_bulder.dart | 10 +- lib/home_page/books_main/books_model.dart | 33 ++- lib/home_page/my_app_bar/search_bar.dart | 21 +- lib/home_page/my_app_bar/user_widget.dart | 8 +- .../navigation_bar/navigation_bar_data.dart | 17 ++ .../navigation_bar/navigation_bar_main.dart | 30 +++ .../navigation_bar/navigation_bar_widget.dart | 17 ++ lib/main.dart | 72 ++++-- pubspec.lock | 7 + pubspec.yaml | 1 + 17 files changed, 598 insertions(+), 50 deletions(-) create mode 100644 lib/add_page/add_butoon.dart create mode 100644 lib/add_page/add_page_main.dart create mode 100644 lib/add_page/my_text_fields.dart create mode 100644 lib/cart_page/cart_main.dart create mode 100644 lib/home_page/navigation_bar/navigation_bar_data.dart create mode 100644 lib/home_page/navigation_bar/navigation_bar_main.dart create mode 100644 lib/home_page/navigation_bar/navigation_bar_widget.dart diff --git a/lib/add_page/add_butoon.dart b/lib/add_page/add_butoon.dart new file mode 100644 index 0000000..6bf1737 --- /dev/null +++ b/lib/add_page/add_butoon.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; + +import '../home_page/books_main/books_model.dart'; + +class AddBookButton extends StatelessWidget { + const AddBookButton({ + Key? key, + required this.nameController, + required this.authorController, + required this.priceController, + required this.rateController, + required this.imageController, + required this.descriptionController, + }) : super(key: key); + + final TextEditingController nameController; + final TextEditingController authorController; + final TextEditingController priceController; + final TextEditingController rateController; + final TextEditingController imageController; + final TextEditingController descriptionController; + + @override + Widget build(BuildContext context) { + return Center( + child: GestureDetector(onTap:(){BookData.add( + nameController.text, + authorController.text, + priceController.text, + double.parse(rateController.text), + imageController.text, + descriptionController.text); + + nameController.clear(); + authorController.clear(); + priceController.clear(); + rateController.clear(); + imageController.clear(); + descriptionController.clear();} , + child: Container(width: 319,height: 60, + margin: EdgeInsets.only(top: 20), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8),color: Colors.black + ),child: const Center( + child: Text('Add Book', + style: TextStyle(color: Colors.white, + fontWeight:FontWeight.bold, + fontSize: 16),), + ),), + ), + ); + } +} \ No newline at end of file diff --git a/lib/add_page/add_page_main.dart b/lib/add_page/add_page_main.dart new file mode 100644 index 0000000..66f72bd --- /dev/null +++ b/lib/add_page/add_page_main.dart @@ -0,0 +1,59 @@ +import 'package:flutter/material.dart'; + +import '../home_page/books_main/books_model.dart'; +import 'add_butoon.dart'; +import 'my_text_fields.dart'; + +class AddPage extends StatelessWidget { + AddPage({Key? key,}) : super(key: key); + + TextEditingController nameController = TextEditingController(); + TextEditingController authorController = TextEditingController(); + TextEditingController priceController = TextEditingController(); + TextEditingController rateController = TextEditingController(); + TextEditingController imageController = TextEditingController(); + TextEditingController descriptionController = TextEditingController(); + BookData? bookData; + + @override + Widget build(BuildContext context){ + return MaterialApp( + home: Scaffold( + appBar: AppBar( + backgroundColor: Colors.white.withOpacity(0.1), + elevation: 0, + leading: IconButton(onPressed: (){Navigator.pop(context);}, + icon:const Icon(Icons.arrow_back_ios_new_sharp, + color: Colors.black, size: 25,),), + actions: const [ + Icon(Icons.more_vert_sharp, color: Colors.black, size: 25,) + ], + ), + body: ListView( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 50), + child: Column(crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('Add Book',style: TextStyle(fontSize: + 24,fontWeight: FontWeight.bold),), + AddNameField(nameController: nameController), + AddAuthorField(authorController: authorController), + AddPriceField(priceController: priceController), + AddRatingField(rateController: rateController), + AddImageField(imageController: imageController), + AddDescriptionField(descriptionController: descriptionController), + AddBookButton(nameController: nameController, + authorController: authorController, + priceController: priceController, + rateController: rateController, + imageController: imageController, + descriptionController: descriptionController) + ], + ), + ), + ], + ), + ), + ); + }} \ No newline at end of file diff --git a/lib/add_page/my_text_fields.dart b/lib/add_page/my_text_fields.dart new file mode 100644 index 0000000..c0aca15 --- /dev/null +++ b/lib/add_page/my_text_fields.dart @@ -0,0 +1,235 @@ + + +import 'package:flutter/material.dart'; + +class AddNameField extends StatelessWidget { + const AddNameField({ + Key? key, + required this.nameController, + }) : super(key: key); + + final TextEditingController nameController; + + @override + Widget build(BuildContext context) { + return Container(height: 60, + margin: const EdgeInsets.only(top: 40, left: 20, right: 20), + padding: EdgeInsets.symmetric(horizontal: 15), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(196,135,198,.2), + blurRadius: 10, + offset: Offset(0,.1), + ) + ] + ), + child: Center( + child: TextField( + controller: nameController, + decoration: const InputDecoration( + border: InputBorder.none, + hintText: "Book Name", + hintStyle: TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: Colors.grey) + ), + ), + ) + ); + } +} + + +class AddAuthorField extends StatelessWidget { + const AddAuthorField({ + Key? key, + required this.authorController, + }) : super(key: key); + + final TextEditingController authorController; + + @override + Widget build(BuildContext context) { + return Container(height: 60, + margin: const EdgeInsets.only(top: 40, left: 20, right: 20), + padding: EdgeInsets.symmetric(horizontal: 15), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(196,135,198,.2), + blurRadius: 10, + offset: Offset(0,.1), + ) + ] + ), + child: Center( + child: TextField( + controller: authorController, + decoration: const InputDecoration( + border: InputBorder.none, + hintText: "Author Name", + hintStyle: TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: Colors.grey) + ), + ), + ) + ); + } +} + + +class AddPriceField extends StatelessWidget { + const AddPriceField({ + Key? key, + required this.priceController, + }) : super(key: key); + + final TextEditingController priceController; + + @override + Widget build(BuildContext context) { + return Container(height: 60, + margin: const EdgeInsets.only(top: 40, left: 20, right: 20), + padding: EdgeInsets.symmetric(horizontal: 15), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(196,135,198,.2), + blurRadius: 10, + offset: Offset(0,.1), + ) + ] + ), + child: Center( + child: TextField( + controller: priceController, + decoration: const InputDecoration( + border: InputBorder.none, + hintText: "Price", + hintStyle: TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: Colors.grey) + ), + ), + ) + ); + } +} + + +class AddRatingField extends StatelessWidget { + const AddRatingField({ + Key? key, + required this.rateController, + }) : super(key: key); + + final TextEditingController rateController; + + @override + Widget build(BuildContext context) { + return Container(height: 60, + margin: const EdgeInsets.only(top: 40, left: 20, right: 20), + padding: EdgeInsets.symmetric(horizontal: 15), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(196,135,198,.2), + blurRadius: 10, + offset: Offset(0,.1), + ) + ] + ), + child: Center( + child: TextField( + controller: rateController, + decoration: const InputDecoration( + border: InputBorder.none, + hintText: "Rating", + hintStyle: TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: Colors.grey) + ), + ), + ) + ); + } +} + + +class AddImageField extends StatelessWidget { + const AddImageField({ + Key? key, + required this.imageController, + }) : super(key: key); + + final TextEditingController imageController; + + @override + Widget build(BuildContext context) { + return Container(height: 60, + margin: const EdgeInsets.only(top: 40, left: 20, right: 20), + padding: EdgeInsets.symmetric(horizontal: 15), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(196,135,198,.2), + blurRadius: 10, + offset: Offset(0,.1), + ) + ] + ), + child: Center( + child: TextField( + controller: imageController, + decoration: const InputDecoration( + border: InputBorder.none, + hintText: "Image link", + hintStyle: TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: Colors.grey) + ), + ), + ) + ); + } +} + + +class AddDescriptionField extends StatelessWidget { + const AddDescriptionField({ + Key? key, + required this.descriptionController, + }) : super(key: key); + + final TextEditingController descriptionController; + + @override + Widget build(BuildContext context) { + return Container(height: 100, + margin: const EdgeInsets.only(top: 40, left: 20, right: 20), + padding: EdgeInsets.symmetric(horizontal: 15), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(196,135,198,.2), + blurRadius: 10, + offset: Offset(0,.1), + ) + ] + ), + child: TextField( + controller: descriptionController, + decoration: const InputDecoration( + border: InputBorder.none, + hintText: "Description", + hintStyle: TextStyle(fontSize: 17, + fontWeight: FontWeight.w500, color: Colors.grey) + ), + ) + ); + } +} \ No newline at end of file diff --git a/lib/book_page/book_page_buttons/book_buy_button.dart b/lib/book_page/book_page_buttons/book_buy_button.dart index 987d178..ea269ec 100644 --- a/lib/book_page/book_page_buttons/book_buy_button.dart +++ b/lib/book_page/book_page_buttons/book_buy_button.dart @@ -12,13 +12,15 @@ class BuyButton extends StatelessWidget { @override Widget build(BuildContext context) { - return Container(width: 319,height: 60,decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8),color: Colors.black - ),child: Center( - child: Text('Buy Now for ${book.bookPrice}', - style: const TextStyle(color: Colors.white, - fontWeight:FontWeight.bold, - fontSize: 16),), - ),); + return GestureDetector(onTap: (){book.isInCart();}, + child: Container(width: 319,height: 60,decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8),color: Colors.black + ),child: Center( + child: Text('Buy Now for ${book.bookPrice}', + style: const TextStyle(color: Colors.white, + fontWeight:FontWeight.bold, + fontSize: 16),), + ),), + ); } } \ No newline at end of file diff --git a/lib/book_page/book_page_main.dart b/lib/book_page/book_page_main.dart index b48bd7b..1c23276 100644 --- a/lib/book_page/book_page_main.dart +++ b/lib/book_page/book_page_main.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; - +import 'package:get/get_state_manager/get_state_manager.dart'; import '../home_page/books_main/books_model.dart'; import 'book_page_buttons/book_all_buttons.dart'; import 'book_page_image/book_image.dart'; @@ -8,9 +8,10 @@ import 'book_page_texts/book_descrption.dart'; import 'book_page_texts/book_name.dart'; import 'book_page_texts/book_rate.dart'; -class BookPage extends StatelessWidget { +class BookPage extends GetView { const BookPage({Key? key, required this.book}) : super(key: key); final BookData book; + @override Widget build(BuildContext context){ return MaterialApp( diff --git a/lib/cart_page/cart_main.dart b/lib/cart_page/cart_main.dart new file mode 100644 index 0000000..94fbd08 --- /dev/null +++ b/lib/cart_page/cart_main.dart @@ -0,0 +1,51 @@ +import 'package:book_store_app/home_page/books_main/books_model.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart'; + +import '../home_page/books_main/book_widgets.dart'; +import '../home_page/navigation_bar/navigation_bar_main.dart'; + +class MyCartCard extends StatelessWidget { + const MyCartCard({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return + Scaffold( + + appBar: AppBar( + backgroundColor: Colors.white.withOpacity(0.1), + elevation: 0, + leading: IconButton(onPressed: (){Navigator.pop(context);}, + icon:const Icon(Icons.arrow_back_ios_new_sharp, + color: Colors.black, size: 25,),), + actions: const [ + Icon(Icons.more_vert_sharp, color: Colors.black, size: 25,) + ], + ), + + body: Scaffold( + backgroundColor: const Color(0xffFDFDFD), + body: Column(crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Padding( + padding: EdgeInsets.only(left: 30.0), + child: Text('Cart',style: TextStyle(fontSize: + 24,fontWeight: FontWeight.bold),), + ), + Expanded(child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: Obx(() + {return ListView(children: BookData.books.where((e) =>e.inCart.value) + .map((e) => MyBook(bookData: e)).toList(),);}), + )), + const Align(alignment: Alignment.bottomCenter,child: Padding( + padding: EdgeInsets.only(bottom: 42.0), + child:MyNavigationBar()))] + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/home_page/books_main/book_widgets.dart b/lib/home_page/books_main/book_widgets.dart index fd21311..bb47bdf 100644 --- a/lib/home_page/books_main/book_widgets.dart +++ b/lib/home_page/books_main/book_widgets.dart @@ -13,16 +13,18 @@ class MyBook extends StatelessWidget{ @override Widget build(BuildContext context){ - return GestureDetector(onTap: (){Navigator.push(context, MaterialPageRoute(builder: (context) => BookPage(book: bookData,)));}, + return GestureDetector(onTap: () + {Navigator.push(context, MaterialPageRoute(builder: (context) => BookPage(book: bookData,)));}, child: Padding( padding: const EdgeInsets.all(8.0), - child: Container(height: 150, width: 21, color: Color(0xffE5E5E5), + child: Container(height: 150, width: 21, color: Color(0xffFDFDFD), child: Row( children: [ClipRRect(borderRadius:BorderRadius.circular(8) , child: Image.network(bookData.bookImage, height: 280,width: 100,)), Padding( padding: const EdgeInsets.only(left:20), - child: Column(crossAxisAlignment: CrossAxisAlignment.start,mainAxisAlignment: MainAxisAlignment.spaceEvenly, + child: Column(crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Padding( padding: const EdgeInsets.only(top: 8.0), @@ -34,7 +36,8 @@ class MyBook extends StatelessWidget{ fontSize: 14, ),), - Text(bookData.bookPrice,style: TextStyle(fontSize: 16,fontWeight: FontWeight.bold),), + Text(bookData.bookPrice,style: TextStyle( + fontSize: 16,fontWeight: FontWeight.bold),), Padding( padding: const EdgeInsets.only(bottom: 8.0), child: StarRating(rating: bookData.bookRate,), diff --git a/lib/home_page/books_main/books_list_bulder.dart b/lib/home_page/books_main/books_list_bulder.dart index 434d36a..5b06a57 100644 --- a/lib/home_page/books_main/books_list_bulder.dart +++ b/lib/home_page/books_main/books_list_bulder.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:get/get_state_manager/get_state_manager.dart'; +import '../navigation_bar/navigation_bar_main.dart'; import 'book_widgets.dart'; import 'books_model.dart'; @@ -12,7 +14,11 @@ class MyBooksCard extends StatelessWidget { Widget build(BuildContext context) { return Expanded(child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), - child: ListView(children: BookData.books.map((e) => MyBook(bookData: e)).toList(),), + child: Obx(() + {return ListView(children: BookData.books + .map((e) => MyBook(bookData: e)).toList(),);}), )); } -} \ No newline at end of file +} + + diff --git a/lib/home_page/books_main/books_model.dart b/lib/home_page/books_main/books_model.dart index 7229c5b..7305129 100644 --- a/lib/home_page/books_main/books_model.dart +++ b/lib/home_page/books_main/books_model.dart @@ -1,3 +1,5 @@ +import 'package:get/get.dart'; + class BookData{ final String bookName; final double bookRate; @@ -5,17 +7,38 @@ class BookData{ final String bookDescription; final String bookImage; final String bookPrice; + final RxBool inCart = false.obs; BookData({ - required this.bookPrice, required this.bookName, required this.bookAuthor, - required this.bookDescription, + required this.bookPrice, required this.bookRate, - required this.bookImage + required this.bookImage, + required this.bookDescription, }); - static List books = [ + isInCart(){ + inCart.value = true; + } + static add( + String name, + String author, + String price, + double rate, + String link, + String description + ){ + books.add(BookData(bookName: name, + bookAuthor: author, + bookPrice: price, + bookRate: rate, + bookImage: link, + bookDescription: description)); + } + + + static RxList books = [ BookData(bookName: 'bookName', bookAuthor: 'bookAuthor', bookDescription: 'bookDescription', @@ -46,5 +69,5 @@ class BookData{ bookRate: 5, bookImage: 'https://api.lorem.space/image/book?w=150&h=220&hash=BDC01094', bookPrice: '\$ 15') - ]; + ].obs; } diff --git a/lib/home_page/my_app_bar/search_bar.dart b/lib/home_page/my_app_bar/search_bar.dart index 8f2dcbf..538683e 100644 --- a/lib/home_page/my_app_bar/search_bar.dart +++ b/lib/home_page/my_app_bar/search_bar.dart @@ -13,13 +13,22 @@ class MySearchBar extends StatelessWidget { children: [ Container(height: 50,width: 370,alignment: Alignment.center, decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8),color: const Color(0xffFFFFFF)),child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: const [ - Padding( - padding: EdgeInsets.only(left: 10.0), - child: Text('Search...'), + borderRadius: BorderRadius.circular(8), + boxShadow: const [ + BoxShadow( + color: Color.fromRGBO(196,135,198,.2), + blurRadius: 10, + offset: Offset(0,.1), + ) + ], + color: const Color(0xffFFFFFF)), + child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: const [ + Padding( + padding: EdgeInsets.only(left: 10.0), + child: Text('Search...'), - ), Padding( + ), Padding( padding: EdgeInsets.only(right: 10.0), child: Icon(Icons.search), ) diff --git a/lib/home_page/my_app_bar/user_widget.dart b/lib/home_page/my_app_bar/user_widget.dart index ccb673e..5f993ae 100644 --- a/lib/home_page/my_app_bar/user_widget.dart +++ b/lib/home_page/my_app_bar/user_widget.dart @@ -7,7 +7,7 @@ class UserName extends StatelessWidget { @override Widget build(BuildContext context) { - return Text('Hi, Kasm',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 18),); + return const Text('Hi, Kasm',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 18),); } } @@ -18,7 +18,9 @@ class UserImage extends StatelessWidget { @override Widget build(BuildContext context) { - return Container(width: 50,height: 50,decoration: - BoxDecoration(borderRadius: BorderRadius.circular(10),color: Colors.red),); + return ClipRRect(borderRadius: BorderRadius.circular(8), + child: Image.network('https://api.lorem.space/image/face?w=150&h=150', + height: 50,width: 50,), + ); } } \ No newline at end of file diff --git a/lib/home_page/navigation_bar/navigation_bar_data.dart b/lib/home_page/navigation_bar/navigation_bar_data.dart new file mode 100644 index 0000000..4b2edb8 --- /dev/null +++ b/lib/home_page/navigation_bar/navigation_bar_data.dart @@ -0,0 +1,17 @@ +import 'package:book_store_app/home_page/books_main/books_list_bulder.dart'; +import 'package:book_store_app/main.dart'; +import 'package:flutter/material.dart'; +import '../../add_page/add_page_main.dart'; +import '../../cart_page/cart_main.dart'; + +class TabData{ + final IconData icon; + final Widget page; + TabData({required this.page, required this.icon}); + + static List buttons = [ + TabData(icon: Icons.home_outlined, page: MyApp()), + TabData(icon: Icons.shopping_cart_outlined, page: MyCartCard()), + TabData(icon: Icons.add, page: AddPage()), + ]; +} \ No newline at end of file diff --git a/lib/home_page/navigation_bar/navigation_bar_main.dart b/lib/home_page/navigation_bar/navigation_bar_main.dart new file mode 100644 index 0000000..d11de74 --- /dev/null +++ b/lib/home_page/navigation_bar/navigation_bar_main.dart @@ -0,0 +1,30 @@ +import 'package:book_store_app/main.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'navigation_bar_data.dart'; +import 'navigation_bar_widget.dart'; + +class MyNavigationBar extends StatelessWidget { + const MyNavigationBar({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + width: 227, + height: 72, + decoration: + BoxDecoration( + borderRadius: + BorderRadius.circular(20), + color: Color(0xffffffff) + ),child: Padding( + padding: const EdgeInsets.only(top: 25), + child: Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: TabData.buttons.map((e) => GestureDetector(onTap: (){ + Navigator.push(context, MaterialPageRoute(builder: (context)=> e.page)); + },child: MyTab(data: e,))).toList(),)), + ); + } +} \ No newline at end of file diff --git a/lib/home_page/navigation_bar/navigation_bar_widget.dart b/lib/home_page/navigation_bar/navigation_bar_widget.dart new file mode 100644 index 0000000..6541509 --- /dev/null +++ b/lib/home_page/navigation_bar/navigation_bar_widget.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; +import 'navigation_bar_data.dart'; + +class MyTab extends StatelessWidget{ + const MyTab({Key? key, required this.data}) : super(key: key); + final TabData data; + + @override + Widget build(BuildContext context){ + return Column( + children: [ + Icon(data.icon, + color: Colors.black,size: 28,) + ], + ); + } +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 212f275..91745ea 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,6 +4,7 @@ import 'home_page/books_main/books_list_bulder.dart'; import 'home_page/my_app_bar/app_bar_footer.dart'; import 'home_page/my_app_bar/search_bar.dart'; import 'home_page/my_app_bar/user_widget.dart'; +import 'home_page/navigation_bar/navigation_bar_main.dart'; void main() { runApp(const MyApp()); @@ -16,26 +17,35 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( home: Scaffold( - backgroundColor: const Color(0xffE5E5E5), - body:PageView( children:[Column( - children: [Padding( - padding: const EdgeInsets.only(top: 50), - child: Row( - children: const [ - SizedBox(width: 10,), - UserImage(), - SizedBox(width: 10,), - UserName(), - SizedBox(width: 240,), - Icon(Icons.more_vert_sharp) - ],), - ),const MySearchBar(), - const SizedBox(height: 30,), - const BookListText(), - const SizedBox(height: 10,), - const MyBooksCard(), - ], - ) ]), + backgroundColor: const Color(0xffFDFDFD), + body:Stack( + children:[ + Column( + children: [ + Padding( + padding: const EdgeInsets.only(top: 50), + child: Row( + children: const [ + SizedBox(width: 10,), + UserImage(), + SizedBox(width: 10,), + UserName(), + SizedBox(width: 240,), + Icon(Icons.more_vert_sharp) + ],), + ), + const MySearchBar(), + const SizedBox(height: 30,), + const BookListText(), + const SizedBox(height: 10,), + const MyBooksCard(), + ], + ),const Align(alignment: Alignment.bottomCenter,child: Padding( + padding: EdgeInsets.only(bottom: 42.0), + child:MyNavigationBar() + ), + )] + ), ), ); } @@ -68,6 +78,28 @@ class MyApp extends StatelessWidget { + + + + + + + + + + + + + + + + + + + + + + diff --git a/pubspec.lock b/pubspec.lock index 7bc8bdd..62f34da 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -74,6 +74,13 @@ packages: 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: diff --git a/pubspec.yaml b/pubspec.yaml index cd0f457..ae7cbfd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -34,6 +34,7 @@ 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 + get: ^4.6.5 dev_dependencies: flutter_test: