Seller App

Sellino – Flutter Merchant App (Android & iOS)
Version: 1.0.0
Built with: Flutter (Dart)
Backend: Sellino API /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.

Dashboard
Dashboard

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

  1. Open the SellerAppCode folder in your IDE and run flutter pub get to fetch dependencies.
  2. Set the API base URL in lib/core/env/prod_env.dart (release builds) or lib/core/env/dev_env.dart (debug builds) — the image base URL, websocket scheme and broadcasting auth URL are all derived from it automatically.
  3. 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, otherwise REVERB_APP_KEY from .env.
  4. Paste the App API key (kAppApiKey) in the same file — see below. Wrong or missing key → 401 on every screen.
  5. Ensure the backend's seller features are enabled and the seller account is approved.
  6. 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.

  • kBaseUrl and kAppApiKey live 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:label in android/app/src/main/AndroidManifest.xml (it reads @string/app_name in android/app/src/main/res/values/strings.xml). iOS: CFBundleDisplayName in ios/Runner/Info.plist.
  • Package / Bundle ID — Android applicationId in android/app/build.gradle.kts; iOS PRODUCT_BUNDLE_IDENTIFIER in 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:

  1. 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).
  2. Optionally adjust flutter_launcher_icons.yaml (e.g. adaptive_icon_background colour).
  3. 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 .aab to the Google Play Console.
iOS — signing & distribution

iOS builds require a Mac with Xcode and a paid Apple Developer account.

  1. Open ios/Runner.xcworkspace in Xcode.
  2. Under Signing & Capabilities, select your Team and set a unique Bundle Identifier.
  3. Let Xcode Automatically manage signing (creates the certificate and provisioning profile), or add them manually from the Apple Developer portal.
  4. Create the app record in App Store Connect using the same bundle id.
  5. 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.
Login
Login
Dashboard
Dashboard

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.

Products
Products
Deleted products
Deleted products

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.
Categories
Categories

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 FAQ
Product FAQ

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.

Product stock
Product stock
Purchase orders
Purchase orders

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.

Stock adjustment
Stock adjustment

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.

Warehouses
Warehouses
Returns
Returns

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.
Orders
Orders

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.

Delivery Settingsship-by-seller + areas
Delivery Chargesper-product / courier

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.

POS cart
POS cart
POS register
POS register

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.

Journals
Journals
Chart of accounts
Chart of accounts

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.
Expenses
Expenses
Bank deposit
Bank deposit

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.

MFS / wallet accounts
MFS / wallet accounts
Money withdraw
Money withdraw

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.

Campaigns
Campaigns

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.

Membership
Membership
Reward points
Reward points

Affiliate

Manage the Affiliate program — referral partners and the commissions they earn on referred sales.

Affiliate

Contacts

Keep your Contacts — customers and suppliers — with their balances/dues, so purchases, sales and returns always tie back to the right party.

Customers / contacts
Customers / contacts

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.

Reports
Reports

Messages & Feedback

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

Messages
Messages
Reviews
Reviews

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.

Settings
Settings

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.