Buyer Documentation

Basketly Flutter App UI Template

This document helps you install, run, customize, and connect Basketly to your own backend. It is written for buyers who want a clean handoff and a practical starting point for a production-style grocery delivery customer app.

28 customer app screens included in the template
Flutter built with Material 3 and reusable widgets
API Ready repository, service, and controller architecture included

Table of Contents

Package Overview

Basketly is a customer-side Flutter UI template for grocery delivery, quick commerce, supermarket, and local essentials apps. It includes onboarding, authentication, shopping, checkout, live order tracking, customer profile management, and support-related screens.

App title in the current template: Basketly
Default package name / bundle identifier: com.basketly.app
Package version in pubspec.yaml: 1.0.0+1

The project is designed so you can start with mock data for presentation and then replace the mock service layer with your own REST API, custom backend, or app platform integration.

Screen Previews

The preview images below show the key customer app flows included in Basketly. They help buyers quickly understand the visual style before running the Flutter project.

Basketly onboarding screen preview

Onboarding

Launch screen with premium grocery positioning and account entry actions.

Basketly login screen preview

Login

Returning customer sign-in screen with phone-based entry flow.

Basketly create account screen preview

Create Account

Registration screen for new customers entering the app for the first time.

Basketly OTP verification screen preview

OTP Verification

Verification step used before entering the customer shopping experience.

Basketly location permission screen preview

Location Permission

Location access prompt for delivery address and nearby grocery availability.

Basketly home screen preview

Home

Featured promotions, search entry, categories, and popular products.

Basketly category screen preview

Category

Category filters and product cards for browsing grocery items.

Basketly product details screen preview

Product Details

Product information, pricing, quantity controls, and add-to-cart action.

Basketly cart screen preview

Cart

Cart items, quantities, coupons, and order total before checkout.

Basketly checkout screen preview

Checkout

Delivery address, payment method, summary, and order placement flow.

Basketly order screen preview

Orders

Active and previous order overview for customer order management.

Basketly live tracking screen preview

Live Tracking

Order progress, delivery route preview, and rider contact actions.

Basketly profile screen preview

Profile

Account management, addresses, payments, coupons, support, and settings.

Requirements

Dependencies Used

Installation & Getting Started

Follow these steps in order. They work whether you're a developer setting up the project for the first time or a non-technical buyer just previewing the app before handing it to a developer.

1. Download and ExtractUnzip the purchased package and open the main project folder in your editor.
2. Install FlutterMake sure the Flutter SDK is installed and a simulator, emulator, or physical device is ready.
3. Fetch PackagesRun flutter pub get from the project root to install the UI dependencies.
4. Launch the DemoRun flutter run to preview the grocery delivery customer experience.
Basketly getting started walkthrough diagram

Step-by-Step Commands

  1. Download and extract the purchased package.
  2. Open the extracted project folder in your Flutter editor (Android Studio, VS Code, or similar).
  3. Set up the Flutter SDK if it isn't installed yet:
    • Download the Flutter SDK for your OS from docs.flutter.dev/get-started/install and extract it to a permanent folder (for example C:\src\flutter on Windows or ~/development/flutter on macOS/Linux).
    • Add the SDK's bin folder to your system PATH:
      # macOS / Linux — add to ~/.zshrc or ~/.bashrc
      export PATH="$PATH:$HOME/development/flutter/bin"
      
      # Windows — add via System Environment Variables
      # Add the full path to flutter\bin, e.g. C:\src\flutter\bin
    • Restart your terminal (or editor) so the updated PATH takes effect.
    • Verify the setup and install any missing platform tools it flags:
      flutter doctor
    • Resolve anything flutter doctor marks with an ✗ (Android SDK, Xcode, CocoaPods, etc.) before continuing — the project won't build correctly until every relevant check passes.
  4. Fetch the project dependencies from the project root:
    flutter pub get
  5. Make sure a simulator, emulator, or physical device is connected and available.
  6. Run the app:
    flutter run
  7. Optional — validate the project before making changes:
    flutter analyze
    flutter test
Already have Flutter installed? Skip straight to flutter pub get — just run flutter doctor first to confirm your existing SDK version matches this project's sdk: ^3.9.2 requirement.
Once the demo app runs successfully, move on to the Customization Guide and the Logo, Splash, and Package Name sections before creating a production build.

Production Build Guide

Before creating a release build, replace demo branding, set your final app identifier, test on real devices, and connect any production backend services you need.

Android Release Build

  1. Open android/app/build.gradle.kts and confirm your final namespace, applicationId, compileSdk, targetSdk, versionCode, and versionName.
  2. Create a release signing key if you do not already have one:
    keytool -genkey -v -keystore upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
  3. Configure Android release signing in your normal Flutter/Android workflow. Keep passwords and keystore files private and do not share them with buyers or public repositories.
  4. Clean the project and download packages:
    flutter clean
    flutter pub get
  5. Run a quick quality check:
    flutter analyze
    flutter test
  6. Build the Android App Bundle for Play Store upload:
    flutter build appbundle --release
  7. The generated release file is usually available at build/app/outputs/bundle/release/app-release.aab.
  8. If you need a direct install APK for testing, run:
    flutter build apk --release

