Wholesale Order App

Wholesale Order AppFlutter Project

A Cross-Platform Flutter Solution for B2B Wholesale Order Management

This client needed a modern mobile app for their B2B wholesale customers, requiring our Flutter app development services. The critical challenge was that the app must integrate with their existing, on-premise POS (Point of Sale) software. We built a custom Flutter application that serves as a mobile front-end to their inventory, showing real-time stock levels and allowing the business to filter which products are visible for online ordering.

😟 The Client's Problem: Integrating a Mobile App with a Legacy POS

The client's business was "locked" inside their existing POS software. They had no way for wholesale customers to order online, which led to several major problems:

  • No Digital Ordering: All wholesale orders had to be placed manually, likely via phone, email, or text message. This was slow, required manual data entry, and was prone to human error.
  • Inventory "Blindness": Customers had no way to see what was in stock. They would frequently order items that were unavailable, leading to frustration, follow-up calls, and lost sales.
  • The Integration Challenge: The client could not replace their POS system. They needed a custom API solution that could talk directly to their existing inventory database.
  • Lack of Control: They needed a way to differentiate between in-store and online inventory, with the ability to "hide" certain products from the app.

💡 The Solution: A Flutter App with Real-Time POS Sync

We designed and developed a cross-platform Flutter application that acts as a secure and intelligent "bridge" between the client's customers and their internal POS system.

  • Real-Time POS Inventory Sync: We built a custom API to connect directly to the client's inventory database. The app shows live product stock to customers, and items automatically disappear when they are sold out, preventing out-of-stock orders.
  • Selective Product Filtering: We gave the business a management tool to "filter" which products they wanted to sell online, giving them full control over their digital catalog.
  • Custom B2B Order Flow: The UI/UX was designed specifically for wholesale ordering. Customers can browse the catalog, select products, and add them to a cart.
  • Simple Cart & Quantity Management: In the cart, customers can easily adjust quantities or delete items before finalizing their order.
  • "Customer Name" Checkout: Instead of a complex email/password sign-up, the checkout process is built for B2B. Customers simply enter their unique "customer name" (provided by the business), which links the order directly to their account in the POS system.
  • Shareable Order Receipts: After placing an order, the app generates a clean, itemized receipt. The customer (often an employee) can instantly share this receipt with their boss or purchasing department for approval.

🛠️ Technology Stack & Key Services

This project combined modern mobile development with complex backend integration.

Key Services

  • Flutter App Development
  • Custom POS System Integration
  • Custom API Development & Integration
  • B2B E-commerce Solutions
  • Cross-Platform Mobile App Development

Technology Stack

  • Mobile Framework: Flutter (for a single codebase on iOS and Android)
  • Inventory & Data Source: External REST API (The custom integration layer built to communicate with the client's existing POS software).
  • Order & User Data: Firebase Firestore (To store order history and manage customer app data).
  • State Management: Provider
  • UI/UX: Material Design 3 with a responsive, bilingual (English & Myanmar) interface.
  • Offline Functionality: Implemented Hive (a local database) to provide a basic offline fallback.

⚙️ The Process

  • Discovery & POS Analysis: This was the most critical phase. We worked directly with the client to analyze their existing POS database structure and define the secure API endpoints needed for live stock and order submissions.
  • Custom UI/UX Design: We designed a simple, no-nonsense app flow based on the client's specific B2B workflow, prioritizing speed and ease of use.
  • Agile Development (Flutter): We built the Flutter app, focusing on a clean catalog, an intuitive cart, and the "customer name" checkout logic.
  • API Integration & Testing: We built and rigorously tested the API integration, ensuring that stock levels were 100% accurate in real-time and that new orders were formatted correctly to be injected into the POS system.
  • Deployment: We successfully launched the app on both the Apple App Store and Google Play Store.

🏆 The Result: A Modern B2B Order System Without Replacing Core Software

This app provided a massive ROI by modernizing the client's business without forcing them to change their internal systems.

  • Eliminated Manual Order Entry: The app digitized the entire wholesale ordering process, saving hundreds of staff-hours in manual data entry.
  • Zero Out-of-Stock Errors: The real-time inventory sync completely solved the problem of customers ordering unavailable items, improving customer satisfaction.
  • Client Kept Their Existing POS: This was the biggest win. The client did not have to change their core business software. Our app extended its functionality and gave it new life.
  • Improved Customer Loyalty: Wholesale customers loved the new, fast, 24/7 ordering process, strengthening their relationship with the business.
  • Streamlined B2B Approvals: The "share receipt" feature made the internal approval process much faster and easier for their customers.

Code Showcase

main.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'cart_model.dart';
import 'product_list_page.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(
    ChangeNotifierProvider(
      create: (_) => CartModel(),
      child: const MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Cart App',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const ProductListPage(),
    );
  }
}
product_list_page.dart
class ProductListPage extends StatefulWidget {
  const ProductListPage({super.key});
  @override
  State<ProductListPage> createState() => _ProductListPageState();
}

class _ProductListPageState extends State<ProductListPage> {
  // ...
  Future<void> _fetchAllProducts() async {
    // Fetch products from API, filter by stock, update state
  }
  void _filterProducts() {
    // Filter products by search
  }
  void _addToCart(Map<String, dynamic> product) {
    // Add product to cart
  }
  void _goToCart() {
    // Navigate to cart page
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Product List')),
      body: Column(
        children: [
          // Search bar, product grid, etc.
        ],
      ),
    );
  }
}
cart_page.dart
class CartPage extends StatelessWidget {
  const CartPage({super.key});
  void _confirmRemoveItem(BuildContext context, int index) {
    // Confirm and remove item from cart
  }
  void _increaseQuantity(BuildContext context, int index) {
    // Increase item quantity
  }
  void _decreaseQuantity(BuildContext context, int index) {
    // Decrease item quantity or remove
  }
  void _saveOrderToFirestore(BuildContext context, String customerName) async {
    // Save order to Firebase
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("Cart")),
      body: Column(
        children: [
          // Cart items, order button, etc.
        ],
      ),
    );
  }
}