Skip to content
E-Commerce & RetailWebAndroidiOS

EasyStock

Role-based POS with vendor/customer ledgers for small retail businesses

A Flutter POS and back-office system for small retail businesses — Admin/Cashier roles, a two-pane checkout terminal with partial/credit payments, and running vendor and customer ledgers, all on a real-time Firestore backend across web, Android and iOS.

EasyStock — application screenshot
EasyStock — application screenshot
EasyStock — application screenshot

The repository is private. The router-level role gating, the credit and partial-payment ledgers and the two-pane checkout are explained below.

About this project

Small retail shops don't just need a checkout screen — they need to know who owes them money, who they owe, and what's low on the shelf, all from one place. EasyStock covers that ground: products and categories, a two-pane POS terminal with barcode/name search, vendors with a running vendor-payments ledger (accounts payable), and customers with their own payments ledger that supports partial and credit sales (accounts receivable) — a customer can pay less than the total and the balance tracks as credit until it's settled.

The POS terminal itself is built for a keyboard-first checkout flow: search-or-scan a product, set quantity, add to cart, apply a discount as either a flat amount or a percentage, pick a payment method, and either take full cash payment with a live change calculator or leave part of the sale as customer credit — checkout is bound to F5 for a till-style workflow. Orders can be edited, returned or deleted after the fact through dedicated dialogs.

Every role is enforced through GoRouter redirects, not just hidden UI: an admin/cashier role model drives route guards that send an unauthorized cashier to a dedicated unauthorized screen rather than merely graying out a button — the dashboard, user management and settings routes are admin-gated at the router level. The dashboard itself runs period-filtered analytics (Today/Yesterday/This month/Last month/a custom date range) with a sales trend chart, period-over-period trend arrows on each stat, and low-stock warnings, built on fl_chart over live Firestore data.

Key features

  • Admin and Cashier roles enforced at the router level (GoRouter redirects, not just hidden UI) with a dedicated unauthorized-access screen
  • Two-pane POS terminal: barcode/name search, quantity, flat or percentage discount, payment method, live cash-received/change calculator, keyboard-bound checkout (F5)
  • Partial and credit sales — a sale can be paid in full, partially, or fully on credit, tracked per order
  • Running vendor-payments and customer-payments ledgers (accounts payable / accounts receivable), combining orders and payments into one chronological transaction history per party
  • Order returns, edits and deletes via dedicated confirmation dialogs
  • Analytics dashboard: period filters (Today/Yesterday/This month/Last month/custom range), a sales trend chart (fl_chart), period-over-period trend indicators, and low-stock warnings
  • Real-time inventory and sales data via Firestore across web, Android and iOS from one codebase
  • Admin-controlled user onboarding — no public self-signup

From the blog

More in E-Commerce & Retail

~/sherazi.dev$./say-hello

Say hello.

Questions about a case study, one of the packages, AI tooling or Flutter in general are always welcome.

// or browse the packages on pub.dev(opens in a new tab)