iOS Release Build

  1. Use macOS with Xcode installed and an active Apple Developer account.
  2. Open ios/Runner.xcworkspace in Xcode.
  3. Select the Runner target and confirm the bundle identifier, display name, team, signing certificate, and provisioning profile.
  4. From the project root, clean and install packages:
    flutter clean
    flutter pub get
  5. Build the iOS release:
    flutter build ios --release
  6. To create an App Store archive, open Xcode and choose Product > Archive, then upload the archive from Xcode Organizer.
  7. Alternatively, create an IPA with Flutter:
    flutter build ipa --release
  8. The generated IPA is usually available under build/ios/ipa/.

Project Structure

lib/app.dart

Main app entry flow, launch coordinator, navigation shell, and default controller wiring.

lib/main.dart

Starts the Flutter app and launches GroceryApp.

lib/theme/app_theme.dart

Global colors, text styles, buttons, chips, and input styling.

lib/screens/

Contains the customer app UI screens grouped by feature.

lib/controllers/app_controller.dart

Central app state for products, categories, cart, wishlist, loading, and errors.

lib/services/ and lib/repositories/

Service and repository layers used for backend-ready data flow.

lib/data/mock_data.dart

Demo data source used by the mock API implementation.

assets/images/products/

Local product images used by the UI preview and demo catalog.

Customization Guide

1. Change the App Name

The visible app title inside Flutter is currently set in lib/app.dart:

title: 'Basketly'

For store-ready publishing, also update the Android and iOS display names and identifiers using your preferred Flutter rename workflow before release.

2. Change Colors and Typography

Global design tokens live in lib/theme/app_theme.dart. Update these values to match your own brand:

3. Change Product Images

Replace the demo product images inside assets/images/products/ and keep the file paths updated in your product data source or API payload.

4. Change Demo Content

If you are still using the mock setup, update demo content in:

Logo, Splash Screen, and Display Name

This section is written for non-technical buyers who only need to replace the visible app branding before handing the project to a developer or publishing team.

1. Update the Display Name

  1. For Android, open android/app/src/main/AndroidManifest.xml.
  2. Find android:label="Basketly" and replace Basketly with your app name.
  3. For iOS, open ios/Runner/Info.plist.
  4. Update CFBundleDisplayName and CFBundleName to your app name.
  5. In Flutter, open lib/app.dart and update title: 'Basketly'.

2. Update the App Logo

  1. Prepare a square logo image, preferably at least 1024x1024 pixels.
  2. Replace Android launcher icons inside android/app/src/main/res/mipmap-*/.
  3. Replace iOS app icons inside ios/Runner/Assets.xcassets/AppIcon.appiconset/.
  4. Keep the existing filenames and icon sizes unless your developer regenerates the icon set with a Flutter icon tool.
  5. Run the app on Android and iOS to confirm the new icon appears on the device home screen.

3. Update the Splash Screen

  1. For Android, update the launch background files in android/app/src/main/res/drawable/launch_background.xml and android/app/src/main/res/drawable-v21/launch_background.xml.
  2. For iOS, open ios/Runner/Base.lproj/LaunchScreen.storyboard in Xcode and replace the launch screen artwork or colors.
  3. Keep the splash screen simple because it only appears while Flutter is starting.
  4. After changing splash assets, run flutter clean, then flutter pub get, and test again on a real device or simulator.

4. Update the Package Name

Default package name in this template: com.basketly.app
Replace it everywhere below with your own reverse-domain identifier (for example com.yourcompany.yourapp) before publishing.

The package name (also called the application ID on Android and the bundle identifier on iOS) has to be changed in a few places so Android, iOS, and your Flutter code all agree.

  1. Easiest option — use a rename tool. From the project root, run:
    dart pub global activate rename
    rename setBundleId --value "com.yourcompany.yourapp" --targets android,ios
    This updates the Android applicationId and the iOS PRODUCT_BUNDLE_IDENTIFIER in one step.
  2. Manual option — Android. Open android/app/build.gradle.kts and replace both the namespace and applicationId values (currently com.basketly.app) with your new package name.
  3. If your Android project still has a Kotlin/Java source path matching the old package (for example android/app/src/main/kotlin/com/basketly/app/MainActivity.kt), move MainActivity.kt into a folder path that matches your new package name, and update the package declaration at the top of that file to match.
  4. Confirm android/app/src/main/AndroidManifest.xml does not hardcode the old package name anywhere (most templates read it from build.gradle.kts automatically, but double-check custom entries such as deep links or provider authorities).
  5. Manual option — iOS. Open ios/Runner.xcworkspace in Xcode, select the Runner target, open the General tab, and replace the Bundle Identifier (currently com.basketly.app) with your new package name.
  6. After changing the package name, run flutter clean, then flutter pub get, and do a fresh flutter run to confirm both platforms build under the new identifier before you create a release build.
  7. Keep the Flutter app title, the display name, and the store-facing package name aligned so your builds remain easy to manage.
Recommended beginner workflow: first change the display name, then replace app icons, then update the splash screen, then update the package name, then create a test build and install it on a phone, then follow the Production Build Guide above for the final release APK/AAB or IPA.

