Seller App
Sellino – Flutter Merchant App (Android & iOS)
/api/v10/*Developed By: BugBuild Labs
Introduction
The Sellino Seller App is a native merchant app built in Flutter for store owners and vendors. It puts the day-to-day shop operations — products, stock, orders, POS and accounting — in your pocket, talking to the same backend through the API (/api/v10/*).
What sellers can do:
- Manage products, attributes, categories, brands, units & tax
- Run purchase orders and full inventory (stock, adjustment, damage, transfer)
- Take POS sales with a cash register and process orders & returns
- Keep books with accounts, journals, transfers and reconciliation
- Handle bank/MFS accounts, deposits, fund transfers and withdrawals
- Run promotions, campaigns, membership, rewards and affiliate
- View reports and chat/feedback, manage their wallet and profile
Who is it for: the shop owner (single-vendor) or each vendor (multi-vendor). It mirrors the relevant parts of the web admin/seller panel on mobile.

Requirements
- Flutter SDK (stable) and Dart
- Android Studio and/or Xcode (iOS builds need macOS)
- A running Sellino backend with the API reachable over HTTPS
- A seller/admin account on that backend to log in with
Run flutter doctor and resolve any issues before building.
Package & Source Code
Download Main_Files.zip from your CodeCanyon downloads and extract it. The full Flutter source of this app lives in the SellerAppCode folder (alongside WebSourceCode for the Laravel backend and CustomerAppCode for the buyer app). Open SellerAppCode in Android Studio or VS Code to build and customize the Seller App. The Seller App is used with Sellino's multi-vendor setup.
App Configuration
- Open the
SellerAppCodefolder in your IDE and runflutter pub getto fetch dependencies. - Set the API base URL in
lib/core/env/prod_env.dart(release builds) orlib/core/env/dev_env.dart(debug builds) — the image base URL, websocket scheme and broadcasting auth URL are all derived from it automatically. - Set the real-time chat key (
kReverbAppKey) in the same file to match the backend's effective Reverb key — the App Key in Dashboard → Settings → Realtime (Websocket) if one is saved there, otherwiseREVERB_APP_KEYfrom.env. - Paste the App API key (
kAppApiKey) in the same file — see below. Wrong or missing key → 401 on every screen. - Ensure the backend's seller features are enabled and the seller account is approved.
- Configure push notification keys if used (driven by the backend's Push settings).
// lib/core/env/prod_env.dart → used by RELEASE builds
class ProdEnv implements Env {
static const String kBaseUrl = 'https://yourdomain.com/api/v10'; // your API root
static const String kAppApiKey = 'PASTE-KEY-FROM-ADMIN-PANEL'; // Settings → API Security
static const String kReverbAppKey = 'sellino-app-key'; // backend .env REVERB_APP_KEY
}
// lib/core/env/dev_env.dart → used by DEBUG / PROFILE builds (your local backend)
// imageBaseUrl, reverbScheme and broadcastingAuthUrl are all derived from kBaseUrl.
Tip: Always use HTTPS. Plain HTTP endpoints are blocked by default on Android/iOS. The app ships with English, Arabic and Bengali (RTL-aware).
App API key (X-App-Key)
The backend can require a shared key on every API call. Copy it from the admin panel — Settings → API Security — paste it as kAppApiKey, then rebuild.
kBaseUrlandkAppApiKeylive in the same file, so a build never points at one backend with another's key.- An empty key means the header is not sent at all — correct only when the backend has no key configured.
- Built-in guard: a release build refuses to start if the key is still empty or the URL still points at a dev host (
localhost,127.0.0.1,.test…), so a forgotten swap fails on your desk, not on a seller's phone.
Never regenerate the key after release unless it leaked — apps already installed on phones stop working until users install a rebuilt version. See Security → App API Key.
Push notifications (Firebase) — Android & iOS
Firebase is shared by the backend, this app and the Customer App, so the full procedure is documented once in Common Setup → Push Notifications (Firebase). For this app you place google-services.json in SellerAppCode/android/app/ and, for iOS, GoogleService-Info.plist in SellerAppCode/ios/Runner/ — register both against this app's own package/bundle id, separate from the Customer App's.
Sellers receive push for new orders, payouts and return requests once it is enabled.
iOS: Android works once the config file is in place, but iOS delivery will not work until the APNs Auth Key is uploaded to the Firebase console. Do not skip that step.
App Name & Icon
It ships as "Seller App" with the application id com.sellino.seller (Android and iOS) — change the name and id to your own brand.
- App name — Android:
android:labelinandroid/app/src/main/AndroidManifest.xml(it reads@string/app_nameinandroid/app/src/main/res/values/strings.xml). iOS:CFBundleDisplayNameinios/Runner/Info.plist. - Package / Bundle ID — Android
applicationIdinandroid/app/build.gradle.kts; iOSPRODUCT_BUNDLE_IDENTIFIERin the Xcode project.
Generate the launcher icon
The app uses the flutter_launcher_icons package (already in pubspec.yaml) with settings in flutter_launcher_icons.yaml. To rebrand:
- Replace the source images in
assets/branding/(keep the same file names):app_icon.png— the main icon, a 1024×1024 PNG (no transparency; used for iOS and the Android legacy icon).app_icon_foreground.png— the Android adaptive foreground (transparent background, artwork centered with safe padding).app_icon_monochrome.png— the Android 13+ themed icon (single-colour silhouette on transparent).
- Optionally adjust
flutter_launcher_icons.yaml(e.g.adaptive_icon_backgroundcolour). - Generate all Android + iOS icon sets:
flutter pub get dart run flutter_launcher_icons
This overwrites the Android mipmap-* icons and the iOS AppIcon set from your source images. Rebuild the app afterwards (flutter run or a release build) to see the new icon.
Build, Signing & Release
Android — generate a release keystore
Create your own upload keystore once with keytool (ships with the JDK):
keytool -genkey -v -keystore ~/sellino-release.jks \ -keyalg RSA -keysize 2048 -validity 10000 -alias upload
Android — key.properties
Copy android/key.properties.example to android/key.properties and fill in your values:
storePassword=your_store_password keyPassword=your_key_password keyAlias=upload storeFile=/absolute/path/to/sellino-release.jks
The release signingConfigs block is already wired into android/app/build.gradle.kts — it reads key.properties automatically and signs the release build with your keystore. If the file is absent it falls back to debug signing so flutter run --release still works during development. Never commit key.properties or the .jks file (both are in .gitignore).
Android — build
- Testing APK:
flutter build apk --release - Play Store bundle:
flutter build appbundle --release→ upload the.aabto the Google Play Console.
iOS — signing & distribution
iOS builds require a Mac with Xcode and a paid Apple Developer account.
- Open
ios/Runner.xcworkspacein Xcode. - Under Signing & Capabilities, select your Team and set a unique Bundle Identifier.
- Let Xcode Automatically manage signing (creates the certificate and provisioning profile), or add them manually from the Apple Developer portal.
- Create the app record in App Store Connect using the same bundle id.
- Build with
flutter build ipa, then upload via Xcode Organizer or the Transporter app.
Heads-up: a paid Apple Developer account and Google Play developer account are required to publish, and are not included in this item.
Login & Dashboard
Sellers sign in with email or phone (two-step: identifier → password); new sellers register with name, shop name, email, phone, address and password (OTP-verified). Forgot password resets via an emailed/SMS code, and the splash screen auto-refreshes an expired session.
The Dashboard packs the whole business into one screen:
- Shop identity card and key seller stats.
- Overview metric cards, order & sales summaries, and purchase / order / customer-onboard trend charts.
- Order metrics by status (Draft, Pending, Processing, To Delivery, Delivered, Cancelled) over a selectable date range.
- Quick actions (Add Product, Fulfill Orders) and a recent orders list.


Products & Attributes
Create and manage the items you sell. Add a product with name, category, brand, unit, price, photos and description; enable attributes (size/color) for variations and set their prices. Toggle status to show/hide a product. Deleted Products acts as a recycle bin to review or restore.
Admin approval: if the platform requires it, products (and any new brand/category/attribute you request) stay pending until an admin approves them. If something is rejected, the reason is shown on the item so you know what to fix and resubmit.


Categories, Brands, Units & Tax
Maintain the supporting lists used on every product:
- Category Management — categories & subcategories.
- Brands — manufacturers you sell.
- Units — units of measure (pcs, kg, litre).
- Tax Rates — VAT/GST percentages applied at sale.
- Attribute Management — options & values for variations.

Product FAQ
Add frequently asked questions to a product so buyers get answers on the product page — helpful for reducing repeat queries and improving conversions.

Product Stock & Purchase Orders
Product Stock shows current quantities. Add stock via a stock entry (product, quantity, cost); it reduces automatically as you sell.
Purchase Orders record goods bought from suppliers — choose the supplier, add items with quantity & cost, record any payment; stock and supplier dues update automatically. Purchase Stock ties received goods into inventory.


Adjustment · Damage · Transfer
- Stock Adjustment — correct counts after a physical check.
- Stock Damage — write off broken/expired goods out of sellable stock.
- Stock Transfer — move stock between warehouses/locations.
Each: open → create → pick product(s), quantity & reason → save.

Warehouses & Returns
Warehouse management defines where stock physically lives. Returns handle goods coming back from customers (refund + restock) or going back to suppliers (reduce stock + due).
Customer returns & replacements — process each request through the same flow as the web seller panel: approve/reject, arrange pickup, inspect the item (record the fault and who pays return shipping), then refund — choosing the method (wallet / cash / bank) with a reference and notes — or issue a replacement. Resalable items restock automatically; lost/damaged items post an inventory-loss entry.


Orders
See every order placed with you, filter by status, open an order for items/customer/payment details, move it forward (Pending → Confirmed → Delivered), and arrange delivery. Process customer returns from here too.
While an order is pending you can edit it (add/remove items, change quantities) or cancel it. When an item is shipped by the seller, you own its delivery charge and can record delivery, courier and tracking. The details screen mirrors the web seller panel — shipment tracking, payment history and any linked return/replacement.
Confirm Shipment (required before dispatch)
- Open the order's Confirm Shipment sheet: pick the delivery method, check the delivery charge the customer pays, and enter the courier charge you pay. Optionally book the courier through its API in the same step.
- Until you do, To Delivery and Delivered are locked in the status sheet with a lock icon and the reason — the same rule the web panel enforces, so the app can't be used as a shortcut.
- The Fulfillment card on the order shows the delivery method and courier charge, marking it Not recorded in red while missing.
- Billed a different amount later? Use the courier charge sheet to correct it even after the parcel is booked or delivered — the accounting entry is re-posted for you.

Delivery Settings & Charges
Multi-vendor Sellers get the same delivery tools as the web panel, right in the app:
- Delivery Settings — turn on Ship by seller, set your origin location, and set per-area default charges (Inside / Subcity / Outside) with a per-extra-unit amount and a delivery-time (ETA) range. Left blank, each field inherits the platform default.
- Delivery Charges — add a per-product special charge for one of your variants, per area. This is the highest-priority rule and overrides the defaults. (Courier-specific rows are set by the admin; your rows are area-only.)
Charge is per invoice: base once + (units − 1) × extra/qty. When Ship by seller is on, the delivery area is measured from your origin and you own the delivery charge for those items; otherwise the platform's courier/default applies.
POS & Register
The mobile POS lets you ring up counter sales on the go, in three steps:
- POS Register — a searchable product panel with a category strip and filter sheet; tap products to build the sale and see a live cart bar.
- POS Cart — adjust quantities, apply coupons and discounts, and redeem the customer's membership points from your own in-store program. (Wallet, platform reward points and affiliate are online-only and are not offered in POS.)
- POS Payment — take payment (cash, card, mobile money, mixed), then generate a printable PDF receipt or send it via WhatsApp.
POS Management sets up counters and cash registers (open with a starting balance at shift start, close at shift end to reconcile), plus petty expenses and cash pickup.


Accounts & Journals
Full double-entry accounting on mobile. Chart of Accounts defines your accounts; sales, purchases and expenses post journal entries automatically. View transactions, run reconciliation against a statement, and keep your books accurate anywhere.


Expense, Transfer & Deposit
- Expense — record business spending against an account.
- Fund Transfer — move money between your accounts.
- Bank Account & MFS Account — set up bank and mobile-money (bKash/Nagad-style) accounts.
- Bank Deposit — record cash deposited to the bank.


Wallet & Money Withdraw
Track your seller Wallet balance (earnings, commissions kept by the platform deducted) and request a Money Withdraw / payout. In multi-vendor mode these requests are approved and paid from the web admin's Payout Requests.


Promotions & Campaigns
Drive sales with Promotions (coupons / flash-sale style discounts) and themed Campaigns grouping products and offers over a date range with a banner.

Membership & Rewards
Multi-vendor Membership is your own in-store program — your rates, your members, used at your POS. Nothing is shared with other sellers or with the platform, so points a customer earns with you can only be spent with you.
- Membership Settings — points earned per unit of currency, the value of a point when redeemed, the minimum points redeemable, and the purchase amount that auto-enrols a customer. Leave a field untouched and the platform default applies.
- Members — the list of customers enrolled in your program, with their point balance.
- Product points — set how many points a specific product earns.
The platform's wallet, reward points and affiliate program are separate, run online only, and are settled by the admin — they never draw on your till.


Affiliate
Manage the Affiliate program — referral partners and the commissions they earn on referred sales.
Contacts
Keep your Contacts — customers and suppliers — with their balances/dues, so purchases, sales and returns always tie back to the right party.

Reports
On-the-go Reports across sales, inventory and accounting — sales summaries, stock value/low-stock, profit, and cash/ledger views — so you can make decisions without opening a laptop.

Messages & Feedback
Messages is the real-time chat inbox for talking to customers/support. Feedback collects customer ratings and reviews you can respond to.


Account & Settings
Manage your Account (profile, shop info, password) and app Settings (language, notifications). When Firebase is configured in the admin panel, you receive push notifications for new orders, payouts and return requests. Content and rules ultimately follow what's configured in the web admin.

Changelog
Version 1.0.0
- Confirm Shipment sheet — record the courier charge (and optionally book the courier) before dispatch; To Delivery / Delivered stay locked until you do, and the charge can be corrected afterwards.
- Seller-wise membership — your own point rates, member list and POS redemption, kept separate from the platform wallet / reward / affiliate programs (now online-only).
- Journal browser with entry-level detail, and bank deposit list, detail and entry sheets.
- Inventory screens with stock history, low-stock cards and stock-delta badges.
- Localisation pass across orders, POS, stock transfer and warehouse forms; media size guidance on product forms.
- Theme-driven colors across screens and widgets, plus consistent filter chips, search bars and dropdowns.
- Initial release of the Sellino Seller App (Flutter, Android & iOS).
- Business dashboard with sales, order, purchase and customer trends.
- Catalog: products, attributes, categories, brands, units, tax, barcodes and product FAQ.
- Purchase orders and full inventory — stock, adjustment, damage, transfer, returns and warehouses.
- Mobile POS with cash register, coupon/loyalty/wallet redemption and PDF/WhatsApp receipts.
- Accounting: chart of accounts, journals, transactions, reconciliation, bank/MFS, deposits and withdrawals.
- Order management with pending-order edit/cancel, seller-shipped delivery and tracking.
- Customer return & replacement processing (pickup, inspect, refund by wallet/cash/bank).
- Push notifications (Firebase) for new orders, payouts and return requests.
- Promotions, campaigns, membership, rewards, affiliate, reports and real-time messages.
- Secure (flutter_secure_storage) auth-token storage; multi-language (EN/AR/BN, RTL).
FAQ
Q: How is the Seller App different from the Customer App?
The Customer App is for buyers (shopping). The Seller App is for the shop owner/vendor to run operations — products, stock, POS, orders and accounting.
Q: Does it work in single-vendor stores?
Yes. In single-vendor mode it's the owner's mobile control panel; in multi-vendor mode each vendor uses it for their own shop.
Q: Where do I set the server URL?
In lib/core/env/prod_env.dart (release builds) — set kBaseUrl to https://yourdomain.com/api/v10. Debug builds read dev_env.dart.
Q: Why can't I log in?
Confirm the account exists and is approved on the backend, the API URL is correct, and the endpoint is served over valid HTTPS.
Q: How do payouts work?
Request a withdrawal from Wallet & Money Withdraw; an admin approves and pays it from the web admin's Payout Requests (multi-vendor).
Q: Can I change the app name and icon?
Yes — see App Name & Icon, and set a unique package/bundle id.