From f5737015f9c44f5090d5e6bb536dcc4cacaac941 Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Tue, 30 Aug 2022 00:07:41 +0300 Subject: [PATCH 01/12] first --- .vscode/settings.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..0db5873 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "cmake.configureOnOpen": true +} \ No newline at end of file From a61a6f3848a9045dc6d76cf128aecae3844548af Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Tue, 30 Aug 2022 00:18:25 +0300 Subject: [PATCH 02/12] Half way there --- lib/book_details_page/book_details_page.dart | 50 +++++++++ lib/book_details_views/book_author.dart | 20 ++++ lib/book_details_views/book_cover.dart | 24 ++++ lib/book_details_views/book_description.dart | 29 +++++ lib/book_details_views/book_rating.dart | 23 ++++ lib/book_details_views/book_title.dart | 16 +++ lib/book_details_views/bottom_buttons.dart | 110 +++++++++++++++++++ lib/book_details_views/top_bar.dart | 34 ++++++ lib/main.dart | 66 ++++++++++- lib/main_views/listed_books.dart | 43 ++++++++ lib/main_views/navigators.dart | 53 +++++++++ lib/main_views/profile.dart | 46 ++++++++ lib/main_views/search_box.dart | 64 +++++++++++ lib/models/book_model.dart | 88 +++++++++++++++ lib/tempCodeRunnerFile.dart | 0 pubspec.lock | 7 ++ pubspec.yaml | 3 +- 17 files changed, 671 insertions(+), 5 deletions(-) create mode 100644 lib/book_details_page/book_details_page.dart create mode 100644 lib/book_details_views/book_author.dart create mode 100644 lib/book_details_views/book_cover.dart create mode 100644 lib/book_details_views/book_description.dart create mode 100644 lib/book_details_views/book_rating.dart create mode 100644 lib/book_details_views/book_title.dart create mode 100644 lib/book_details_views/bottom_buttons.dart create mode 100644 lib/book_details_views/top_bar.dart create mode 100644 lib/main_views/listed_books.dart create mode 100644 lib/main_views/navigators.dart create mode 100644 lib/main_views/profile.dart create mode 100644 lib/main_views/search_box.dart create mode 100644 lib/models/book_model.dart create mode 100644 lib/tempCodeRunnerFile.dart diff --git a/lib/book_details_page/book_details_page.dart b/lib/book_details_page/book_details_page.dart new file mode 100644 index 0000000..bc1a905 --- /dev/null +++ b/lib/book_details_page/book_details_page.dart @@ -0,0 +1,50 @@ +import 'package:book_store_app/book_details_views/book_author.dart'; +import 'package:book_store_app/book_details_views/book_cover.dart'; +import 'package:book_store_app/book_details_views/book_description.dart'; +import 'package:book_store_app/book_details_views/book_rating.dart'; +import 'package:book_store_app/book_details_views/book_title.dart'; +import 'package:book_store_app/book_details_views/bottom_buttons.dart'; +import 'package:book_store_app/book_details_views/top_bar.dart'; +import 'package:book_store_app/main.dart'; +import 'package:book_store_app/main_views/profile.dart'; +import 'package:book_store_app/models/book_model.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class BookDetailsPage extends StatefulWidget { + const BookDetailsPage({Key? key}) : super(key: key); + + @override + State createState() => _BookDetailsPageState(); +} + +class _BookDetailsPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + // appBar: AppBar( + // systemOverlayStyle: const SystemUiOverlayStyle( + // statusBarColor: Colors.transparent, + // statusBarIconBrightness: Brightness.dark), + // backgroundColor: const Color(0xfff0f0f0), + // elevation: 0, + // toolbarHeight: 30, + // ), + body: Column( + children: [ + const TopBar(), + Column( + children: [ + BookCover(url: BookModel.book[0].imageUrl), + BookTitle(title: BookModel.book[0].title), + BookAuthor(author: BookModel.book[0].author,), + SizedBox(height: 5,), + BookRating(rating: BookModel.book[0].rating,), + BookDescription(description: BookModel.book[0].description,), + ], + ) + ], + ), + floatingActionButton: bottom_buttons()); + } +} diff --git a/lib/book_details_views/book_author.dart b/lib/book_details_views/book_author.dart new file mode 100644 index 0000000..e3b2b5b --- /dev/null +++ b/lib/book_details_views/book_author.dart @@ -0,0 +1,20 @@ + +import 'package:flutter/material.dart'; + +class BookAuthor extends StatelessWidget { + const BookAuthor({ + Key? key, + required this.author, + }) : super(key: key); + final String author; + @override + Widget build(BuildContext context) { + return Text(author, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + height: 1, + color: Colors.grey, + )); + } +} diff --git a/lib/book_details_views/book_cover.dart b/lib/book_details_views/book_cover.dart new file mode 100644 index 0000000..2cca017 --- /dev/null +++ b/lib/book_details_views/book_cover.dart @@ -0,0 +1,24 @@ + +import 'package:flutter/material.dart'; + +class BookCover extends StatelessWidget { + const BookCover({ + Key? key, + required this.url, + }) : super(key: key); + final String url; + @override + Widget build(BuildContext context) { + return Container( + height: 300, + width: 220, + decoration: BoxDecoration( + image: DecorationImage( + image: NetworkImage(url), + alignment: Alignment.topCenter, + fit: BoxFit.cover, + ), + borderRadius: BorderRadius.circular(7)), + ); + } +} \ No newline at end of file diff --git a/lib/book_details_views/book_description.dart b/lib/book_details_views/book_description.dart new file mode 100644 index 0000000..23cfd4d --- /dev/null +++ b/lib/book_details_views/book_description.dart @@ -0,0 +1,29 @@ + +import 'package:flutter/material.dart'; + +class BookDescription extends StatelessWidget { + const BookDescription({ + Key? key, + required this.description, + }) : super(key: key); + final String description; + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(left: 10, right: 10, top: 2), + child: SingleChildScrollView( + scrollDirection: Axis.vertical, + padding: EdgeInsets.only(bottom: 100), + child: SizedBox( + width: 400, + height: 100, + child: Text( + description, + style: + TextStyle(fontSize: 15, color: Colors.grey[700], height: 1.4), + ), + ), + ), + ); + } +} diff --git a/lib/book_details_views/book_rating.dart b/lib/book_details_views/book_rating.dart new file mode 100644 index 0000000..03af5d3 --- /dev/null +++ b/lib/book_details_views/book_rating.dart @@ -0,0 +1,23 @@ + +import 'package:book_store_app/models/book_model.dart'; +import 'package:flutter/material.dart'; + +class BookRating extends StatelessWidget { + const BookRating({ + Key? key, + required this.rating, + }) : super(key: key); + final double rating; + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + StarDisplay( + value: rating, + ), + Text(" " + rating.toString() + "/5") + ], + ); + } +} diff --git a/lib/book_details_views/book_title.dart b/lib/book_details_views/book_title.dart new file mode 100644 index 0000000..46d2019 --- /dev/null +++ b/lib/book_details_views/book_title.dart @@ -0,0 +1,16 @@ + +import 'package:flutter/material.dart'; + +class BookTitle extends StatelessWidget { + const BookTitle({ + Key? key, required this.title, + }) : super(key: key); + final String title; + @override + Widget build(BuildContext context) { + return Text(title, + style: const TextStyle( + fontSize: 30, fontWeight: FontWeight.bold, height: 2)); + } +} + diff --git a/lib/book_details_views/bottom_buttons.dart b/lib/book_details_views/bottom_buttons.dart new file mode 100644 index 0000000..56ff828 --- /dev/null +++ b/lib/book_details_views/bottom_buttons.dart @@ -0,0 +1,110 @@ + +import 'package:book_store_app/models/book_model.dart'; +import 'package:flutter/material.dart'; +//import 'package:google_fonts/google_fonts.dart'; +class bottom_buttons extends StatelessWidget { + const bottom_buttons({ + Key? key, + }) : super(key: key); + static String price = BookModel.book[1].price; + @override + Widget build(BuildContext context) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Padding( + padding: EdgeInsets.only(bottom: 20, left: 25), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Spacer( + flex: 2, + ), + Container( + width: 150, + height: 45, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(13), + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + spreadRadius: 1, + blurRadius: 4, + offset: const Offset(0, 9)) + ]), + child: TextButton( + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), + )), + child: Icon(Icons.preview, color: Colors.black54), + onPressed: () => print('object'), + ), + ), + const Spacer( + flex: 1, + ), + Container( + width: 150, + height: 45, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(13), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + spreadRadius: 1, + blurRadius: 4, + offset: const Offset(0, 9)) + ]), + child: TextButton( + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), + )), + child: Icon(Icons.reviews, color: Colors.black54), + onPressed: () => print('object'), + ), + ), + const Spacer( + flex: 2, + ) + ], + ), + ), + Padding( + padding: const EdgeInsets.only(right: 5), + child: Container( + width: 350, + height: 70, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(13), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + spreadRadius: 1, + blurRadius: 4, + offset: const Offset(0, 9)) + ]), + child: TextButton( + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), + )), + child: Text( + "Buy now for $price\$", + style: TextStyle(fontSize: 17, fontWeight: FontWeight.w400, color: Colors.white) + ), + onPressed: () => print('object'), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/book_details_views/top_bar.dart b/lib/book_details_views/top_bar.dart new file mode 100644 index 0000000..e0496c4 --- /dev/null +++ b/lib/book_details_views/top_bar.dart @@ -0,0 +1,34 @@ +import 'package:book_store_app/main.dart'; +import 'package:flutter/material.dart'; + +class TopBar extends StatelessWidget { + const TopBar({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.only(bottom: 20, top: 70, left: 5, right: 20), + child: Row( + children: [ + TextButton( + onPressed: () => Navigator.push(context, + MaterialPageRoute(builder: (context) => const MyHomePage())), + child: const Icon( + Icons.arrow_back_ios_new_rounded, + color: Colors.black, + ) + ), + Spacer(), + TextButton( + onPressed: () => print('hi'), + child: const Icon( + Icons.more_vert, + color: Colors.black, + )) + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index bcc58f7..ab05dfb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,10 @@ +import 'package:book_store_app/main_views/listed_books.dart'; +import 'package:book_store_app/main_views/navigators.dart'; +import 'package:book_store_app/main_views/profile.dart'; +import 'package:book_store_app/main_views/search_box.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:get/get.dart'; void main() { runApp(const MyApp()); @@ -6,15 +12,67 @@ void main() { class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: MyHomePage()); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key}) : super(key: key); + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { @override Widget build(BuildContext context) { - return const MaterialApp( - home: Scaffold( - body: Center( - child: Text("Book Store App"), + return Scaffold( + // appBar: AppBar( + // systemOverlayStyle: const SystemUiOverlayStyle( + // statusBarColor: Colors.transparent, + // statusBarIconBrightness: Brightness.dark), + // backgroundColor: const Color(0xfff0f0f0), + // elevation: 0, + // toolbarHeight: 30, + // ), + body: Container( + color: Colors.grey[100], + child: GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Padding( + padding: const EdgeInsets.only(top: 20, left: 20, right: 20), + child: + Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + const SizedBox(height: 50), + const Profile(), + const SearchBox(/*currentText: currentText*/), + title(), + const ListedBooks() + ]), + ), ), ), + floatingActionButton: const Navigators(), ); } } + +Padding title() { + return const Padding( + padding: EdgeInsets.only(top: 40), + child: Text( + 'Book List', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 25, + ), + ), + ); +} diff --git a/lib/main_views/listed_books.dart b/lib/main_views/listed_books.dart new file mode 100644 index 0000000..bb05037 --- /dev/null +++ b/lib/main_views/listed_books.dart @@ -0,0 +1,43 @@ +import 'package:book_store_app/models/book_model.dart'; +import 'package:flutter/material.dart'; + +class ListedBooks extends StatelessWidget { + const ListedBooks({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Expanded( + child: ListView( + padding: EdgeInsets.only(top: 4), + children: BookModel.book + .map((e) => TextButton( + style: TextButton.styleFrom(), + child: Container( + decoration: BoxDecoration(color: Colors.amber), + padding: EdgeInsets.all(0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.all(0), + height: 135, + width: 110, + decoration: BoxDecoration(color: Colors.amber,image: DecorationImage(image: NetworkImage(e.imageUrl), fit: BoxFit.fill)) + ), + Column( + children: [ + Text(e.author), + ], + ), + ], + ), + ), + onPressed: () => print('object'), + )) + .toList(), + ), + ); + } +} diff --git a/lib/main_views/navigators.dart b/lib/main_views/navigators.dart new file mode 100644 index 0000000..a92e65e --- /dev/null +++ b/lib/main_views/navigators.dart @@ -0,0 +1,53 @@ + +import 'package:book_store_app/book_details_page/book_details_page.dart'; +import 'package:book_store_app/main_views/profile.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class Navigators extends StatelessWidget { + const Navigators({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Padding( + padding: const EdgeInsets.only(left: 25, bottom: 10), + child: Container( + width: 170, + height: 60, + decoration: BoxDecoration( + color: Colors.white, + //border: Border.all(color: Colors.black), + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + spreadRadius: 1, + blurRadius: 4, + offset: const Offset(0, 9)) + ]), + child: TextButton( + style: TextButton.styleFrom( + padding: const EdgeInsets.symmetric( + vertical: 10, horizontal: 50), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), + ), + ), + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) => const BookDetailsPage())); + }, + child: Icon(Icons.home) + ), + ), + )], + ), + ); + } +} diff --git a/lib/main_views/profile.dart b/lib/main_views/profile.dart new file mode 100644 index 0000000..d30d5af --- /dev/null +++ b/lib/main_views/profile.dart @@ -0,0 +1,46 @@ + +import 'package:flutter/material.dart'; + +class Profile extends StatelessWidget { + const Profile({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.only(bottom: 40), + child: Row( + children: [ + Container( + width: 60, + height: 60, + decoration: BoxDecoration( + image: const DecorationImage( + image: NetworkImage( + 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg'), + alignment: Alignment.topCenter, + fit: BoxFit.cover, + ), + color: Colors.amber, + borderRadius: BorderRadius.circular(30)), + ), + const Padding( + padding: EdgeInsets.only(left: 10), + child: Text( + "Hi, Haithem!", + style: TextStyle( + fontWeight: FontWeight.w300, fontSize: 20), + )), + Spacer(), + TextButton( + onPressed: () => print('hi'), + child: const Icon( + Icons.more_vert, + color: Colors.black, + )) + ], + ), + ); + } +} diff --git a/lib/main_views/search_box.dart b/lib/main_views/search_box.dart new file mode 100644 index 0000000..ad53236 --- /dev/null +++ b/lib/main_views/search_box.dart @@ -0,0 +1,64 @@ + +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class SearchBox extends StatelessWidget { + const SearchBox({ + Key? key, + //required this.currentText, + }) : super(key: key); + + //final RxString currentTexts; + static RxString currentText = ''.obs; + @override + Widget build(BuildContext context) { + return Container( + height: 47, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + spreadRadius: 2, + blurRadius: 6, + offset: const Offset(0, 6)) + ]), + child: TextField( + onChanged: (c) { + currentText.value = c; + }, + textAlignVertical: TextAlignVertical.bottom, + decoration: InputDecoration( + suffixIcon: TextButton( + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), + )), + child: Obx( () { + return Icon(Icons.search, + color: currentText.value.isEmpty + ? Colors.grey + : Colors.blue); + } + ), + onPressed: () => print('object'), + ), + hintText: 'Search...', + hintStyle: const TextStyle(color: Colors.grey), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(15), + //borderSide: BorderSide.none, + ), + enabledBorder: const OutlineInputBorder( + borderSide: BorderSide.none, + ), + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + width: 1, color: Colors.blue), + borderRadius: BorderRadius.circular(15))), + autofocus: false, + ), + ); + } +} diff --git a/lib/models/book_model.dart b/lib/models/book_model.dart new file mode 100644 index 0000000..aa1d1eb --- /dev/null +++ b/lib/models/book_model.dart @@ -0,0 +1,88 @@ +import 'package:flutter/material.dart'; +import 'package:book_store_app/main.dart'; + +class BookModel{ + const BookModel({ + Key? key, + required this.imageUrl, + required this.rating, + required this.title, + required this.author, + required this.price, + required this.description, + }); + final String imageUrl; + final double rating; + final String title; + final String author; + final String price; + final String description; + static List book = [ + BookModel( + imageUrl: 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', + rating: 4, + title: 'Yves Saint Laurent', + author: 'Suzy Monkes', + description: + 'idkjndlkdjfnv;kjn', + price: '5', + ), + BookModel( + imageUrl: 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', + rating: 5, + title: 'Yves Saint Laurent2', + author: 'Suzy Monkes2', + description: + '2', + price: '12', + ) + ]; +} + +class StarDisplay extends StatelessWidget { + final double value; + const StarDisplay({Key? key, this.value = 0}) + : assert(value != null), + super(key: key); + @override + Widget build(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.min, + children: List.generate(5, (index) { + return Icon( + index < value.round() ? Icons.star : Icons.star_border, + color: Colors.amber, + ); + }), + ); + } +} +// class BookModel { +// BookModel(this.imageUrl, this.title, this.author, this.price, +// this.description, this.rating, + +// final String imageUrl; +// final String rating; +// final String title; +// final String author; +// final String price; +// final String description; +// // BookModel.builder( +// // this.imageUrl, +// // this.rating, +// // this.title, +// // this.author, +// // this.price, +// // this.description, { +// // dynamic initialRating = 3, +// // dynamic minRating = 1, +// // dynamic direction = Axis.horizontal, +// // dynamic allowHalfRating = true, +// // dynamic itemCount = 5, +// // dynamic itemPadding = const EdgeInsets.symmetric(horizontal: 4.0), +// // //dynamic itemBuilder =const () {}, +// // //dynamic onRatingUpdate = () {}, +// // }); + + +// } diff --git a/lib/tempCodeRunnerFile.dart b/lib/tempCodeRunnerFile.dart new file mode 100644 index 0000000..e69de29 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..b3049ac 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -29,12 +29,13 @@ environment: dependencies: flutter: sdk: flutter - + get: any # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 + dev_dependencies: flutter_test: sdk: flutter From de8da4d04a8f51b2f68f1783a2ccf9b255f494d9 Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Tue, 30 Aug 2022 03:12:03 +0300 Subject: [PATCH 03/12] GoodNigt --- lib/add_book_page/add_book_page.dart | 52 ++++++++++++++ .../add_book_page_views/Add_book_button.dart | 48 +++++++++++++ lib/book_details_page/book_details_page.dart | 57 +++++++-------- .../book_details_views/book_author.dart | 0 .../book_details_views/book_cover.dart | 0 .../book_details_views/book_description.dart | 0 .../book_details_views/book_rating.dart | 18 +++++ .../book_details_views/book_title.dart | 0 .../book_details_views/bottom_buttons.dart | 0 .../book_details_views/top_bar.dart | 2 +- lib/main.dart | 22 ++---- lib/main_views/listed_books.dart | 42 +++++++---- lib/main_views/navigators.dart | 57 ++++++++++----- lib/models/book_model.dart | 70 ++++++------------- pubspec.yaml | 1 - 15 files changed, 239 insertions(+), 130 deletions(-) create mode 100644 lib/add_book_page/add_book_page.dart create mode 100644 lib/add_book_page/add_book_page_views/Add_book_button.dart rename lib/{ => book_details_page}/book_details_views/book_author.dart (100%) rename lib/{ => book_details_page}/book_details_views/book_cover.dart (100%) rename lib/{ => book_details_page}/book_details_views/book_description.dart (100%) rename lib/{ => book_details_page}/book_details_views/book_rating.dart (52%) rename lib/{ => book_details_page}/book_details_views/book_title.dart (100%) rename lib/{ => book_details_page}/book_details_views/bottom_buttons.dart (100%) rename lib/{ => book_details_page}/book_details_views/top_bar.dart (91%) diff --git a/lib/add_book_page/add_book_page.dart b/lib/add_book_page/add_book_page.dart new file mode 100644 index 0000000..6aa1b5f --- /dev/null +++ b/lib/add_book_page/add_book_page.dart @@ -0,0 +1,52 @@ +import 'package:book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; +import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; +import 'package:book_store_app/main.dart'; +import 'package:flutter/material.dart'; + +class AddBookPage extends StatelessWidget { + const AddBookPage({ + Key? key, + }) : super(key: key); + @override + Widget build(BuildContext context) { + return Scaffold( + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const TopBar(), + Padding( + padding: const EdgeInsets.only(left: 27), + child: title('Add Book')), + Column( + children: [ + ReusableTextField(height: 55, hintText: 'sdffds'), + ReusableTextField(height: 100, hintText: 'sdffds'), + ReusableTextField(height: 150, hintText: 'sdffds'), + Text("data"), + Text("data"), + Text("data") + ], + ) + ], + ), + floatingActionButton: AddBookButton()); + } +} + + +Widget ReusableTextField({required height, required hintText } ) { + // TODO: implement build + return Container( + width: 100, + height: height * 1.0, + child: TextField( + decoration: InputDecoration( + contentPadding: EdgeInsets.all(10.0), + enabledBorder: UnderlineInputBorder( + borderSide: BorderSide(color: Colors.white), + ), + hintText: hintText, + ), + ), +); +} diff --git a/lib/add_book_page/add_book_page_views/Add_book_button.dart b/lib/add_book_page/add_book_page_views/Add_book_button.dart new file mode 100644 index 0000000..9e0e824 --- /dev/null +++ b/lib/add_book_page/add_book_page_views/Add_book_button.dart @@ -0,0 +1,48 @@ +import 'package:flutter/material.dart'; + +class AddBookButton extends StatelessWidget { + const AddBookButton({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Padding( + padding: EdgeInsets.only(bottom: 20, left: 25, right: 5), + child: Container( + width: 350, + height: 70, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(13), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + spreadRadius: 1, + blurRadius: 4, + offset: const Offset(0, 9)) + ]), + child: TextButton( + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), + )), + child: Text("Add", + style: TextStyle( + fontSize: 17, + fontWeight: FontWeight.w400, + color: Colors.white)), + onPressed: () => print('object'), + ), + ), + ), + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/book_details_page/book_details_page.dart b/lib/book_details_page/book_details_page.dart index bc1a905..78b7b17 100644 --- a/lib/book_details_page/book_details_page.dart +++ b/lib/book_details_page/book_details_page.dart @@ -1,46 +1,38 @@ -import 'package:book_store_app/book_details_views/book_author.dart'; -import 'package:book_store_app/book_details_views/book_cover.dart'; -import 'package:book_store_app/book_details_views/book_description.dart'; -import 'package:book_store_app/book_details_views/book_rating.dart'; -import 'package:book_store_app/book_details_views/book_title.dart'; -import 'package:book_store_app/book_details_views/bottom_buttons.dart'; -import 'package:book_store_app/book_details_views/top_bar.dart'; -import 'package:book_store_app/main.dart'; -import 'package:book_store_app/main_views/profile.dart'; +import 'package:book_store_app/book_details_page/book_details_views/book_author.dart'; +import 'package:book_store_app/book_details_page/book_details_views/book_cover.dart'; +import 'package:book_store_app/book_details_page/book_details_views/book_description.dart'; +import 'package:book_store_app/book_details_page/book_details_views/book_rating.dart'; +import 'package:book_store_app/book_details_page/book_details_views/book_title.dart'; +import 'package:book_store_app/book_details_page/book_details_views/bottom_buttons.dart'; +import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; import 'package:book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class BookDetailsPage extends StatefulWidget { - const BookDetailsPage({Key? key}) : super(key: key); - @override - State createState() => _BookDetailsPageState(); -} - -class _BookDetailsPageState extends State { +class BookDetailsPage extends StatelessWidget { + const BookDetailsPage({Key? key, required this.desiredBook}) : super(key: key); + final BookModel desiredBook; @override Widget build(BuildContext context) { return Scaffold( - // appBar: AppBar( - // systemOverlayStyle: const SystemUiOverlayStyle( - // statusBarColor: Colors.transparent, - // statusBarIconBrightness: Brightness.dark), - // backgroundColor: const Color(0xfff0f0f0), - // elevation: 0, - // toolbarHeight: 30, - // ), body: Column( children: [ const TopBar(), Column( children: [ - BookCover(url: BookModel.book[0].imageUrl), - BookTitle(title: BookModel.book[0].title), - BookAuthor(author: BookModel.book[0].author,), - SizedBox(height: 5,), - BookRating(rating: BookModel.book[0].rating,), - BookDescription(description: BookModel.book[0].description,), + BookCover(url: desiredBook.imageUrl), + BookTitle(title: desiredBook.title), + BookAuthor( + author: desiredBook.author, + ), + const SizedBox( + height: 5, + ), + BookRating( + rating: desiredBook.rating, + ), + BookDescription( + description: desiredBook.description, + ), ], ) ], @@ -48,3 +40,4 @@ class _BookDetailsPageState extends State { floatingActionButton: bottom_buttons()); } } + diff --git a/lib/book_details_views/book_author.dart b/lib/book_details_page/book_details_views/book_author.dart similarity index 100% rename from lib/book_details_views/book_author.dart rename to lib/book_details_page/book_details_views/book_author.dart diff --git a/lib/book_details_views/book_cover.dart b/lib/book_details_page/book_details_views/book_cover.dart similarity index 100% rename from lib/book_details_views/book_cover.dart rename to lib/book_details_page/book_details_views/book_cover.dart diff --git a/lib/book_details_views/book_description.dart b/lib/book_details_page/book_details_views/book_description.dart similarity index 100% rename from lib/book_details_views/book_description.dart rename to lib/book_details_page/book_details_views/book_description.dart diff --git a/lib/book_details_views/book_rating.dart b/lib/book_details_page/book_details_views/book_rating.dart similarity index 52% rename from lib/book_details_views/book_rating.dart rename to lib/book_details_page/book_details_views/book_rating.dart index 03af5d3..129ac03 100644 --- a/lib/book_details_views/book_rating.dart +++ b/lib/book_details_page/book_details_views/book_rating.dart @@ -21,3 +21,21 @@ class BookRating extends StatelessWidget { ); } } +class StarDisplay extends StatelessWidget { + final double value; + const StarDisplay({Key? key, this.value = 0}) + : assert(value != null), + super(key: key); + @override + Widget build(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.min, + children: List.generate(5, (index) { + return Icon( + index < value.round() ? Icons.star : Icons.star_border, + color: Colors.amber, + ); + }), + ); + } +} \ No newline at end of file diff --git a/lib/book_details_views/book_title.dart b/lib/book_details_page/book_details_views/book_title.dart similarity index 100% rename from lib/book_details_views/book_title.dart rename to lib/book_details_page/book_details_views/book_title.dart diff --git a/lib/book_details_views/bottom_buttons.dart b/lib/book_details_page/book_details_views/bottom_buttons.dart similarity index 100% rename from lib/book_details_views/bottom_buttons.dart rename to lib/book_details_page/book_details_views/bottom_buttons.dart diff --git a/lib/book_details_views/top_bar.dart b/lib/book_details_page/book_details_views/top_bar.dart similarity index 91% rename from lib/book_details_views/top_bar.dart rename to lib/book_details_page/book_details_views/top_bar.dart index e0496c4..62e5df7 100644 --- a/lib/book_details_views/top_bar.dart +++ b/lib/book_details_page/book_details_views/top_bar.dart @@ -9,7 +9,7 @@ class TopBar extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: EdgeInsets.only(bottom: 20, top: 70, left: 5, right: 20), + padding: EdgeInsets.only(bottom: 5, top: 70, left: 5, right: 20), child: Row( children: [ TextButton( diff --git a/lib/main.dart b/lib/main.dart index ab05dfb..8d56827 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,8 +3,6 @@ import 'package:book_store_app/main_views/navigators.dart'; import 'package:book_store_app/main_views/profile.dart'; import 'package:book_store_app/main_views/search_box.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:get/get.dart'; void main() { runApp(const MyApp()); @@ -34,14 +32,6 @@ class _MyHomePageState extends State { @override Widget build(BuildContext context) { return Scaffold( - // appBar: AppBar( - // systemOverlayStyle: const SystemUiOverlayStyle( - // statusBarColor: Colors.transparent, - // statusBarIconBrightness: Brightness.dark), - // backgroundColor: const Color(0xfff0f0f0), - // elevation: 0, - // toolbarHeight: 30, - // ), body: Container( color: Colors.grey[100], child: GestureDetector( @@ -53,7 +43,7 @@ class _MyHomePageState extends State { const SizedBox(height: 50), const Profile(), const SearchBox(/*currentText: currentText*/), - title(), + title('Book List'), const ListedBooks() ]), ), @@ -64,12 +54,12 @@ class _MyHomePageState extends State { } } -Padding title() { - return const Padding( - padding: EdgeInsets.only(top: 40), +Padding title(String titles) { + return Padding( + padding: const EdgeInsets.only(top: 35), child: Text( - 'Book List', - style: TextStyle( + titles, + style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 25, ), diff --git a/lib/main_views/listed_books.dart b/lib/main_views/listed_books.dart index bb05037..d96f646 100644 --- a/lib/main_views/listed_books.dart +++ b/lib/main_views/listed_books.dart @@ -1,6 +1,8 @@ +import 'package:book_store_app/book_details_page/book_details_page.dart'; +import 'package:book_store_app/book_details_page/book_details_views/book_rating.dart'; import 'package:book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; - +//import 'package:google_fonts/google_fonts.dart'; class ListedBooks extends StatelessWidget { const ListedBooks({ Key? key, @@ -10,31 +12,45 @@ class ListedBooks extends StatelessWidget { Widget build(BuildContext context) { return Expanded( child: ListView( - padding: EdgeInsets.only(top: 4), + padding: const EdgeInsets.only(top: 4), children: BookModel.book .map((e) => TextButton( style: TextButton.styleFrom(), child: Container( - decoration: BoxDecoration(color: Colors.amber), - padding: EdgeInsets.all(0), + decoration: BoxDecoration(color: Colors.grey[100],), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - padding: EdgeInsets.all(0), - height: 135, - width: 110, - decoration: BoxDecoration(color: Colors.amber,image: DecorationImage(image: NetworkImage(e.imageUrl), fit: BoxFit.fill)) + height: 145, + width: 100, + decoration: BoxDecoration( + color: Colors.amber, + image: DecorationImage(image: NetworkImage(e.imageUrl), fit: BoxFit.cover, alignment: Alignment.topCenter), + borderRadius: BorderRadius.circular(7) + ) ), - Column( - children: [ - Text(e.author), - ], + Padding( + padding: const EdgeInsets.only(left: 20, top: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(e.title, style: /*GoogleFonts.lato*/const TextStyle(color: Colors.black, fontSize: 17, fontWeight: FontWeight.w600),), + Text(e.author, style: /*GoogleFonts.lato*/const TextStyle(color: Colors.grey, fontSize: 12, fontWeight: FontWeight.w600,height: 2),), + Text("\$${e.price}", style: /*GoogleFonts.lato*/TextStyle(color: Colors.grey[800], fontSize: 17, fontWeight: FontWeight.w600, height: 2),), + Container( + padding: EdgeInsets.only(top: 10), + child: StarDisplay(value: e.rating,),) + ], + ), ), ], ), ), - onPressed: () => print('object'), + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) => BookDetailsPage(desiredBook: e,))); + }, )) .toList(), ), diff --git a/lib/main_views/navigators.dart b/lib/main_views/navigators.dart index a92e65e..44ecd99 100644 --- a/lib/main_views/navigators.dart +++ b/lib/main_views/navigators.dart @@ -1,4 +1,4 @@ - +import 'package:book_store_app/add_book_page/add_book_page.dart'; import 'package:book_store_app/book_details_page/book_details_page.dart'; import 'package:book_store_app/main_views/profile.dart'; import 'package:flutter/material.dart'; @@ -18,7 +18,7 @@ class Navigators extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 25, bottom: 10), child: Container( - width: 170, + width: 250, height: 60, decoration: BoxDecoration( color: Colors.white, @@ -31,22 +31,45 @@ class Navigators extends StatelessWidget { blurRadius: 4, offset: const Offset(0, 9)) ]), - child: TextButton( - style: TextButton.styleFrom( - padding: const EdgeInsets.symmetric( - vertical: 10, horizontal: 50), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(15), - ), - ), - onPressed: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => const BookDetailsPage())); - }, - child: Icon(Icons.home) + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + TextButton( + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), + ), + ), + onPressed: () { + print('object'); + }, + child: Icon(Icons.home, color: Colors.grey[500])), + TextButton( + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), + ), + ), + onPressed: () { + print('object'); + }, + child: Icon(Icons.shopping_cart_rounded, color: Colors.grey[500])), + TextButton( + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), + ), + ), + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) => AddBookPage())); + }, + child: Icon(Icons.add, color: Colors.grey[500],)), + ], + ), ), - ), - )], + ) + ], ), ); } diff --git a/lib/models/book_model.dart b/lib/models/book_model.dart index aa1d1eb..9cab255 100644 --- a/lib/models/book_model.dart +++ b/lib/models/book_model.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:book_store_app/main.dart'; class BookModel{ const BookModel({ @@ -18,7 +17,7 @@ class BookModel{ final String price; final String description; static List book = [ - BookModel( + const BookModel( imageUrl: 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', rating: 4, title: 'Yves Saint Laurent', @@ -27,7 +26,25 @@ class BookModel{ 'idkjndlkdjfnv;kjn', price: '5', ), - BookModel( + const BookModel( + imageUrl: 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', + rating: 5, + title: 'Yves Saint Laurent2', + author: 'Suzy Monkes2', + description: + '2', + price: '12', + ), + const BookModel( + imageUrl: 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', + rating: 5, + title: 'Yves Saint Laurent2', + author: 'Suzy Monkes2', + description: + '2', + price: '12', + ), + const BookModel( imageUrl: 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', rating: 5, title: 'Yves Saint Laurent2', @@ -39,50 +56,3 @@ class BookModel{ ]; } -class StarDisplay extends StatelessWidget { - final double value; - const StarDisplay({Key? key, this.value = 0}) - : assert(value != null), - super(key: key); - @override - Widget build(BuildContext context) { - return Row( - mainAxisSize: MainAxisSize.min, - children: List.generate(5, (index) { - return Icon( - index < value.round() ? Icons.star : Icons.star_border, - color: Colors.amber, - ); - }), - ); - } -} -// class BookModel { -// BookModel(this.imageUrl, this.title, this.author, this.price, -// this.description, this.rating, - -// final String imageUrl; -// final String rating; -// final String title; -// final String author; -// final String price; -// final String description; -// // BookModel.builder( -// // this.imageUrl, -// // this.rating, -// // this.title, -// // this.author, -// // this.price, -// // this.description, { -// // dynamic initialRating = 3, -// // dynamic minRating = 1, -// // dynamic direction = Axis.horizontal, -// // dynamic allowHalfRating = true, -// // dynamic itemCount = 5, -// // dynamic itemPadding = const EdgeInsets.symmetric(horizontal: 4.0), -// // //dynamic itemBuilder =const () {}, -// // //dynamic onRatingUpdate = () {}, -// // }); - - -// } diff --git a/pubspec.yaml b/pubspec.yaml index b3049ac..92703ad 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -30,7 +30,6 @@ dependencies: flutter: sdk: flutter get: any - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 From 72557d6cf4f354c578da2e2d8227d6ce7baee908 Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Tue, 30 Aug 2022 22:08:03 +0300 Subject: [PATCH 04/12] All done --- lib/add_book_page/add_book_page.dart | 84 +++++----- .../add_book_page_views/Add_book_button.dart | 46 ++++-- .../reusable_text_button.dart | 44 ++++++ lib/book_details_page/book_details_page.dart | 2 +- .../book_details_views/bottom_buttons.dart | 28 +++- lib/cart_page/cart_page.dart | 40 +++++ lib/main.dart | 32 ++-- lib/main_views/listed_books.dart | 149 +++++++++++++----- lib/main_views/navigators.dart | 73 ++++++--- lib/main_views/search_box.dart | 98 ++++++------ lib/models/book_model.dart | 44 ++---- 11 files changed, 417 insertions(+), 223 deletions(-) create mode 100644 lib/add_book_page/add_book_page_views/reusable_text_button.dart create mode 100644 lib/cart_page/cart_page.dart diff --git a/lib/add_book_page/add_book_page.dart b/lib/add_book_page/add_book_page.dart index 6aa1b5f..bd3fea7 100644 --- a/lib/add_book_page/add_book_page.dart +++ b/lib/add_book_page/add_book_page.dart @@ -1,52 +1,56 @@ import 'package:book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; +import 'package:book_store_app/add_book_page/add_book_page_views/reusable_text_button.dart'; import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; import 'package:book_store_app/main.dart'; import 'package:flutter/material.dart'; +import 'package:get/get.dart'; class AddBookPage extends StatelessWidget { const AddBookPage({ Key? key, }) : super(key: key); + static TextEditingController bookName = TextEditingController(); + static TextEditingController authorName = TextEditingController(); + static TextEditingController price = TextEditingController(); + static TextEditingController imageLink = TextEditingController(); + static TextEditingController rating = TextEditingController(); + static TextEditingController description = TextEditingController(); + @override Widget build(BuildContext context) { - return Scaffold( - body: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const TopBar(), - Padding( - padding: const EdgeInsets.only(left: 27), - child: title('Add Book')), - Column( - children: [ - ReusableTextField(height: 55, hintText: 'sdffds'), - ReusableTextField(height: 100, hintText: 'sdffds'), - ReusableTextField(height: 150, hintText: 'sdffds'), - Text("data"), - Text("data"), - Text("data") - ], - ) - ], - ), - floatingActionButton: AddBookButton()); + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const TopBar(), + Padding( + padding: const EdgeInsets.only(left: 27), + child: title('Add Book')), + Expanded( + child: ListView( + padding: const EdgeInsets.only(left: 20, top: 30, right: 20), + children: [ + ReusableTextField(hintText: 'Book Name...', lines: 1, myControler: bookName), + ReusableTextField(hintText: 'Author Name...', lines: 1, myControler: authorName), + ReusableTextField(hintText: 'Price in \$...', lines: 1, myControler: price), + ReusableTextField(hintText: 'Image Link...', lines: 1, myControler: imageLink), + ReusableTextField(hintText: 'Rating...', lines: 1, myControler: rating), + Container( + height: 172, + margin: EdgeInsets.only( + bottom: MediaQuery.of(context).viewInsets.bottom +150 // so that the whole thing always move +10 + ), + child: + ReusableTextField(hintText: 'Description', lines: 6, myControler: description)), + ], + ), + ) + ], + ), + floatingActionButton: AddBookButton() + ), + ); } -} - - -Widget ReusableTextField({required height, required hintText } ) { - // TODO: implement build - return Container( - width: 100, - height: height * 1.0, - child: TextField( - decoration: InputDecoration( - contentPadding: EdgeInsets.all(10.0), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide(color: Colors.white), - ), - hintText: hintText, - ), - ), -); -} +} \ No newline at end of file diff --git a/lib/add_book_page/add_book_page_views/Add_book_button.dart b/lib/add_book_page/add_book_page_views/Add_book_button.dart index 9e0e824..881eaf3 100644 --- a/lib/add_book_page/add_book_page_views/Add_book_button.dart +++ b/lib/add_book_page/add_book_page_views/Add_book_button.dart @@ -1,8 +1,12 @@ +import 'package:book_store_app/add_book_page/add_book_page.dart'; +import 'package:book_store_app/main.dart'; +import 'package:book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; class AddBookButton extends StatelessWidget { const AddBookButton({ Key? key, + }) : super(key: key); @override @@ -13,7 +17,7 @@ class AddBookButton extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.end, children: [ Padding( - padding: EdgeInsets.only(bottom: 20, left: 25, right: 5), + padding: const EdgeInsets.only(bottom: 20, left: 25, right: 5), child: Container( width: 350, height: 70, @@ -28,21 +32,37 @@ class AddBookButton extends StatelessWidget { offset: const Offset(0, 9)) ]), child: TextButton( - style: TextButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(15), - )), - child: Text("Add", - style: TextStyle( - fontSize: 17, - fontWeight: FontWeight.w400, - color: Colors.white)), - onPressed: () => print('object'), - ), + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), + )), + child: const Text("Add", + style: TextStyle( + fontSize: 17, + fontWeight: FontWeight.w400, + color: Colors.white)), + onPressed: () { + BookModel.book.add(BookModel( + imageUrl: AddBookPage.imageLink.text, + rating: (double.parse(AddBookPage.rating.text)), + title: AddBookPage.bookName.text, + author: AddBookPage.authorName.text, + price: AddBookPage.price.text, + description: AddBookPage.description.text, + inCart: true)); + Navigator.push(context, + MaterialPageRoute(builder: (context) => const MyHomePage())); + AddBookPage.imageLink.clear(); + AddBookPage.rating.clear(); + AddBookPage.bookName.clear(); + AddBookPage.authorName.clear(); + AddBookPage.price.clear(); + AddBookPage.description.clear(); + }), ), ), ], ), ); } -} \ No newline at end of file +} diff --git a/lib/add_book_page/add_book_page_views/reusable_text_button.dart b/lib/add_book_page/add_book_page_views/reusable_text_button.dart new file mode 100644 index 0000000..98c6d8c --- /dev/null +++ b/lib/add_book_page/add_book_page_views/reusable_text_button.dart @@ -0,0 +1,44 @@ +import 'package:book_store_app/add_book_page/add_book_page.dart'; +import 'package:flutter/material.dart'; +Widget ReusableTextField( + {required hintText, + required int lines, + required TextEditingController myControler}) { + String givenValues; + return Container( + margin: const EdgeInsets.only(top: 17), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + spreadRadius: 2, + blurRadius: 6, + offset: const Offset(0, 6)) + ]), + child: TextField( + maxLines: 6, + minLines: lines, + textInputAction: TextInputAction.newline, + decoration: InputDecoration( + hintText: hintText, + hintStyle: const TextStyle(color: Colors.grey), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(15), + ), + enabledBorder: const OutlineInputBorder( + borderSide: BorderSide.none, + ), + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide(width: 1, color: Colors.blue), + borderRadius: BorderRadius.circular(15))), + autofocus: false, + controller: myControler, + onChanged: ((X) { + givenValues = AddBookPage.bookName.text; + print(givenValues); + }), + ), + ); +} diff --git a/lib/book_details_page/book_details_page.dart b/lib/book_details_page/book_details_page.dart index 78b7b17..d0b122e 100644 --- a/lib/book_details_page/book_details_page.dart +++ b/lib/book_details_page/book_details_page.dart @@ -37,7 +37,7 @@ class BookDetailsPage extends StatelessWidget { ) ], ), - floatingActionButton: bottom_buttons()); + floatingActionButton: BuyAndDetailsButtons(boughtBook: desiredBook, desiredBookIndex: 1,)); } } diff --git a/lib/book_details_page/book_details_views/bottom_buttons.dart b/lib/book_details_page/book_details_views/bottom_buttons.dart index 56ff828..cff4e5f 100644 --- a/lib/book_details_page/book_details_views/bottom_buttons.dart +++ b/lib/book_details_page/book_details_views/bottom_buttons.dart @@ -1,11 +1,16 @@ - +import 'package:book_store_app/cart_page/cart_page.dart'; import 'package:book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; + //import 'package:google_fonts/google_fonts.dart'; -class bottom_buttons extends StatelessWidget { - const bottom_buttons({ + +class BuyAndDetailsButtons extends StatelessWidget { + const BuyAndDetailsButtons({ Key? key, + required this.boughtBook, required this.desiredBookIndex, }) : super(key: key); + final BookModel boughtBook; + final int desiredBookIndex; static String price = BookModel.book[1].price; @override Widget build(BuildContext context) { @@ -95,11 +100,18 @@ class bottom_buttons extends StatelessWidget { shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), )), - child: Text( - "Buy now for $price\$", - style: TextStyle(fontSize: 17, fontWeight: FontWeight.w400, color: Colors.white) - ), - onPressed: () => print('object'), + child: Text("Buy now for $price\$", + style: TextStyle( + fontSize: 17, + fontWeight: FontWeight.w400, + color: Colors.white)), + onPressed: () { + BookModel.book[desiredBookIndex].inCart = true; + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => CartPage())); + }, ), ), ), diff --git a/lib/cart_page/cart_page.dart b/lib/cart_page/cart_page.dart new file mode 100644 index 0000000..fad70c8 --- /dev/null +++ b/lib/cart_page/cart_page.dart @@ -0,0 +1,40 @@ +import 'package:book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; +import 'package:book_store_app/add_book_page/add_book_page_views/reusable_text_button.dart'; +import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; +import 'package:book_store_app/main.dart'; +import 'package:book_store_app/main_views/listed_books.dart'; +import 'package:book_store_app/main_views/navigators.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class CartPage extends StatelessWidget { + const CartPage({ + Key? key, + }) : super(key: key); + static TextEditingController bookName = TextEditingController(); + static TextEditingController authorName = TextEditingController(); + static TextEditingController price = TextEditingController(); + static TextEditingController imageLink = TextEditingController(); + static TextEditingController rating = TextEditingController(); + static TextEditingController description = TextEditingController(); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const TopBar(), + Padding( + padding: const EdgeInsets.only(left: 27), + child: title('Cart')), + const ListedBooks(paddingLeft: 20, paddingRight: 20, toggleCartFilter: true,) + ], + ), + floatingActionButton: Navigators(currentPageCart: true,), + ), + ); + } +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 8d56827..81e276d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -31,25 +31,25 @@ class MyHomePage extends StatefulWidget { class _MyHomePageState extends State { @override Widget build(BuildContext context) { - return Scaffold( - body: Container( - color: Colors.grey[100], - child: GestureDetector( - onTap: () => FocusManager.instance.primaryFocus?.unfocus(), - child: Padding( - padding: const EdgeInsets.only(top: 20, left: 20, right: 20), - child: - Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - const SizedBox(height: 50), - const Profile(), - const SearchBox(/*currentText: currentText*/), - title('Book List'), - const ListedBooks() - ]), + return GestureDetector( + onTap: () => FocusManager.instance.primaryFocus?.unfocus(), + child: Scaffold( + body: Container( + color: Colors.grey[100], + child:Padding( + padding: const EdgeInsets.only(top: 20, left: 20, right: 20), + child: + Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + const SizedBox(height: 50), + const Profile(), + const SearchBox(/*currentText: currentText*/), + title('Book List'), + const ListedBooks() + ]), ), ), + floatingActionButton: Navigators(currentPageHome: true,), ), - floatingActionButton: const Navigators(), ); } } diff --git a/lib/main_views/listed_books.dart b/lib/main_views/listed_books.dart index d96f646..f634e38 100644 --- a/lib/main_views/listed_books.dart +++ b/lib/main_views/listed_books.dart @@ -1,58 +1,121 @@ import 'package:book_store_app/book_details_page/book_details_page.dart'; import 'package:book_store_app/book_details_page/book_details_views/book_rating.dart'; +import 'package:book_store_app/main.dart'; +import 'package:book_store_app/main_views/search_box.dart'; import 'package:book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + //import 'package:google_fonts/google_fonts.dart'; class ListedBooks extends StatelessWidget { - const ListedBooks({ - Key? key, - }) : super(key: key); + const ListedBooks( + {Key? key, this.paddingLeft, this.paddingRight, this.toggleCartFilter}) + : super(key: key); + final double? paddingLeft; + final double? paddingRight; + final bool? toggleCartFilter; + static ScrollController myScrollController = ScrollController(); + + bool filterSearchFunction( + BookModel element, String searchWord, bool toggleCartFilter) { + if (toggleCartFilter == false && element.title.toLowerCase().contains(searchWord.toLowerCase())) { + return true; + } + if (element.inCart == true && toggleCartFilter == true) { + return true; + } else { + return false; + } + } @override Widget build(BuildContext context) { return Expanded( - child: ListView( - padding: const EdgeInsets.only(top: 4), - children: BookModel.book - .map((e) => TextButton( - style: TextButton.styleFrom(), - child: Container( - decoration: BoxDecoration(color: Colors.grey[100],), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - height: 145, - width: 100, - decoration: BoxDecoration( - color: Colors.amber, - image: DecorationImage(image: NetworkImage(e.imageUrl), fit: BoxFit.cover, alignment: Alignment.topCenter), - borderRadius: BorderRadius.circular(7) - ) + child: Container( + margin: EdgeInsets.only( + bottom: MediaQuery.of(context).viewInsets.bottom + + 55 // so that the whole thing always move +10 + ), + child: Obx(() { + return ListView( + controller: myScrollController, + padding: EdgeInsets.only( + bottom: 5, left: paddingLeft ?? 0, right: paddingRight ?? 0), + children: BookModel.book + .where((element) => filterSearchFunction(element, + SearchBox.searchWord.value, toggleCartFilter??false)) + .map((e) => TextButton( + style: TextButton.styleFrom(), + child: Container( + decoration: BoxDecoration( + color: Colors.grey[100], ), - Padding( - padding: const EdgeInsets.only(left: 20, top: 10), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(e.title, style: /*GoogleFonts.lato*/const TextStyle(color: Colors.black, fontSize: 17, fontWeight: FontWeight.w600),), - Text(e.author, style: /*GoogleFonts.lato*/const TextStyle(color: Colors.grey, fontSize: 12, fontWeight: FontWeight.w600,height: 2),), - Text("\$${e.price}", style: /*GoogleFonts.lato*/TextStyle(color: Colors.grey[800], fontSize: 17, fontWeight: FontWeight.w600, height: 2),), - Container( - padding: EdgeInsets.only(top: 10), - child: StarDisplay(value: e.rating,),) - ], - ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + height: 145, + width: 100, + decoration: BoxDecoration( + color: Colors.amber, + image: DecorationImage( + image: NetworkImage(e.imageUrl), + fit: BoxFit.cover, + alignment: Alignment.topCenter), + borderRadius: BorderRadius.circular(7))), + Padding( + padding: const EdgeInsets.only(left: 20, top: 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + e.title, + style: /*GoogleFonts.lato*/ const TextStyle( + color: Colors.black, + fontSize: 17, + fontWeight: FontWeight.w600), + ), + Text( + e.author, + style: /*GoogleFonts.lato*/ const TextStyle( + color: Colors.grey, + fontSize: 12, + fontWeight: FontWeight.w600, + height: 2), + ), + Text( + "\$${e.price}", + style: /*GoogleFonts.lato*/ TextStyle( + color: Colors.grey[800], + fontSize: 17, + fontWeight: FontWeight.w600, + height: 2), + ), + Container( + padding: EdgeInsets.only(top: 10), + child: StarDisplay( + value: e.rating, + ), + ) + ], + ), + ), + ], ), - ], - ), - ), - onPressed: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => BookDetailsPage(desiredBook: e,))); - }, - )) - .toList(), + ), + onPressed: () { + int desiredBookIndex = BookModel.book.indexOf(e); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => BookDetailsPage( + desiredBook: e, + ))); + }, + )) + .toList(), + ); + }), ), ); } diff --git a/lib/main_views/navigators.dart b/lib/main_views/navigators.dart index 44ecd99..7d7a941 100644 --- a/lib/main_views/navigators.dart +++ b/lib/main_views/navigators.dart @@ -1,16 +1,22 @@ import 'package:book_store_app/add_book_page/add_book_page.dart'; import 'package:book_store_app/book_details_page/book_details_page.dart'; +import 'package:book_store_app/cart_page/cart_page.dart'; +import 'package:book_store_app/main.dart'; import 'package:book_store_app/main_views/profile.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; class Navigators extends StatelessWidget { - const Navigators({ - Key? key, - }) : super(key: key); - + Navigators({Key? key, this.currentPageCart, this.currentPageHome}) + : super(key: key); + bool? currentPageHome; + bool? currentPageCart; + Rx currentPageHomeRx = false.obs; + Rx currentPageCartRx = false.obs; @override Widget build(BuildContext context) { + currentPageCartRx.value = currentPageCart ?? false; + currentPageHomeRx.value = currentPageHome ?? false; return Center( child: Column( mainAxisAlignment: MainAxisAlignment.end, @@ -35,25 +41,41 @@ class Navigators extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ TextButton( - style: TextButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(15), - ), + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), ), - onPressed: () { - print('object'); - }, - child: Icon(Icons.home, color: Colors.grey[500])), + ), + onPressed: () { + currentPageCartRx?.value = currentPageCart ?? false; + + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => MyHomePage())); + }, + child: Obx(() { + return Icon(Icons.home, + color: currentPageHomeRx == false.obs + ? Colors.grey + : Colors.blue); + }), + ), TextButton( - style: TextButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(15), - ), + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), ), - onPressed: () { - print('object'); - }, - child: Icon(Icons.shopping_cart_rounded, color: Colors.grey[500])), + ), + onPressed: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) => CartPage())); + }, + child: Icon(Icons.shopping_cart_rounded, + color: currentPageCartRx == false.obs + ? Colors.grey + : Colors.blue), + ), TextButton( style: TextButton.styleFrom( shape: RoundedRectangleBorder( @@ -61,10 +83,15 @@ class Navigators extends StatelessWidget { ), ), onPressed: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => AddBookPage())); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AddBookPage())); }, - child: Icon(Icons.add, color: Colors.grey[500],)), + child: Icon( + Icons.add, + color: Colors.grey[500], + )), ], ), ), diff --git a/lib/main_views/search_box.dart b/lib/main_views/search_box.dart index ad53236..e317d72 100644 --- a/lib/main_views/search_box.dart +++ b/lib/main_views/search_box.dart @@ -1,64 +1,62 @@ - +import 'package:book_store_app/main_views/listed_books.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; class SearchBox extends StatelessWidget { const SearchBox({ Key? key, - //required this.currentText, }) : super(key: key); + static RxString searchWord = ''.obs; - //final RxString currentTexts; - static RxString currentText = ''.obs; @override Widget build(BuildContext context) { return Container( - height: 47, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(15), - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.1), - spreadRadius: 2, - blurRadius: 6, - offset: const Offset(0, 6)) - ]), - child: TextField( - onChanged: (c) { - currentText.value = c; - }, - textAlignVertical: TextAlignVertical.bottom, - decoration: InputDecoration( - suffixIcon: TextButton( - style: TextButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(15), - )), - child: Obx( () { - return Icon(Icons.search, - color: currentText.value.isEmpty - ? Colors.grey - : Colors.blue); - } - ), - onPressed: () => print('object'), - ), - hintText: 'Search...', - hintStyle: const TextStyle(color: Colors.grey), - border: OutlineInputBorder( + height: 47, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + spreadRadius: 2, + blurRadius: 6, + offset: const Offset(0, 6)) + ]), + child: TextField( + onTap: () { + ListedBooks.myScrollController.jumpTo(0); + }, + onChanged: (c) { + searchWord.value = c; + }, + textAlignVertical: TextAlignVertical.bottom, + decoration: InputDecoration( + suffixIcon: TextButton( + style: TextButton.styleFrom( + shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), - //borderSide: BorderSide.none, - ), - enabledBorder: const OutlineInputBorder( - borderSide: BorderSide.none, - ), - focusedBorder: OutlineInputBorder( - borderSide: const BorderSide( - width: 1, color: Colors.blue), - borderRadius: BorderRadius.circular(15))), - autofocus: false, - ), - ); + )), + child: Obx(() { + return Icon(Icons.search, + color: + searchWord.value.isEmpty ? Colors.grey : Colors.blue); + }), + onPressed: () => print('object'), + ), + hintText: 'Search...', + hintStyle: const TextStyle(color: Colors.grey), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(15), + //borderSide: BorderSide.none, + ), + enabledBorder: const OutlineInputBorder( + borderSide: BorderSide.none, + ), + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide(width: 1, color: Colors.blue), + borderRadius: BorderRadius.circular(15))), + autofocus: false, + ), + ); } } diff --git a/lib/models/book_model.dart b/lib/models/book_model.dart index 9cab255..43e9301 100644 --- a/lib/models/book_model.dart +++ b/lib/models/book_model.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -class BookModel{ - const BookModel({ +class BookModel { + BookModel({ Key? key, required this.imageUrl, required this.rating, @@ -9,6 +9,7 @@ class BookModel{ required this.author, required this.price, required this.description, + this.inCart, }); final String imageUrl; final double rating; @@ -16,43 +17,28 @@ class BookModel{ final String author; final String price; final String description; + late bool? inCart; + static List book = [ - const BookModel( - imageUrl: 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', + BookModel( + imageUrl: + 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', rating: 4, title: 'Yves Saint Laurent', author: 'Suzy Monkes', - description: - 'idkjndlkdjfnv;kjn', + description: 'idkjndlkdjfnv;kjn', price: '5', + inCart: false ), - const BookModel( - imageUrl: 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', + BookModel( + imageUrl: + 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', rating: 5, title: 'Yves Saint Laurent2', author: 'Suzy Monkes2', - description: - '2', + description: '2', price: '12', + inCart: true ), - const BookModel( - imageUrl: 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', - rating: 5, - title: 'Yves Saint Laurent2', - author: 'Suzy Monkes2', - description: - '2', - price: '12', - ), - const BookModel( - imageUrl: 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg', - rating: 5, - title: 'Yves Saint Laurent2', - author: 'Suzy Monkes2', - description: - '2', - price: '12', - ) ]; } - From 8014b40decd7b78494ab5413376746dd194b3c6b Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Tue, 30 Aug 2022 22:30:45 +0300 Subject: [PATCH 05/12] SOME CHANGES --- lib/add_book_page/add_book_page.dart | 3 +-- .../add_book_page_views/Add_book_button.dart | 2 +- .../reusable_text_button.dart | 1 - lib/book_details_page/book_details_page.dart | 3 ++- .../book_details_views/book_rating.dart | 4 +--- .../book_details_views/bottom_buttons.dart | 17 +++++++++-------- .../book_details_views/top_bar.dart | 4 ++-- lib/main.dart | 2 +- lib/main_views/listed_books.dart | 19 ++++++++++--------- lib/main_views/navigators.dart | 10 ++++------ lib/main_views/profile.dart | 2 +- lib/models/book_model.dart | 7 +++---- 12 files changed, 35 insertions(+), 39 deletions(-) diff --git a/lib/add_book_page/add_book_page.dart b/lib/add_book_page/add_book_page.dart index bd3fea7..5cab847 100644 --- a/lib/add_book_page/add_book_page.dart +++ b/lib/add_book_page/add_book_page.dart @@ -3,7 +3,6 @@ import 'package:book_store_app/add_book_page/add_book_page_views/reusable_text_b import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; import 'package:book_store_app/main.dart'; import 'package:flutter/material.dart'; -import 'package:get/get.dart'; class AddBookPage extends StatelessWidget { const AddBookPage({ @@ -49,7 +48,7 @@ class AddBookPage extends StatelessWidget { ) ], ), - floatingActionButton: AddBookButton() + floatingActionButton: const AddBookButton() ), ); } diff --git a/lib/add_book_page/add_book_page_views/Add_book_button.dart b/lib/add_book_page/add_book_page_views/Add_book_button.dart index 881eaf3..3ae2478 100644 --- a/lib/add_book_page/add_book_page_views/Add_book_button.dart +++ b/lib/add_book_page/add_book_page_views/Add_book_button.dart @@ -49,7 +49,7 @@ class AddBookButton extends StatelessWidget { author: AddBookPage.authorName.text, price: AddBookPage.price.text, description: AddBookPage.description.text, - inCart: true)); + inCart: false)); Navigator.push(context, MaterialPageRoute(builder: (context) => const MyHomePage())); AddBookPage.imageLink.clear(); diff --git a/lib/add_book_page/add_book_page_views/reusable_text_button.dart b/lib/add_book_page/add_book_page_views/reusable_text_button.dart index 98c6d8c..b4772ce 100644 --- a/lib/add_book_page/add_book_page_views/reusable_text_button.dart +++ b/lib/add_book_page/add_book_page_views/reusable_text_button.dart @@ -37,7 +37,6 @@ Widget ReusableTextField( controller: myControler, onChanged: ((X) { givenValues = AddBookPage.bookName.text; - print(givenValues); }), ), ); diff --git a/lib/book_details_page/book_details_page.dart b/lib/book_details_page/book_details_page.dart index d0b122e..a46abf1 100644 --- a/lib/book_details_page/book_details_page.dart +++ b/lib/book_details_page/book_details_page.dart @@ -5,6 +5,7 @@ import 'package:book_store_app/book_details_page/book_details_views/book_rating. import 'package:book_store_app/book_details_page/book_details_views/book_title.dart'; import 'package:book_store_app/book_details_page/book_details_views/bottom_buttons.dart'; import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; +import 'package:book_store_app/main_views/listed_books.dart'; import 'package:book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; @@ -37,7 +38,7 @@ class BookDetailsPage extends StatelessWidget { ) ], ), - floatingActionButton: BuyAndDetailsButtons(boughtBook: desiredBook, desiredBookIndex: 1,)); + floatingActionButton: BuyAndDetailsButtons(boughtBook: desiredBook, desiredBookIndex: ListedBooks.desiredBookIndex??0, )); } } diff --git a/lib/book_details_page/book_details_views/book_rating.dart b/lib/book_details_page/book_details_views/book_rating.dart index 129ac03..438a450 100644 --- a/lib/book_details_page/book_details_views/book_rating.dart +++ b/lib/book_details_page/book_details_views/book_rating.dart @@ -1,5 +1,3 @@ - -import 'package:book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; class BookRating extends StatelessWidget { @@ -16,7 +14,7 @@ class BookRating extends StatelessWidget { StarDisplay( value: rating, ), - Text(" " + rating.toString() + "/5") + Text(" $rating/5") ], ); } diff --git a/lib/book_details_page/book_details_views/bottom_buttons.dart b/lib/book_details_page/book_details_views/bottom_buttons.dart index cff4e5f..ada6776 100644 --- a/lib/book_details_page/book_details_views/bottom_buttons.dart +++ b/lib/book_details_page/book_details_views/bottom_buttons.dart @@ -7,7 +7,8 @@ import 'package:flutter/material.dart'; class BuyAndDetailsButtons extends StatelessWidget { const BuyAndDetailsButtons({ Key? key, - required this.boughtBook, required this.desiredBookIndex, + required this.boughtBook, + required this.desiredBookIndex, }) : super(key: key); final BookModel boughtBook; final int desiredBookIndex; @@ -20,7 +21,7 @@ class BuyAndDetailsButtons extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.end, children: [ Padding( - padding: EdgeInsets.only(bottom: 20, left: 25), + padding: const EdgeInsets.only(bottom: 20, left: 25), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -45,7 +46,7 @@ class BuyAndDetailsButtons extends StatelessWidget { shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), )), - child: Icon(Icons.preview, color: Colors.black54), + child: const Icon(Icons.preview, color: Colors.black54), onPressed: () => print('object'), ), ), @@ -70,7 +71,7 @@ class BuyAndDetailsButtons extends StatelessWidget { shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), )), - child: Icon(Icons.reviews, color: Colors.black54), + child: const Icon(Icons.reviews, color: Colors.black54), onPressed: () => print('object'), ), ), @@ -101,16 +102,16 @@ class BuyAndDetailsButtons extends StatelessWidget { borderRadius: BorderRadius.circular(15), )), child: Text("Buy now for $price\$", - style: TextStyle( + style: const TextStyle( fontSize: 17, fontWeight: FontWeight.w400, color: Colors.white)), onPressed: () { BookModel.book[desiredBookIndex].inCart = true; Navigator.push( - context, - MaterialPageRoute( - builder: (context) => CartPage())); + context, + MaterialPageRoute( + builder: (context) => const CartPage())); }, ), ), diff --git a/lib/book_details_page/book_details_views/top_bar.dart b/lib/book_details_page/book_details_views/top_bar.dart index 62e5df7..d87112a 100644 --- a/lib/book_details_page/book_details_views/top_bar.dart +++ b/lib/book_details_page/book_details_views/top_bar.dart @@ -9,7 +9,7 @@ class TopBar extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: EdgeInsets.only(bottom: 5, top: 70, left: 5, right: 20), + padding: const EdgeInsets.only(bottom: 5, top: 70, left: 5, right: 20), child: Row( children: [ TextButton( @@ -20,7 +20,7 @@ class TopBar extends StatelessWidget { color: Colors.black, ) ), - Spacer(), + const Spacer(), TextButton( onPressed: () => print('hi'), child: const Icon( diff --git a/lib/main.dart b/lib/main.dart index 81e276d..b16de48 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -17,7 +17,7 @@ class MyApp extends StatelessWidget { theme: ThemeData( primarySwatch: Colors.blue, ), - home: MyHomePage()); + home: const MyHomePage()); } } diff --git a/lib/main_views/listed_books.dart b/lib/main_views/listed_books.dart index f634e38..40cded7 100644 --- a/lib/main_views/listed_books.dart +++ b/lib/main_views/listed_books.dart @@ -1,6 +1,5 @@ import 'package:book_store_app/book_details_page/book_details_page.dart'; import 'package:book_store_app/book_details_page/book_details_views/book_rating.dart'; -import 'package:book_store_app/main.dart'; import 'package:book_store_app/main_views/search_box.dart'; import 'package:book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; @@ -15,16 +14,18 @@ class ListedBooks extends StatelessWidget { final double? paddingRight; final bool? toggleCartFilter; static ScrollController myScrollController = ScrollController(); + static int? desiredBookIndex; bool filterSearchFunction( BookModel element, String searchWord, bool toggleCartFilter) { - if (toggleCartFilter == false && element.title.toLowerCase().contains(searchWord.toLowerCase())) { + if (toggleCartFilter == false && + element.title.toLowerCase().contains(searchWord.toLowerCase())) { return true; } - if (element.inCart == true && toggleCartFilter == true) { - return true; - } else { - return false; + if (element.inCart == true && toggleCartFilter == true) { + return true; + } else { + return false; } } @@ -43,7 +44,7 @@ class ListedBooks extends StatelessWidget { bottom: 5, left: paddingLeft ?? 0, right: paddingRight ?? 0), children: BookModel.book .where((element) => filterSearchFunction(element, - SearchBox.searchWord.value, toggleCartFilter??false)) + SearchBox.searchWord.value, toggleCartFilter ?? false)) .map((e) => TextButton( style: TextButton.styleFrom(), child: Container( @@ -92,7 +93,7 @@ class ListedBooks extends StatelessWidget { height: 2), ), Container( - padding: EdgeInsets.only(top: 10), + padding: const EdgeInsets.only(top: 10), child: StarDisplay( value: e.rating, ), @@ -104,7 +105,7 @@ class ListedBooks extends StatelessWidget { ), ), onPressed: () { - int desiredBookIndex = BookModel.book.indexOf(e); + desiredBookIndex = BookModel.book.indexOf(e); Navigator.push( context, MaterialPageRoute( diff --git a/lib/main_views/navigators.dart b/lib/main_views/navigators.dart index 7d7a941..8359a61 100644 --- a/lib/main_views/navigators.dart +++ b/lib/main_views/navigators.dart @@ -1,8 +1,6 @@ import 'package:book_store_app/add_book_page/add_book_page.dart'; -import 'package:book_store_app/book_details_page/book_details_page.dart'; import 'package:book_store_app/cart_page/cart_page.dart'; import 'package:book_store_app/main.dart'; -import 'package:book_store_app/main_views/profile.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -47,12 +45,12 @@ class Navigators extends StatelessWidget { ), ), onPressed: () { - currentPageCartRx?.value = currentPageCart ?? false; + currentPageCartRx.value = currentPageCart ?? false; Navigator.push( context, MaterialPageRoute( - builder: (context) => MyHomePage())); + builder: (context) => const MyHomePage())); }, child: Obx(() { return Icon(Icons.home, @@ -69,7 +67,7 @@ class Navigators extends StatelessWidget { ), onPressed: () { Navigator.push(context, - MaterialPageRoute(builder: (context) => CartPage())); + MaterialPageRoute(builder: (context) => const CartPage())); }, child: Icon(Icons.shopping_cart_rounded, color: currentPageCartRx == false.obs @@ -86,7 +84,7 @@ class Navigators extends StatelessWidget { Navigator.push( context, MaterialPageRoute( - builder: (context) => AddBookPage())); + builder: (context) => const AddBookPage())); }, child: Icon( Icons.add, diff --git a/lib/main_views/profile.dart b/lib/main_views/profile.dart index d30d5af..bf65120 100644 --- a/lib/main_views/profile.dart +++ b/lib/main_views/profile.dart @@ -32,7 +32,7 @@ class Profile extends StatelessWidget { style: TextStyle( fontWeight: FontWeight.w300, fontSize: 20), )), - Spacer(), + const Spacer(), TextButton( onPressed: () => print('hi'), child: const Icon( diff --git a/lib/models/book_model.dart b/lib/models/book_model.dart index 43e9301..582da6b 100644 --- a/lib/models/book_model.dart +++ b/lib/models/book_model.dart @@ -9,7 +9,7 @@ class BookModel { required this.author, required this.price, required this.description, - this.inCart, + required this.inCart, }); final String imageUrl; final double rating; @@ -17,8 +17,7 @@ class BookModel { final String author; final String price; final String description; - late bool? inCart; - + bool inCart; static List book = [ BookModel( imageUrl: @@ -38,7 +37,7 @@ class BookModel { author: 'Suzy Monkes2', description: '2', price: '12', - inCart: true + inCart: false ), ]; } From a8b311ea0ffe459a3bb07e9883f5a9733976fbb0 Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Wed, 31 Aug 2022 02:41:54 +0300 Subject: [PATCH 06/12] nothing --- lib/add_book_page/add_book_page.dart | 8 ++++---- .../add_book_page_views/Add_book_button.dart | 6 +++--- .../reusable_text_button.dart | 2 +- lib/book_details_page/book_details_page.dart | 18 +++++++++--------- .../book_details_views/bottom_buttons.dart | 4 ++-- .../book_details_views/top_bar.dart | 2 +- lib/cart_page/cart_page.dart | 12 ++++++------ lib/main.dart | 8 ++++---- lib/main_views/listed_books.dart | 8 ++++---- lib/main_views/navigators.dart | 6 +++--- lib/main_views/search_box.dart | 2 +- pubspec.yaml | 2 +- test/widget_test.dart | 2 +- 13 files changed, 40 insertions(+), 40 deletions(-) diff --git a/lib/add_book_page/add_book_page.dart b/lib/add_book_page/add_book_page.dart index 5cab847..8afcfc0 100644 --- a/lib/add_book_page/add_book_page.dart +++ b/lib/add_book_page/add_book_page.dart @@ -1,7 +1,7 @@ -import 'package:book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; -import 'package:book_store_app/add_book_page/add_book_page_views/reusable_text_button.dart'; -import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; -import 'package:book_store_app/main.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page_views/reusable_text_button.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/top_bar.dart'; +import 'package:my_book_store_app/main.dart'; import 'package:flutter/material.dart'; class AddBookPage extends StatelessWidget { diff --git a/lib/add_book_page/add_book_page_views/Add_book_button.dart b/lib/add_book_page/add_book_page_views/Add_book_button.dart index 3ae2478..5977f1c 100644 --- a/lib/add_book_page/add_book_page_views/Add_book_button.dart +++ b/lib/add_book_page/add_book_page_views/Add_book_button.dart @@ -1,6 +1,6 @@ -import 'package:book_store_app/add_book_page/add_book_page.dart'; -import 'package:book_store_app/main.dart'; -import 'package:book_store_app/models/book_model.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page.dart'; +import 'package:my_book_store_app/main.dart'; +import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; class AddBookButton extends StatelessWidget { diff --git a/lib/add_book_page/add_book_page_views/reusable_text_button.dart b/lib/add_book_page/add_book_page_views/reusable_text_button.dart index b4772ce..978ec10 100644 --- a/lib/add_book_page/add_book_page_views/reusable_text_button.dart +++ b/lib/add_book_page/add_book_page_views/reusable_text_button.dart @@ -1,4 +1,4 @@ -import 'package:book_store_app/add_book_page/add_book_page.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page.dart'; import 'package:flutter/material.dart'; Widget ReusableTextField( {required hintText, diff --git a/lib/book_details_page/book_details_page.dart b/lib/book_details_page/book_details_page.dart index a46abf1..aefbc53 100644 --- a/lib/book_details_page/book_details_page.dart +++ b/lib/book_details_page/book_details_page.dart @@ -1,12 +1,12 @@ -import 'package:book_store_app/book_details_page/book_details_views/book_author.dart'; -import 'package:book_store_app/book_details_page/book_details_views/book_cover.dart'; -import 'package:book_store_app/book_details_page/book_details_views/book_description.dart'; -import 'package:book_store_app/book_details_page/book_details_views/book_rating.dart'; -import 'package:book_store_app/book_details_page/book_details_views/book_title.dart'; -import 'package:book_store_app/book_details_page/book_details_views/bottom_buttons.dart'; -import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; -import 'package:book_store_app/main_views/listed_books.dart'; -import 'package:book_store_app/models/book_model.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_author.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_cover.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_description.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_rating.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_title.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/bottom_buttons.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/top_bar.dart'; +import 'package:my_book_store_app/main_views/listed_books.dart'; +import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; class BookDetailsPage extends StatelessWidget { diff --git a/lib/book_details_page/book_details_views/bottom_buttons.dart b/lib/book_details_page/book_details_views/bottom_buttons.dart index ada6776..497d931 100644 --- a/lib/book_details_page/book_details_views/bottom_buttons.dart +++ b/lib/book_details_page/book_details_views/bottom_buttons.dart @@ -1,5 +1,5 @@ -import 'package:book_store_app/cart_page/cart_page.dart'; -import 'package:book_store_app/models/book_model.dart'; +import 'package:my_book_store_app/cart_page/cart_page.dart'; +import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; //import 'package:google_fonts/google_fonts.dart'; diff --git a/lib/book_details_page/book_details_views/top_bar.dart b/lib/book_details_page/book_details_views/top_bar.dart index d87112a..a8cc68b 100644 --- a/lib/book_details_page/book_details_views/top_bar.dart +++ b/lib/book_details_page/book_details_views/top_bar.dart @@ -1,4 +1,4 @@ -import 'package:book_store_app/main.dart'; +import 'package:my_book_store_app/main.dart'; import 'package:flutter/material.dart'; class TopBar extends StatelessWidget { diff --git a/lib/cart_page/cart_page.dart b/lib/cart_page/cart_page.dart index fad70c8..6d1f843 100644 --- a/lib/cart_page/cart_page.dart +++ b/lib/cart_page/cart_page.dart @@ -1,9 +1,9 @@ -import 'package:book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; -import 'package:book_store_app/add_book_page/add_book_page_views/reusable_text_button.dart'; -import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; -import 'package:book_store_app/main.dart'; -import 'package:book_store_app/main_views/listed_books.dart'; -import 'package:book_store_app/main_views/navigators.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page_views/reusable_text_button.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/top_bar.dart'; +import 'package:my_book_store_app/main.dart'; +import 'package:my_book_store_app/main_views/listed_books.dart'; +import 'package:my_book_store_app/main_views/navigators.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; diff --git a/lib/main.dart b/lib/main.dart index b16de48..3417b48 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,7 @@ -import 'package:book_store_app/main_views/listed_books.dart'; -import 'package:book_store_app/main_views/navigators.dart'; -import 'package:book_store_app/main_views/profile.dart'; -import 'package:book_store_app/main_views/search_box.dart'; +import 'package:my_book_store_app/main_views/listed_books.dart'; +import 'package:my_book_store_app/main_views/navigators.dart'; +import 'package:my_book_store_app/main_views/profile.dart'; +import 'package:my_book_store_app/main_views/search_box.dart'; import 'package:flutter/material.dart'; void main() { diff --git a/lib/main_views/listed_books.dart b/lib/main_views/listed_books.dart index 40cded7..6154e42 100644 --- a/lib/main_views/listed_books.dart +++ b/lib/main_views/listed_books.dart @@ -1,7 +1,7 @@ -import 'package:book_store_app/book_details_page/book_details_page.dart'; -import 'package:book_store_app/book_details_page/book_details_views/book_rating.dart'; -import 'package:book_store_app/main_views/search_box.dart'; -import 'package:book_store_app/models/book_model.dart'; +import 'package:my_book_store_app/book_details_page/book_details_page.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_rating.dart'; +import 'package:my_book_store_app/main_views/search_box.dart'; +import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; diff --git a/lib/main_views/navigators.dart b/lib/main_views/navigators.dart index 8359a61..dc6cf28 100644 --- a/lib/main_views/navigators.dart +++ b/lib/main_views/navigators.dart @@ -1,6 +1,6 @@ -import 'package:book_store_app/add_book_page/add_book_page.dart'; -import 'package:book_store_app/cart_page/cart_page.dart'; -import 'package:book_store_app/main.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page.dart'; +import 'package:my_book_store_app/cart_page/cart_page.dart'; +import 'package:my_book_store_app/main.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; diff --git a/lib/main_views/search_box.dart b/lib/main_views/search_box.dart index e317d72..799e277 100644 --- a/lib/main_views/search_box.dart +++ b/lib/main_views/search_box.dart @@ -1,4 +1,4 @@ -import 'package:book_store_app/main_views/listed_books.dart'; +import 'package:my_book_store_app/main_views/listed_books.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 92703ad..5961e63 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,4 +1,4 @@ -name: book_store_app +name: my_book_store_app description: A new Flutter project. # The following line prevents the package from being accidentally published to diff --git a/test/widget_test.dart b/test/widget_test.dart index 7730be6..85c6761 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:book_store_app/main.dart'; +import 'package:my_book_store_app/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { From 9c68f937bdc039dfff18e61c3c5b0be08e7b672f Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Wed, 31 Aug 2022 02:44:35 +0300 Subject: [PATCH 07/12] nothing --- lib/add_book_page/add_book_page.dart | 8 ++++---- .../add_book_page_views/Add_book_button.dart | 6 +++--- .../reusable_text_button.dart | 2 +- lib/book_details_page/book_details_page.dart | 18 +++++++++--------- .../book_details_views/bottom_buttons.dart | 4 ++-- .../book_details_views/top_bar.dart | 2 +- lib/cart_page/cart_page.dart | 12 ++++++------ lib/main.dart | 8 ++++---- lib/main_views/listed_books.dart | 8 ++++---- lib/main_views/navigators.dart | 6 +++--- lib/main_views/search_box.dart | 2 +- pubspec.yaml | 2 +- test/widget_test.dart | 2 +- 13 files changed, 40 insertions(+), 40 deletions(-) diff --git a/lib/add_book_page/add_book_page.dart b/lib/add_book_page/add_book_page.dart index 5cab847..8afcfc0 100644 --- a/lib/add_book_page/add_book_page.dart +++ b/lib/add_book_page/add_book_page.dart @@ -1,7 +1,7 @@ -import 'package:book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; -import 'package:book_store_app/add_book_page/add_book_page_views/reusable_text_button.dart'; -import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; -import 'package:book_store_app/main.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page_views/reusable_text_button.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/top_bar.dart'; +import 'package:my_book_store_app/main.dart'; import 'package:flutter/material.dart'; class AddBookPage extends StatelessWidget { diff --git a/lib/add_book_page/add_book_page_views/Add_book_button.dart b/lib/add_book_page/add_book_page_views/Add_book_button.dart index 3ae2478..5977f1c 100644 --- a/lib/add_book_page/add_book_page_views/Add_book_button.dart +++ b/lib/add_book_page/add_book_page_views/Add_book_button.dart @@ -1,6 +1,6 @@ -import 'package:book_store_app/add_book_page/add_book_page.dart'; -import 'package:book_store_app/main.dart'; -import 'package:book_store_app/models/book_model.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page.dart'; +import 'package:my_book_store_app/main.dart'; +import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; class AddBookButton extends StatelessWidget { diff --git a/lib/add_book_page/add_book_page_views/reusable_text_button.dart b/lib/add_book_page/add_book_page_views/reusable_text_button.dart index b4772ce..978ec10 100644 --- a/lib/add_book_page/add_book_page_views/reusable_text_button.dart +++ b/lib/add_book_page/add_book_page_views/reusable_text_button.dart @@ -1,4 +1,4 @@ -import 'package:book_store_app/add_book_page/add_book_page.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page.dart'; import 'package:flutter/material.dart'; Widget ReusableTextField( {required hintText, diff --git a/lib/book_details_page/book_details_page.dart b/lib/book_details_page/book_details_page.dart index a46abf1..aefbc53 100644 --- a/lib/book_details_page/book_details_page.dart +++ b/lib/book_details_page/book_details_page.dart @@ -1,12 +1,12 @@ -import 'package:book_store_app/book_details_page/book_details_views/book_author.dart'; -import 'package:book_store_app/book_details_page/book_details_views/book_cover.dart'; -import 'package:book_store_app/book_details_page/book_details_views/book_description.dart'; -import 'package:book_store_app/book_details_page/book_details_views/book_rating.dart'; -import 'package:book_store_app/book_details_page/book_details_views/book_title.dart'; -import 'package:book_store_app/book_details_page/book_details_views/bottom_buttons.dart'; -import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; -import 'package:book_store_app/main_views/listed_books.dart'; -import 'package:book_store_app/models/book_model.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_author.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_cover.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_description.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_rating.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_title.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/bottom_buttons.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/top_bar.dart'; +import 'package:my_book_store_app/main_views/listed_books.dart'; +import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; class BookDetailsPage extends StatelessWidget { diff --git a/lib/book_details_page/book_details_views/bottom_buttons.dart b/lib/book_details_page/book_details_views/bottom_buttons.dart index ada6776..497d931 100644 --- a/lib/book_details_page/book_details_views/bottom_buttons.dart +++ b/lib/book_details_page/book_details_views/bottom_buttons.dart @@ -1,5 +1,5 @@ -import 'package:book_store_app/cart_page/cart_page.dart'; -import 'package:book_store_app/models/book_model.dart'; +import 'package:my_book_store_app/cart_page/cart_page.dart'; +import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; //import 'package:google_fonts/google_fonts.dart'; diff --git a/lib/book_details_page/book_details_views/top_bar.dart b/lib/book_details_page/book_details_views/top_bar.dart index d87112a..a8cc68b 100644 --- a/lib/book_details_page/book_details_views/top_bar.dart +++ b/lib/book_details_page/book_details_views/top_bar.dart @@ -1,4 +1,4 @@ -import 'package:book_store_app/main.dart'; +import 'package:my_book_store_app/main.dart'; import 'package:flutter/material.dart'; class TopBar extends StatelessWidget { diff --git a/lib/cart_page/cart_page.dart b/lib/cart_page/cart_page.dart index fad70c8..6d1f843 100644 --- a/lib/cart_page/cart_page.dart +++ b/lib/cart_page/cart_page.dart @@ -1,9 +1,9 @@ -import 'package:book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; -import 'package:book_store_app/add_book_page/add_book_page_views/reusable_text_button.dart'; -import 'package:book_store_app/book_details_page/book_details_views/top_bar.dart'; -import 'package:book_store_app/main.dart'; -import 'package:book_store_app/main_views/listed_books.dart'; -import 'package:book_store_app/main_views/navigators.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page_views/reusable_text_button.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/top_bar.dart'; +import 'package:my_book_store_app/main.dart'; +import 'package:my_book_store_app/main_views/listed_books.dart'; +import 'package:my_book_store_app/main_views/navigators.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; diff --git a/lib/main.dart b/lib/main.dart index b16de48..3417b48 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,7 @@ -import 'package:book_store_app/main_views/listed_books.dart'; -import 'package:book_store_app/main_views/navigators.dart'; -import 'package:book_store_app/main_views/profile.dart'; -import 'package:book_store_app/main_views/search_box.dart'; +import 'package:my_book_store_app/main_views/listed_books.dart'; +import 'package:my_book_store_app/main_views/navigators.dart'; +import 'package:my_book_store_app/main_views/profile.dart'; +import 'package:my_book_store_app/main_views/search_box.dart'; import 'package:flutter/material.dart'; void main() { diff --git a/lib/main_views/listed_books.dart b/lib/main_views/listed_books.dart index 40cded7..6154e42 100644 --- a/lib/main_views/listed_books.dart +++ b/lib/main_views/listed_books.dart @@ -1,7 +1,7 @@ -import 'package:book_store_app/book_details_page/book_details_page.dart'; -import 'package:book_store_app/book_details_page/book_details_views/book_rating.dart'; -import 'package:book_store_app/main_views/search_box.dart'; -import 'package:book_store_app/models/book_model.dart'; +import 'package:my_book_store_app/book_details_page/book_details_page.dart'; +import 'package:my_book_store_app/book_details_page/book_details_views/book_rating.dart'; +import 'package:my_book_store_app/main_views/search_box.dart'; +import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; diff --git a/lib/main_views/navigators.dart b/lib/main_views/navigators.dart index 8359a61..dc6cf28 100644 --- a/lib/main_views/navigators.dart +++ b/lib/main_views/navigators.dart @@ -1,6 +1,6 @@ -import 'package:book_store_app/add_book_page/add_book_page.dart'; -import 'package:book_store_app/cart_page/cart_page.dart'; -import 'package:book_store_app/main.dart'; +import 'package:my_book_store_app/add_book_page/add_book_page.dart'; +import 'package:my_book_store_app/cart_page/cart_page.dart'; +import 'package:my_book_store_app/main.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; diff --git a/lib/main_views/search_box.dart b/lib/main_views/search_box.dart index e317d72..799e277 100644 --- a/lib/main_views/search_box.dart +++ b/lib/main_views/search_box.dart @@ -1,4 +1,4 @@ -import 'package:book_store_app/main_views/listed_books.dart'; +import 'package:my_book_store_app/main_views/listed_books.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 92703ad..5961e63 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,4 +1,4 @@ -name: book_store_app +name: my_book_store_app description: A new Flutter project. # The following line prevents the package from being accidentally published to diff --git a/test/widget_test.dart b/test/widget_test.dart index 7730be6..85c6761 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:book_store_app/main.dart'; +import 'package:my_book_store_app/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { From 32b87430b9517a1695a4f6918f7b0d3d2e233b6d Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Wed, 31 Aug 2022 15:26:37 +0300 Subject: [PATCH 08/12] small changes --- lib/main.dart | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 3417b48..92ee408 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -39,12 +39,13 @@ class _MyHomePageState extends State { child:Padding( padding: const EdgeInsets.only(top: 20, left: 20, right: 20), child: - Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - const SizedBox(height: 50), - const Profile(), - const SearchBox(/*currentText: currentText*/), - title('Book List'), - const ListedBooks() + Column(crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox(height: 50), + const Profile(), + const SearchBox(/*currentText: currentText*/), + title('Book List'), + const ListedBooks() ]), ), ), From 9cb99b144412efd6c2f792edd4f8d6267661adba Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Wed, 31 Aug 2022 16:50:17 +0300 Subject: [PATCH 09/12] Final App after formating and cleaning --- lib/add_book_page/add_book_page.dart | 28 ++--- .../add_book_page_views/Add_book_button.dart | 5 +- .../reusable_text_button.dart | 16 +-- lib/book_details_page/book_details_page.dart | 25 ++-- .../book_details_views/book_author.dart | 6 +- .../book_details_views/book_cover.dart | 15 +-- .../book_details_views/book_description.dart | 20 +--- .../book_details_views/book_rating.dart | 24 +--- .../book_details_views/book_title.dart | 10 +- .../book_details_views/bottom_buttons.dart | 28 ++--- .../book_details_views/top_bar.dart | 20 +--- lib/cart_page/cart_page.dart | 33 +++--- lib/main.dart | 29 ++--- lib/main_views/listed_books.dart | 46 ++----- lib/main_views/navigators.dart | 112 ++++++------------ lib/main_views/profile.dart | 28 ++--- lib/main_views/search_box.dart | 28 ++--- lib/models/book_model.dart | 1 - 18 files changed, 146 insertions(+), 328 deletions(-) diff --git a/lib/add_book_page/add_book_page.dart b/lib/add_book_page/add_book_page.dart index 8afcfc0..2c24adf 100644 --- a/lib/add_book_page/add_book_page.dart +++ b/lib/add_book_page/add_book_page.dart @@ -5,9 +5,7 @@ import 'package:my_book_store_app/main.dart'; import 'package:flutter/material.dart'; class AddBookPage extends StatelessWidget { - const AddBookPage({ - Key? key, - }) : super(key: key); + const AddBookPage({Key? key}) : super(key: key); static TextEditingController bookName = TextEditingController(); static TextEditingController authorName = TextEditingController(); static TextEditingController price = TextEditingController(); @@ -31,25 +29,21 @@ class AddBookPage extends StatelessWidget { child: ListView( padding: const EdgeInsets.only(left: 20, top: 30, right: 20), children: [ - ReusableTextField(hintText: 'Book Name...', lines: 1, myControler: bookName), - ReusableTextField(hintText: 'Author Name...', lines: 1, myControler: authorName), - ReusableTextField(hintText: 'Price in \$...', lines: 1, myControler: price), - ReusableTextField(hintText: 'Image Link...', lines: 1, myControler: imageLink), - ReusableTextField(hintText: 'Rating...', lines: 1, myControler: rating), + reusableTextField( hintText: 'Book Name..', lines: 1, myControler: bookName), + reusableTextField( hintText: 'Author Name..', lines: 1, myControler: authorName), + reusableTextField( hintText: 'Price in \$..', lines: 1, myControler: price), + reusableTextField( hintText: 'Image Link..', lines: 1, myControler: imageLink), + reusableTextField( hintText: 'Rating..', lines: 1, myControler: rating), Container( height: 172, - margin: EdgeInsets.only( - bottom: MediaQuery.of(context).viewInsets.bottom +150 // so that the whole thing always move +10 - ), - child: - ReusableTextField(hintText: 'Description', lines: 6, myControler: description)), - ], + margin: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom + 150), + child: reusableTextField( hintText: 'Description', lines: 6, myControler: description)), + ], ), ) ], ), - floatingActionButton: const AddBookButton() - ), + floatingActionButton: const AddBookButton()), ); } -} \ No newline at end of file +} diff --git a/lib/add_book_page/add_book_page_views/Add_book_button.dart b/lib/add_book_page/add_book_page_views/Add_book_button.dart index 5977f1c..9614505 100644 --- a/lib/add_book_page/add_book_page_views/Add_book_button.dart +++ b/lib/add_book_page/add_book_page_views/Add_book_button.dart @@ -4,10 +4,7 @@ import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; class AddBookButton extends StatelessWidget { - const AddBookButton({ - Key? key, - - }) : super(key: key); + const AddBookButton({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/add_book_page/add_book_page_views/reusable_text_button.dart b/lib/add_book_page/add_book_page_views/reusable_text_button.dart index 978ec10..8e60192 100644 --- a/lib/add_book_page/add_book_page_views/reusable_text_button.dart +++ b/lib/add_book_page/add_book_page_views/reusable_text_button.dart @@ -1,10 +1,9 @@ -import 'package:my_book_store_app/add_book_page/add_book_page.dart'; import 'package:flutter/material.dart'; -Widget ReusableTextField( + +Widget reusableTextField( {required hintText, required int lines, required TextEditingController myControler}) { - String givenValues; return Container( margin: const EdgeInsets.only(top: 17), decoration: BoxDecoration( @@ -24,20 +23,13 @@ Widget ReusableTextField( decoration: InputDecoration( hintText: hintText, hintStyle: const TextStyle(color: Colors.grey), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(15), - ), - enabledBorder: const OutlineInputBorder( - borderSide: BorderSide.none, - ), + border: OutlineInputBorder(borderRadius: BorderRadius.circular(15)), + enabledBorder: const OutlineInputBorder(borderSide: BorderSide.none), focusedBorder: OutlineInputBorder( borderSide: const BorderSide(width: 1, color: Colors.blue), borderRadius: BorderRadius.circular(15))), autofocus: false, controller: myControler, - onChanged: ((X) { - givenValues = AddBookPage.bookName.text; - }), ), ); } diff --git a/lib/book_details_page/book_details_page.dart b/lib/book_details_page/book_details_page.dart index aefbc53..dfd0f3a 100644 --- a/lib/book_details_page/book_details_page.dart +++ b/lib/book_details_page/book_details_page.dart @@ -5,13 +5,15 @@ import 'package:my_book_store_app/book_details_page/book_details_views/book_rati import 'package:my_book_store_app/book_details_page/book_details_views/book_title.dart'; import 'package:my_book_store_app/book_details_page/book_details_views/bottom_buttons.dart'; import 'package:my_book_store_app/book_details_page/book_details_views/top_bar.dart'; -import 'package:my_book_store_app/main_views/listed_books.dart'; import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; class BookDetailsPage extends StatelessWidget { - const BookDetailsPage({Key? key, required this.desiredBook}) : super(key: key); + const BookDetailsPage({Key? key, required this.desiredBook,required this.desiredBookIndex}) + : super(key: key); final BookModel desiredBook; + final int desiredBookIndex; + @override Widget build(BuildContext context) { return Scaffold( @@ -22,23 +24,14 @@ class BookDetailsPage extends StatelessWidget { children: [ BookCover(url: desiredBook.imageUrl), BookTitle(title: desiredBook.title), - BookAuthor( - author: desiredBook.author, - ), - const SizedBox( - height: 5, - ), - BookRating( - rating: desiredBook.rating, - ), - BookDescription( - description: desiredBook.description, - ), + BookAuthor(author: desiredBook.author), + const SizedBox(height: 5), + BookRating(rating: desiredBook.rating), + BookDescription(description: desiredBook.description), ], ) ], ), - floatingActionButton: BuyAndDetailsButtons(boughtBook: desiredBook, desiredBookIndex: ListedBooks.desiredBookIndex??0, )); + floatingActionButton: BuyAndDetailsButtons(boughtBook: desiredBook, desiredBookIndex: desiredBookIndex)); } } - diff --git a/lib/book_details_page/book_details_views/book_author.dart b/lib/book_details_page/book_details_views/book_author.dart index e3b2b5b..7c1c500 100644 --- a/lib/book_details_page/book_details_views/book_author.dart +++ b/lib/book_details_page/book_details_views/book_author.dart @@ -1,11 +1,7 @@ - import 'package:flutter/material.dart'; class BookAuthor extends StatelessWidget { - const BookAuthor({ - Key? key, - required this.author, - }) : super(key: key); + const BookAuthor({Key? key, required this.author}) : super(key: key); final String author; @override Widget build(BuildContext context) { diff --git a/lib/book_details_page/book_details_views/book_cover.dart b/lib/book_details_page/book_details_views/book_cover.dart index 2cca017..1904b2a 100644 --- a/lib/book_details_page/book_details_views/book_cover.dart +++ b/lib/book_details_page/book_details_views/book_cover.dart @@ -1,11 +1,7 @@ - import 'package:flutter/material.dart'; class BookCover extends StatelessWidget { - const BookCover({ - Key? key, - required this.url, - }) : super(key: key); + const BookCover({Key? key, required this.url}) : super(key: key); final String url; @override Widget build(BuildContext context) { @@ -14,11 +10,10 @@ class BookCover extends StatelessWidget { width: 220, decoration: BoxDecoration( image: DecorationImage( - image: NetworkImage(url), - alignment: Alignment.topCenter, - fit: BoxFit.cover, - ), + image: NetworkImage(url), + alignment: Alignment.topCenter, + fit: BoxFit.cover), borderRadius: BorderRadius.circular(7)), ); } -} \ No newline at end of file +} diff --git a/lib/book_details_page/book_details_views/book_description.dart b/lib/book_details_page/book_details_views/book_description.dart index 23cfd4d..3e06c4d 100644 --- a/lib/book_details_page/book_details_views/book_description.dart +++ b/lib/book_details_page/book_details_views/book_description.dart @@ -1,11 +1,6 @@ - import 'package:flutter/material.dart'; - class BookDescription extends StatelessWidget { - const BookDescription({ - Key? key, - required this.description, - }) : super(key: key); + const BookDescription({Key? key, required this.description}) : super(key: key); final String description; @override Widget build(BuildContext context) { @@ -13,16 +8,11 @@ class BookDescription extends StatelessWidget { padding: const EdgeInsets.only(left: 10, right: 10, top: 2), child: SingleChildScrollView( scrollDirection: Axis.vertical, - padding: EdgeInsets.only(bottom: 100), + padding: const EdgeInsets.only(bottom: 100), child: SizedBox( - width: 400, - height: 100, - child: Text( - description, - style: - TextStyle(fontSize: 15, color: Colors.grey[700], height: 1.4), - ), - ), + width: 400, + height: 100, + child: Text(description, style: TextStyle(fontSize: 15, color: Colors.grey[700], height: 1.4))), ), ); } diff --git a/lib/book_details_page/book_details_views/book_rating.dart b/lib/book_details_page/book_details_views/book_rating.dart index 438a450..28272bf 100644 --- a/lib/book_details_page/book_details_views/book_rating.dart +++ b/lib/book_details_page/book_details_views/book_rating.dart @@ -1,39 +1,27 @@ import 'package:flutter/material.dart'; class BookRating extends StatelessWidget { - const BookRating({ - Key? key, - required this.rating, - }) : super(key: key); + const BookRating({Key? key, required this.rating}) : super(key: key); final double rating; @override Widget build(BuildContext context) { return Row( mainAxisAlignment: MainAxisAlignment.center, - children: [ - StarDisplay( - value: rating, - ), - Text(" $rating/5") - ], + children: [StarDisplay(value: rating), Text(" $rating/5")], ); } } + class StarDisplay extends StatelessWidget { final double value; - const StarDisplay({Key? key, this.value = 0}) - : assert(value != null), - super(key: key); + const StarDisplay({Key? key, this.value = 0}) : super(key: key); @override Widget build(BuildContext context) { return Row( mainAxisSize: MainAxisSize.min, children: List.generate(5, (index) { - return Icon( - index < value.round() ? Icons.star : Icons.star_border, - color: Colors.amber, - ); + return Icon(index < value.round() ? Icons.star : Icons.star_border, color: Colors.amber); }), ); } -} \ No newline at end of file +} diff --git a/lib/book_details_page/book_details_views/book_title.dart b/lib/book_details_page/book_details_views/book_title.dart index 46d2019..07d36d3 100644 --- a/lib/book_details_page/book_details_views/book_title.dart +++ b/lib/book_details_page/book_details_views/book_title.dart @@ -1,16 +1,10 @@ - import 'package:flutter/material.dart'; class BookTitle extends StatelessWidget { - const BookTitle({ - Key? key, required this.title, - }) : super(key: key); + const BookTitle({Key? key, required this.title}) : super(key: key); final String title; @override Widget build(BuildContext context) { - return Text(title, - style: const TextStyle( - fontSize: 30, fontWeight: FontWeight.bold, height: 2)); + return Text(title, style: const TextStyle( fontSize: 30, fontWeight: FontWeight.bold, height: 2)); } } - diff --git a/lib/book_details_page/book_details_views/bottom_buttons.dart b/lib/book_details_page/book_details_views/bottom_buttons.dart index 497d931..65bccee 100644 --- a/lib/book_details_page/book_details_views/bottom_buttons.dart +++ b/lib/book_details_page/book_details_views/bottom_buttons.dart @@ -2,19 +2,14 @@ import 'package:my_book_store_app/cart_page/cart_page.dart'; import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; -//import 'package:google_fonts/google_fonts.dart'; - class BuyAndDetailsButtons extends StatelessWidget { - const BuyAndDetailsButtons({ - Key? key, - required this.boughtBook, - required this.desiredBookIndex, - }) : super(key: key); + const BuyAndDetailsButtons({Key? key, required this.boughtBook, required this.desiredBookIndex}): super(key: key); final BookModel boughtBook; final int desiredBookIndex; - static String price = BookModel.book[1].price; + @override Widget build(BuildContext context) { + String price = BookModel.book[desiredBookIndex].price; return Center( child: Column( mainAxisAlignment: MainAxisAlignment.end, @@ -25,9 +20,7 @@ class BuyAndDetailsButtons extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - const Spacer( - flex: 2, - ), + const Spacer(flex: 2), Container( width: 150, height: 45, @@ -50,9 +43,7 @@ class BuyAndDetailsButtons extends StatelessWidget { onPressed: () => print('object'), ), ), - const Spacer( - flex: 1, - ), + const Spacer(flex: 1), Container( width: 150, height: 45, @@ -75,9 +66,7 @@ class BuyAndDetailsButtons extends StatelessWidget { onPressed: () => print('object'), ), ), - const Spacer( - flex: 2, - ) + const Spacer(flex: 2) ], ), ), @@ -102,10 +91,7 @@ class BuyAndDetailsButtons extends StatelessWidget { borderRadius: BorderRadius.circular(15), )), child: Text("Buy now for $price\$", - style: const TextStyle( - fontSize: 17, - fontWeight: FontWeight.w400, - color: Colors.white)), + style: const TextStyle(fontSize: 17, fontWeight: FontWeight.w400, color: Colors.white)), onPressed: () { BookModel.book[desiredBookIndex].inCart = true; Navigator.push( diff --git a/lib/book_details_page/book_details_views/top_bar.dart b/lib/book_details_page/book_details_views/top_bar.dart index a8cc68b..49f912c 100644 --- a/lib/book_details_page/book_details_views/top_bar.dart +++ b/lib/book_details_page/book_details_views/top_bar.dart @@ -2,9 +2,7 @@ import 'package:my_book_store_app/main.dart'; import 'package:flutter/material.dart'; class TopBar extends StatelessWidget { - const TopBar({ - Key? key, - }) : super(key: key); + const TopBar({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -13,22 +11,14 @@ class TopBar extends StatelessWidget { child: Row( children: [ TextButton( - onPressed: () => Navigator.push(context, - MaterialPageRoute(builder: (context) => const MyHomePage())), - child: const Icon( - Icons.arrow_back_ios_new_rounded, - color: Colors.black, - ) - ), + onPressed: () => Navigator.push(context, MaterialPageRoute(builder: (context) => const MyHomePage())), + child: const Icon(Icons.arrow_back_ios_new_rounded, color: Colors.black)), const Spacer(), TextButton( onPressed: () => print('hi'), - child: const Icon( - Icons.more_vert, - color: Colors.black, - )) + child: const Icon(Icons.more_vert, color: Colors.black)) ], ), ); } -} \ No newline at end of file +} diff --git a/lib/cart_page/cart_page.dart b/lib/cart_page/cart_page.dart index 6d1f843..007ce25 100644 --- a/lib/cart_page/cart_page.dart +++ b/lib/cart_page/cart_page.dart @@ -1,16 +1,11 @@ -import 'package:my_book_store_app/add_book_page/add_book_page_views/Add_book_button.dart'; -import 'package:my_book_store_app/add_book_page/add_book_page_views/reusable_text_button.dart'; import 'package:my_book_store_app/book_details_page/book_details_views/top_bar.dart'; import 'package:my_book_store_app/main.dart'; import 'package:my_book_store_app/main_views/listed_books.dart'; import 'package:my_book_store_app/main_views/navigators.dart'; import 'package:flutter/material.dart'; -import 'package:get/get.dart'; class CartPage extends StatelessWidget { - const CartPage({ - Key? key, - }) : super(key: key); + const CartPage({Key? key}) : super(key: key); static TextEditingController bookName = TextEditingController(); static TextEditingController authorName = TextEditingController(); static TextEditingController price = TextEditingController(); @@ -23,18 +18,18 @@ class CartPage extends StatelessWidget { return GestureDetector( onTap: () => FocusManager.instance.primaryFocus?.unfocus(), child: Scaffold( - body: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const TopBar(), - Padding( - padding: const EdgeInsets.only(left: 27), - child: title('Cart')), - const ListedBooks(paddingLeft: 20, paddingRight: 20, toggleCartFilter: true,) - ], - ), - floatingActionButton: Navigators(currentPageCart: true,), - ), + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const TopBar(), + Padding( + padding: const EdgeInsets.only(left: 27), child: title('Cart')), + const ListedBooks(paddingLeft: 20, paddingRight: 20, toggleCartFilter: true) + ], + ), + floatingActionButton: Navigators(currentPageCart: true), + floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, + ), ); } -} \ No newline at end of file +} diff --git a/lib/main.dart b/lib/main.dart index 92ee408..44799c6 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -36,20 +36,20 @@ class _MyHomePageState extends State { child: Scaffold( body: Container( color: Colors.grey[100], - child:Padding( - padding: const EdgeInsets.only(top: 20, left: 20, right: 20), - child: - Column(crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 50), - const Profile(), - const SearchBox(/*currentText: currentText*/), - title('Book List'), - const ListedBooks() - ]), + child: Padding( + padding: const EdgeInsets.only(top: 20, left: 20, right: 20), + child: + Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + const SizedBox(height: 50), + const Profile(), + const SearchBox(), + title('Book List'), + const ListedBooks() + ]), ), ), - floatingActionButton: Navigators(currentPageHome: true,), + floatingActionButton: Navigators(currentPageHome: true), + floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, ), ); } @@ -60,10 +60,7 @@ Padding title(String titles) { padding: const EdgeInsets.only(top: 35), child: Text( titles, - style: const TextStyle( - fontWeight: FontWeight.bold, - fontSize: 25, - ), + style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 25), ), ); } diff --git a/lib/main_views/listed_books.dart b/lib/main_views/listed_books.dart index 6154e42..eee2385 100644 --- a/lib/main_views/listed_books.dart +++ b/lib/main_views/listed_books.dart @@ -4,12 +4,8 @@ import 'package:my_book_store_app/main_views/search_box.dart'; import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; - -//import 'package:google_fonts/google_fonts.dart'; class ListedBooks extends StatelessWidget { - const ListedBooks( - {Key? key, this.paddingLeft, this.paddingRight, this.toggleCartFilter}) - : super(key: key); + const ListedBooks({Key? key, this.paddingLeft, this.paddingRight, this.toggleCartFilter}): super(key: key); final double? paddingLeft; final double? paddingRight; final bool? toggleCartFilter; @@ -18,8 +14,7 @@ class ListedBooks extends StatelessWidget { bool filterSearchFunction( BookModel element, String searchWord, bool toggleCartFilter) { - if (toggleCartFilter == false && - element.title.toLowerCase().contains(searchWord.toLowerCase())) { + if (toggleCartFilter == false && element.title.toLowerCase().contains(searchWord.toLowerCase())) { return true; } if (element.inCart == true && toggleCartFilter == true) { @@ -33,15 +28,11 @@ class ListedBooks extends StatelessWidget { Widget build(BuildContext context) { return Expanded( child: Container( - margin: EdgeInsets.only( - bottom: MediaQuery.of(context).viewInsets.bottom + - 55 // so that the whole thing always move +10 - ), + margin: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom + 55), child: Obx(() { return ListView( controller: myScrollController, - padding: EdgeInsets.only( - bottom: 5, left: paddingLeft ?? 0, right: paddingRight ?? 0), + padding: EdgeInsets.only( bottom: 5, left: paddingLeft ?? 0, right: paddingRight ?? 0), children: BookModel.book .where((element) => filterSearchFunction(element, SearchBox.searchWord.value, toggleCartFilter ?? false)) @@ -71,32 +62,19 @@ class ListedBooks extends StatelessWidget { children: [ Text( e.title, - style: /*GoogleFonts.lato*/ const TextStyle( - color: Colors.black, - fontSize: 17, - fontWeight: FontWeight.w600), + style: const TextStyle( color: Colors.black, fontSize: 17, fontWeight: FontWeight.w600), ), Text( e.author, - style: /*GoogleFonts.lato*/ const TextStyle( - color: Colors.grey, - fontSize: 12, - fontWeight: FontWeight.w600, - height: 2), + style: const TextStyle(color: Colors.grey, fontSize: 12, fontWeight: FontWeight.w600, height: 2), ), Text( "\$${e.price}", - style: /*GoogleFonts.lato*/ TextStyle( - color: Colors.grey[800], - fontSize: 17, - fontWeight: FontWeight.w600, - height: 2), + style: TextStyle(color: Colors.grey[800], fontSize: 17, fontWeight: FontWeight.w600, height: 2), ), Container( padding: const EdgeInsets.only(top: 10), - child: StarDisplay( - value: e.rating, - ), + child: StarDisplay(value: e.rating), ) ], ), @@ -105,13 +83,7 @@ class ListedBooks extends StatelessWidget { ), ), onPressed: () { - desiredBookIndex = BookModel.book.indexOf(e); - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => BookDetailsPage( - desiredBook: e, - ))); + Navigator.push(context, MaterialPageRoute( builder: (context) => BookDetailsPage(desiredBook: e, desiredBookIndex: BookModel.book.indexOf(e),))); }, )) .toList(), diff --git a/lib/main_views/navigators.dart b/lib/main_views/navigators.dart index dc6cf28..edb3937 100644 --- a/lib/main_views/navigators.dart +++ b/lib/main_views/navigators.dart @@ -11,6 +11,7 @@ class Navigators extends StatelessWidget { bool? currentPageCart; Rx currentPageHomeRx = false.obs; Rx currentPageCartRx = false.obs; + @override Widget build(BuildContext context) { currentPageCartRx.value = currentPageCart ?? false; @@ -19,79 +20,44 @@ class Navigators extends StatelessWidget { child: Column( mainAxisAlignment: MainAxisAlignment.end, children: [ - Padding( - padding: const EdgeInsets.only(left: 25, bottom: 10), - child: Container( - width: 250, - height: 60, - decoration: BoxDecoration( - color: Colors.white, - //border: Border.all(color: Colors.black), - borderRadius: BorderRadius.circular(20), - boxShadow: [ - BoxShadow( - color: Colors.grey.withOpacity(0.1), - spreadRadius: 1, - blurRadius: 4, - offset: const Offset(0, 9)) - ]), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - TextButton( - style: TextButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(15), - ), - ), - onPressed: () { - currentPageCartRx.value = currentPageCart ?? false; - - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => const MyHomePage())); - }, - child: Obx(() { - return Icon(Icons.home, - color: currentPageHomeRx == false.obs - ? Colors.grey - : Colors.blue); - }), - ), - TextButton( - style: TextButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(15), - ), - ), - onPressed: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) => const CartPage())); - }, - child: Icon(Icons.shopping_cart_rounded, - color: currentPageCartRx == false.obs - ? Colors.grey - : Colors.blue), - ), - TextButton( - style: TextButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(15), - ), - ), - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => const AddBookPage())); - }, - child: Icon( - Icons.add, - color: Colors.grey[500], - )), - ], - ), + Container( + width: 250, + height: 60, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(0.1), + spreadRadius: 1, + blurRadius: 4, + offset: const Offset(0, 9)) + ]), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + TextButton( + style: TextButton.styleFrom(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15))), + onPressed: () { + currentPageCartRx.value = currentPageCart ?? false; + Navigator.push(context, MaterialPageRoute(builder: (context) => const MyHomePage())); + }, + child: Obx(() { + return Icon(Icons.home, + color: currentPageHomeRx == false.obs? Colors.grey: Colors.blue); + }), + ), + TextButton( + style: TextButton.styleFrom(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15))), + onPressed: () {Navigator.push(context, MaterialPageRoute(builder: (context) => const CartPage()));}, + child: Icon(Icons.shopping_cart_rounded, color: currentPageCartRx == false.obs? Colors.grey: Colors.blue), + ), + TextButton( + style: TextButton.styleFrom(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15))), + onPressed: () {Navigator.push(context, MaterialPageRoute(builder: (context) => const AddBookPage()));}, + child: Icon(Icons.add, color: Colors.grey[500]) + ), + ], ), ) ], diff --git a/lib/main_views/profile.dart b/lib/main_views/profile.dart index bf65120..5c25c76 100644 --- a/lib/main_views/profile.dart +++ b/lib/main_views/profile.dart @@ -1,15 +1,11 @@ - import 'package:flutter/material.dart'; - class Profile extends StatelessWidget { - const Profile({ - Key? key, - }) : super(key: key); + const Profile({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Padding( - padding: EdgeInsets.only(bottom: 40), + padding: const EdgeInsets.only(bottom: 40), child: Row( children: [ Container( @@ -17,28 +13,18 @@ class Profile extends StatelessWidget { height: 60, decoration: BoxDecoration( image: const DecorationImage( - image: NetworkImage( - 'https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg'), + image: NetworkImage('https://i.pinimg.com/564x/00/95/e0/0095e010d9d7e80fbe0d63f0459f5425.jpg'), alignment: Alignment.topCenter, - fit: BoxFit.cover, - ), + fit: BoxFit.cover), color: Colors.amber, - borderRadius: BorderRadius.circular(30)), - ), + borderRadius: BorderRadius.circular(30))), const Padding( padding: EdgeInsets.only(left: 10), - child: Text( - "Hi, Haithem!", - style: TextStyle( - fontWeight: FontWeight.w300, fontSize: 20), - )), + child: Text("Hi, Haithem!", style: TextStyle(fontWeight: FontWeight.w300, fontSize: 20))), const Spacer(), TextButton( onPressed: () => print('hi'), - child: const Icon( - Icons.more_vert, - color: Colors.black, - )) + child: const Icon(Icons.more_vert, color: Colors.black, )) ], ), ); diff --git a/lib/main_views/search_box.dart b/lib/main_views/search_box.dart index 799e277..6bd0e3b 100644 --- a/lib/main_views/search_box.dart +++ b/lib/main_views/search_box.dart @@ -1,7 +1,6 @@ import 'package:my_book_store_app/main_views/listed_books.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; - class SearchBox extends StatelessWidget { const SearchBox({ Key? key, @@ -31,27 +30,16 @@ class SearchBox extends StatelessWidget { }, textAlignVertical: TextAlignVertical.bottom, decoration: InputDecoration( - suffixIcon: TextButton( - style: TextButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(15), - )), - child: Obx(() { - return Icon(Icons.search, - color: - searchWord.value.isEmpty ? Colors.grey : Colors.blue); - }), - onPressed: () => print('object'), - ), + suffixIcon: + TextButton(style: TextButton.styleFrom(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15))), + child: Obx(() { + return Icon(Icons.search, color: searchWord.value.isEmpty? Colors.grey: Colors.blue); + }), + onPressed: () => print('object')), hintText: 'Search...', hintStyle: const TextStyle(color: Colors.grey), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(15), - //borderSide: BorderSide.none, - ), - enabledBorder: const OutlineInputBorder( - borderSide: BorderSide.none, - ), + border: OutlineInputBorder(borderRadius: BorderRadius.circular(15)), + enabledBorder: const OutlineInputBorder(borderSide: BorderSide.none), focusedBorder: OutlineInputBorder( borderSide: const BorderSide(width: 1, color: Colors.blue), borderRadius: BorderRadius.circular(15))), diff --git a/lib/models/book_model.dart b/lib/models/book_model.dart index 582da6b..c64ae23 100644 --- a/lib/models/book_model.dart +++ b/lib/models/book_model.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; - class BookModel { BookModel({ Key? key, From 76731df158ec3177f551e1e6e9a822ab1ee7532d Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Thu, 1 Sep 2022 03:21:38 +0300 Subject: [PATCH 10/12] Adding delays --- .../add_book_page_views/reusable_text_button.dart | 5 +---- .../book_details_views/bottom_buttons.dart | 15 +++++++++------ lib/main_views/listed_books.dart | 2 +- lib/main_views/navigators.dart | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/add_book_page/add_book_page_views/reusable_text_button.dart b/lib/add_book_page/add_book_page_views/reusable_text_button.dart index 8e60192..186c64b 100644 --- a/lib/add_book_page/add_book_page_views/reusable_text_button.dart +++ b/lib/add_book_page/add_book_page_views/reusable_text_button.dart @@ -1,9 +1,6 @@ import 'package:flutter/material.dart'; -Widget reusableTextField( - {required hintText, - required int lines, - required TextEditingController myControler}) { +Widget reusableTextField({required hintText, required int lines, required TextEditingController myControler}) { return Container( margin: const EdgeInsets.only(top: 17), decoration: BoxDecoration( diff --git a/lib/book_details_page/book_details_views/bottom_buttons.dart b/lib/book_details_page/book_details_views/bottom_buttons.dart index 65bccee..75d3513 100644 --- a/lib/book_details_page/book_details_views/bottom_buttons.dart +++ b/lib/book_details_page/book_details_views/bottom_buttons.dart @@ -3,7 +3,9 @@ import 'package:my_book_store_app/models/book_model.dart'; import 'package:flutter/material.dart'; class BuyAndDetailsButtons extends StatelessWidget { - const BuyAndDetailsButtons({Key? key, required this.boughtBook, required this.desiredBookIndex}): super(key: key); + const BuyAndDetailsButtons( + {Key? key, required this.boughtBook, required this.desiredBookIndex}) + : super(key: key); final BookModel boughtBook; final int desiredBookIndex; @@ -91,13 +93,14 @@ class BuyAndDetailsButtons extends StatelessWidget { borderRadius: BorderRadius.circular(15), )), child: Text("Buy now for $price\$", - style: const TextStyle(fontSize: 17, fontWeight: FontWeight.w400, color: Colors.white)), + style: const TextStyle( + fontSize: 17, + fontWeight: FontWeight.w400, + color: Colors.white)), onPressed: () { BookModel.book[desiredBookIndex].inCart = true; - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => const CartPage())); + Future.delayed(Duration(milliseconds: 150), () {Navigator.push(context,MaterialPageRoute(builder: (context) => const CartPage())); + }); }, ), ), diff --git a/lib/main_views/listed_books.dart b/lib/main_views/listed_books.dart index eee2385..3f59984 100644 --- a/lib/main_views/listed_books.dart +++ b/lib/main_views/listed_books.dart @@ -83,7 +83,7 @@ class ListedBooks extends StatelessWidget { ), ), onPressed: () { - Navigator.push(context, MaterialPageRoute( builder: (context) => BookDetailsPage(desiredBook: e, desiredBookIndex: BookModel.book.indexOf(e),))); + Future.delayed(Duration(milliseconds: 170), (){Navigator.push(context, MaterialPageRoute( builder: (context) => BookDetailsPage(desiredBook: e, desiredBookIndex: BookModel.book.indexOf(e),)));}); }, )) .toList(), diff --git a/lib/main_views/navigators.dart b/lib/main_views/navigators.dart index edb3937..56678e9 100644 --- a/lib/main_views/navigators.dart +++ b/lib/main_views/navigators.dart @@ -40,7 +40,7 @@ class Navigators extends StatelessWidget { style: TextButton.styleFrom(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15))), onPressed: () { currentPageCartRx.value = currentPageCart ?? false; - Navigator.push(context, MaterialPageRoute(builder: (context) => const MyHomePage())); + Future.delayed(Duration(milliseconds: 170), (){Navigator.push(context, MaterialPageRoute(builder: (context) => const MyHomePage()));}); }, child: Obx(() { return Icon(Icons.home, @@ -49,12 +49,12 @@ class Navigators extends StatelessWidget { ), TextButton( style: TextButton.styleFrom(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15))), - onPressed: () {Navigator.push(context, MaterialPageRoute(builder: (context) => const CartPage()));}, + onPressed: () {Future.delayed(Duration(milliseconds: 150), (){Navigator.push(context, MaterialPageRoute(builder: (context) => const CartPage()));});}, child: Icon(Icons.shopping_cart_rounded, color: currentPageCartRx == false.obs? Colors.grey: Colors.blue), ), TextButton( style: TextButton.styleFrom(shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15))), - onPressed: () {Navigator.push(context, MaterialPageRoute(builder: (context) => const AddBookPage()));}, + onPressed: () {Future.delayed(Duration(milliseconds: 150), (){Navigator.push(context, MaterialPageRoute(builder: (context) => const AddBookPage()));});}, child: Icon(Icons.add, color: Colors.grey[500]) ), ], From d090e3e8e0fd133ce083027f5fd922f966200340 Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Thu, 1 Sep 2022 03:27:06 +0300 Subject: [PATCH 11/12] formatting --- lib/book_details_page/book_details_views/bottom_buttons.dart | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/book_details_page/book_details_views/bottom_buttons.dart b/lib/book_details_page/book_details_views/bottom_buttons.dart index 75d3513..a1ef914 100644 --- a/lib/book_details_page/book_details_views/bottom_buttons.dart +++ b/lib/book_details_page/book_details_views/bottom_buttons.dart @@ -93,10 +93,7 @@ class BuyAndDetailsButtons extends StatelessWidget { borderRadius: BorderRadius.circular(15), )), child: Text("Buy now for $price\$", - style: const TextStyle( - fontSize: 17, - fontWeight: FontWeight.w400, - color: Colors.white)), + style: const TextStyle(fontSize: 17,fontWeight: FontWeight.w400, color: Colors.white)), onPressed: () { BookModel.book[desiredBookIndex].inCart = true; Future.delayed(Duration(milliseconds: 150), () {Navigator.push(context,MaterialPageRoute(builder: (context) => const CartPage())); From 1c7abb16568958e70cb2ff57c56ee419f1aa9c9e Mon Sep 17 00:00:00 2001 From: Haithem_Ali Date: Mon, 5 Sep 2022 13:22:25 +0300 Subject: [PATCH 12/12] scroll --- .vscode/settings.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 0db5873..10db30f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "cmake.configureOnOpen": true + "cmake.configureOnOpen": true, + "editor.stickyScroll.enabled": true } \ No newline at end of file