Need to log a book? Need to find a new one? Look no further than BookWorm!
BookWorm is perfect for users looking for a simple and aesthetic way to log the books that they read and find new ones to add! Users can add books to their current reads, to be read, or have read list. The app uses the Google Books API to find every book contained in the Google Book library as well as stores reviews from other users on BookWorm. Each book is initially unrated, leaving it up to the users to reflect on their readings, by leaving a review and rating.
- Searching books using a string query provided by the user, making use of the Google Books API
- Searching books by scanning a book's barcode to read the ISBN-13 value
- Viewing information about a book - it's cover, title, author(s), description, and individual and community ratings.
- Logging feature on a books view, allowing users to add any book to one of their three lists: past, to be read, and currently reading lists.
- Removing a book from a list
- Leaving reviews for a book to reflect on one's experience while reading said book.
- Users can view their profile, and view any ratings they have left in the past
- Requirements to run the app:
- Flutter
- Dart
- Firebase
• We use Firebase for Firestore (to store our user's data in an external database), and user Authentication.
- Emulator
• A main feature of the app is our barcode scanner, which is used to scan a book's barcode and read the ISBN. We have made it so that our app can run
on an emulator even if the device has no camera. However, the scanner feature simply will not work.
• The best way to run our app is using an external phone, preferably an iPhone running the latest iOS software, with access to a camera. That way all of our app features can be used and tested.
- We also use custom flutter widgets from pub.dev, which require flutter pub get to install the required dependencies.
-
- Clone our repo. Every staff member is either an Owner or a Maintainer.
- On gitlab, navigate to cse340 25sp students/as-finalproject-group-8
- Press on the blue 'code ^' button. This will result in a dropdown menu appearing.
- Select 'Visual Studio Code (HTTPS) under 'open in your IDE' section'
- Install the required dependencies by running flutter pub get. Our app uses dependencies that will not run unless running flutter pub get
-
- To use our app, once the requirements have been met, ensure firebase is set up properly by making sure these two files exist:
- For iOS, as-finalproject-group-8/code/bookworm/ios/Runner/GoogleService-Info.plist
- For android, code/bookworm/android/app/google-services.json
- These two files are essential for getting access to our firebase firestore database. If they for some reason are not present, contact us (kareimer@uw.edu) or any of the other team members
-
- To be able to run the app on iOS, first enter 'open ios/Runner.xcworkspace' in the console. On the left hand side, click on 'Runner', then runner targets, and press on Signing & Capabilities. Change the team to your personal team, and change the bundle identifier to match the format com.example.bookworm, where 'example' is replaced with your unique indentifier.
-
- Enable developer mode on iPhone, by navigating to privacy & security, then pressing developer mode.
-
- Our project uses Google Books API to fetch information about books. This requires a special API key. Without it, the app will not be able to fetch data.
- Create a api.env file within our assets folder, and add this following line to the file:
- We will provide our API key in a private EdStem message.
-
- Ensure you are in the right directory:
- Enter flutter run in the terminal of VS Code
- Choose the device to run the app on (Preferably a physical device with a camera, such as an iPhone)
- Wait for the app to build and install on the device
-
- When the app starts, you will be prompted to login. Press 'create account'.
- Enter your chosen username, as well as an email and password. The password must be at least 6 characters long.
- You're now in our app. Enjoy BookWorm!
- images/
- Barcode Rectangle Outline
• Rectangle outline displayed on the users screen when they open the scanner, making it clear where to place the barcode relevant to the camera
- api.env (IMPORTANT!)
• This file is included in our .gitignore. Place it within the assets folder where described in this layout
- example.json
• our original mock books
- l10n/
- app_de.arb
• german translation
- app_en.arb
• english translation
- app_localization_de.dart
• loads german strings into the app
- app_localization_en.dart
• loads english strings into the app
- models/
- book_list.dart
• book list model which wraps books in specific lists
- book.dart
• the book data model defining what is stored in each book
- book.g.dart
• auto generated
- review_entry.dart
• stores the data associated with each review
- review_sort_mode.dart
• contains an enum defining the three sort modes: newest, oldest, and lowest rating
- review_storage.dart
• The heart of reviews. Contains cached maps to store community reviews for a book, a list of a users individual reviews, and a review for a specific book.
• Contains logic to upsert entries, save reviews to database, listen for review changes in firestore, cancel listeners, and notify the listeners.
- providers/
- book_provider.dart
• The book provider, containing search query logic to fetch results from API for search bar + isbn search for the barcode scanner to fetch API results with specific isbn value passed in
- review_provider.dart
• encapsulates review_storage
• contains logic for upserting reviews, viewing cached review storage data thru a cloned copy, and listening to live updates for specific bookIds.
- user_provider.dart
• contains the users info: their username, booklists, and logic to fetch user data from firestore, load booklists from firestore, and save booklists to firestore.
- theme/
- colors.dart
• this holds our AppColors class, used to define the colors we use throughout our app. Allows us to easily reuse our app colors.
- util/
- book_mocker.dart
• our initial mock data for books
- mock_reviews.dart
• our initial mock data for reviews
- views/
- book/
- book_view.dart
• Book view displays a books details, including title, authors, description, and reviews made by other BookWorm users for that book
- community_reviews.dart
• Displays the community reviews for a book. Displays a rating distribution (percentage of the number of times each star was seen across all reviews (1-5))
- individual_review.dart
• The screen where a user can write a new review, or edit a previous one. Contains a star rating that a user must complete for their review. Also contains a required text form field where a user writes a review for the book they are viewing
- home/
- home.dart
• home displays the users 'shelves' aka their list of books: current reads list, to be read list, and past reads list. Also displays the users username. fetches user data upon loading
- preview_shelf_view.dart
• preview shelf used to display the past read list and the to be read list
- swipe_tile_view.dart
• the logic used for the current reads list, containing logic to display the current reads in a carousel widget
- login/
- login.dart
• the login screen view logic
- register.dart
• the register screen view logic
- search/
- search_book_tile.dart
• builds the ui for each tile that is displayed as a result of a users search query
- search.dart
• contains the search bar and barcode scanner logic/UI, as well as a search function that sends the query to the bookProviders search function, which fetches data from Google Books API
- firebase_options.dart
- main.dart