Backend Integration

Basketly is already structured to support backend implementation. The current default flow uses a mock repository and a mock API service, but the architecture is ready for a real data source.

Current Architecture

The UI layer talks to the controller, which uses the repository contract, and that repository calls the service layer for data. This keeps the screens clean while making it simple to swap the mock implementation for your own backend.

Basketly architecture diagram showing UI, repository, and service layers
Layer File Purpose
Controller lib/controllers/app_controller.dart Manages products, categories, cart, wishlist, loading state, and error state.
Repository contract lib/repositories/store_repository.dart Defines the data operations used by the app.
API service contract lib/services/store_api_service.dart Defines the service methods expected from your backend connection.
Mock implementation lib/services/mock_store_api_service.dart Supplies demo data while the app is not connected to a real backend.
Default wiring lib/app.dart Creates the default AppController with the mock repository.

How to Connect Your Own Backend

  1. Create your own API service class implementing StoreApiService.
  2. Connect it to your repository implementation.
  3. Pass that repository into AppController.
  4. Inject the controller into GroceryApp or replace the default factory in lib/app.dart.
abstract interface class StoreApiService {
  Future<List<Map<String, dynamic>>> fetchProducts();
  Future<List<String>> fetchFeaturedCategories();
  Future<Map<String, int>> fetchCartQuantities();
  Future<List<String>> fetchWishlistIds();
  Future<void> updateCartItem({
    required String productId,
    required int quantity,
  });
  Future<void> clearCart();
  Future<void> toggleWishlist(String productId);
}
Backend, payment gateway, live map SDK, admin panel, and rider app are not included in this item. The current package focuses on the customer app UI and integration-ready structure.

Backend / Server Troubleshooting

This item does not include a ready-made backend or server. If you connect Basketly to your own API and run into issues, use the checks below to identify the most common integration problems.

1. The app still shows demo products instead of live data

2. API requests fail immediately

3. Data loads, but the UI looks empty or incomplete

4. Cart or wishlist updates do not persist

5. Live tracking, payments, or notifications are not working

Recommended integration workflow: first replace mock product loading, then cart and wishlist actions, then authentication, then advanced services such as payments, notifications, and tracking.

Backend / Server FAQ

Does this purchase include a backend or admin panel?

No. This item is a Flutter customer app UI template only. A production backend, database, admin panel, delivery app, payment server logic, and live operations system are not included.

Why is there a backend-related folder structure if no backend is included?

The project includes repository and service layers so buyers can connect the UI to their own backend more easily. These files provide an integration-ready structure, not a hosted server product.

Is mock data included?

Yes. The template ships with mock data and a mock API service so the UI works out of the box for preview, testing, and customization before real backend integration.

Can I connect this template to REST API, Firebase, Supabase, or a custom server?

Yes. You can replace the mock service layer with your own implementation and map the returned data into the app's repository and controller flow.

Are authentication, payment, and order tracking fully functional by default?

No. Their UI flows are included, but production functionality depends on your own backend, business rules, third-party services, and integration work.

What support is covered for backend questions?

Support can help explain the existing Flutter file structure and where backend integration should happen. Full backend development, deployment, database design, server maintenance, and third-party account setup are outside the scope of a UI template unless agreed separately.

Included Screens

Authentication and Launch

Onboarding, Sign In, Sign Up, OTP Verification, Forgot Password, Location Permission

Shopping Flow

Home, Catalog, Search, Search Results, Product Detail, Wishlist, Notifications

Purchase Flow

Cart, Checkout, Coupons, Payment Methods, Order Success

Order Management

Orders, Order Detail, Live Tracking

Account Tools

Profile, Edit Profile, Address List, Address Form, Settings

Support

Support Screen and Chat Support Screen

Full Screen List

  1. Onboarding Screen
  2. Sign In Screen
  3. Sign Up Screen
  4. OTP Verification Screen
  5. Forgot Password Screen
  6. Location Permission Screen
  7. Home Screen
  8. Catalog Screen
  9. Search Screen
  10. Search Results Screen
  11. Product Detail Screen
  12. Wishlist Screen
  13. Notifications Screen
  14. Cart Screen
  15. Checkout Screen
  16. Address List Screen
  17. Address Form Screen
  18. Payment Methods Screen
  19. Coupons Screen
  20. Order Success Screen
  21. Orders Screen
  22. Order Detail Screen
  23. Live Tracking Screen
  24. Profile Screen
  25. Edit Profile Screen
  26. Support Screen
  27. Chat Support Screen
  28. Settings Screen

Assets and Images

Product images used in the template are stored in assets/images/products/. If you replace them, keep filenames and paths aligned with the data used in your app.

Before reselling, redistributing, or publishing the app publicly, make sure all included images and brand assets are licensed correctly for your intended use.

Release Notes for Buyers

Support

If you need help with setup, basic customization guidance, or understanding the file structure after purchase, you can contact support here:

Contact Support on Telegram

Support scope usually covers template setup guidance and basic usage help. Custom backend development, third-party service configuration, and major feature development are normally separate work unless agreed otherwise.