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.
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.
Basketlycom.basketly.apppubspec.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.
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.
sdk: ^3.9.2cupertino_iconsgoogle_fontsFollow 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.
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).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
PATH takes effect.flutter doctor
flutter doctor marks with an ✗ (Android SDK, Xcode, CocoaPods, etc.) before continuing — the project won't build correctly until every relevant check passes.flutter pub get
flutter run
flutter analyze flutter test
flutter pub get — just run flutter doctor first to confirm your existing SDK version matches this project's sdk: ^3.9.2 requirement.
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/app/build.gradle.kts and confirm your final namespace, applicationId, compileSdk, targetSdk, versionCode, and versionName.keytool -genkey -v -keystore upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
flutter clean flutter pub get
flutter analyze flutter test
flutter build appbundle --release
build/app/outputs/bundle/release/app-release.aab.flutter build apk --release
ios/Runner.xcworkspace in Xcode.Runner target and confirm the bundle identifier, display name, team, signing certificate, and provisioning profile.flutter clean flutter pub get
flutter build ios --release
Product > Archive, then upload the archive from Xcode Organizer.flutter build ipa --release
build/ios/ipa/.lib/app.dartMain app entry flow, launch coordinator, navigation shell, and default controller wiring.
lib/main.dartStarts the Flutter app and launches GroceryApp.
lib/theme/app_theme.dartGlobal colors, text styles, buttons, chips, and input styling.
lib/screens/Contains the customer app UI screens grouped by feature.
lib/controllers/app_controller.dartCentral 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.dartDemo data source used by the mock API implementation.
assets/images/products/Local product images used by the UI preview and demo catalog.
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.
Global design tokens live in lib/theme/app_theme.dart. Update these values to match your own brand:
AppTheme.accent for primary action colorAppTheme.canvas for overall app backgroundAppTheme.surface and AppTheme.surfaceMuted for cards and chipsGoogleFonts.plusJakartaSans usage if you want a different font family
Replace the demo product images inside assets/images/products/ and keep the file paths updated in your product data source or API payload.
If you are still using the mock setup, update demo content in:
lib/data/mock_data.dartlib/services/mock_store_api_service.dartThis 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.
android/app/src/main/AndroidManifest.xml.android:label="Basketly" and replace Basketly with your app name.ios/Runner/Info.plist.CFBundleDisplayName and CFBundleName to your app name.lib/app.dart and update title: 'Basketly'.1024x1024 pixels.android/app/src/main/res/mipmap-*/.ios/Runner/Assets.xcassets/AppIcon.appiconset/.android/app/src/main/res/drawable/launch_background.xml and android/app/src/main/res/drawable-v21/launch_background.xml.ios/Runner/Base.lproj/LaunchScreen.storyboard in Xcode and replace the launch screen artwork or colors.flutter clean, then flutter pub get, and test again on a real device or simulator.com.basketly.appcom.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.
dart pub global activate rename rename setBundleId --value "com.yourcompany.yourapp" --targets android,iosThis updates the Android
applicationId and the iOS PRODUCT_BUNDLE_IDENTIFIER in one step.
android/app/build.gradle.kts and replace both the namespace and applicationId values (currently com.basketly.app) with your new package name.
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.
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).
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.
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.
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.
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.
| 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. |
StoreApiService.AppController.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);
}
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.
MockStoreApiService.StoreApiService implementation.lib/app.dart and verify the mock repository has been replaced.401, 403, 404, or 500.updateCartItem, clearCart, and toggleWishlist.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.
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.
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.
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.
No. Their UI flows are included, but production functionality depends on your own backend, business rules, third-party services, and integration work.
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.
Onboarding, Sign In, Sign Up, OTP Verification, Forgot Password, Location Permission
Home, Catalog, Search, Search Results, Product Detail, Wishlist, Notifications
Cart, Checkout, Coupons, Payment Methods, Order Success
Orders, Order Detail, Live Tracking
Profile, Edit Profile, Address List, Address Form, Settings
Support Screen and Chat Support Screen
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.
If you need help with setup, basic customization guidance, or understanding the file structure after purchase, you can contact support here:
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.