June 4th, 2025 4:00 PM CET
Webinar "Modernize or Rebuild from Scratch: What Your Legacy System Really Needs"
Contact us

Inventory Management Application for a Motorcycle Accessories Store

Embedded app development that helped streamline the company’s inventory operations

ABOUT
the project

Client:

Motorcycle Accessories Store

Location:

Country flag

USA

Company Size:

10+ Employees

Industry:

Retail

Services:

Cross-platform App Development

Technologies:

Embedded

Flutter

Dart

Java

Bluetooth

Hive

ZPL

.NET

Angular

 

The application runs on Zebra and Honeywell scanner devices powered by the Android operating system. It includes an inventory mode that enables barcode scanning, price validation, and data synchronization with the company’s database. The app also seamlessly integrates with a Zebra printer to print receipts and inventory reports with precise formatting

The biggest challenge was working with the hardware, as there was little to no documentation on how to integrate it properly. There weren’t many existing solutions to follow, so we had to find our own way to make it work

Denys Doskochynskyi

Flutter Software Engineer

Customer

Our customer, a motorcycle accessories store, needed a solution to simplify and automate its inventory management process. They needed a robust solution that would automate inventory management, ensure real-time validation of scanned items, and seamlessly integrate with their existing hardware, including Zebra barcode scanners and printers.

Business Challenge

The client lacked an integrated system for direct communication between barcode scanning devices and their database. The existing process relied on manual barcode scanning and data entry, which was time-consuming and prone to errors. Employees had to scan items using a basic application that only stored scanning history locally, requiring them to manually transfer data into the central database. This often led to discrepancies, misplaced records, and inefficiencies in stock tracking.

Why Leobit

Our customer chose Leobit for our expertise in cross-platform app development and our ability to handle complex integrations with hardware components, including barcode scanners and receipt printers.

Project
in detail

A key challenge in developing the inventory management application was ensuring seamless integration with Zebra scanner devices and printers, which required a deep understanding of embedded development principles. Since the application interacts directly with specialized hardware, Leobit implemented custom solutions to bridge the gap between Flutter and the native functionality of the Zebra and Honeywell devices

Project in detail

To support the application’s complex hardware interactions and integrations, Leobit developed a back end using .NET. This back end acted as a middleware between the client’s internal ERP system, the mobile app running on Zebra and Honeywell devices, and external services such as postal APIs and inventory modules. It enabled seamless data exchange and ensured that scanning, printing, and inventory actions were fully synchronized across systems.

The application allows users to scan product barcodes and instantly verify their accuracy against the database. If the scanned barcode matches an existing record, the inventory count is automatically updated. Users can finalize or partially complete inventory sessions. This provides users with flexibility if items are missing or pending arrival. Additionally, users can manually adjust inventory counts. If a product has multiple identical items, they can either scan each item separately or increment the count manually.

The app supports assigning multiple barcodes to a single product. For example, a product can have a manufacturer barcode and a store-specific barcode. We made the system allow users to link multiple barcodes to the same inventory item.

Leobit manually configured the Zebra printer using ZPL (Zebra Programming Language) to generate and print receipts in the correct format based on the paper type. This ensured that receipts were properly formatted and printed with the proper size and alignment.

The application’s user interface was built using Flutter, which provides a seamless and responsive experience across different screen sizes. Flutter was chosen for its ability to accelerate UI development while maintaining high performance on Android-based Zebra and Honeywell scanner devices. The framework also allows future expansion to iOS with minimal development effort by creating an additional communication bridge rather than building a separate app.

The application also featured tight integration with the client’s inventory module. API endpoints allowed the app to retrieve expected stock levels and send back real-time data on scanned items during inventory checks. The back end then calculated discrepancies, flagging shortages or overages. This enabled more accurate and efficient inventory tracking and helped eliminate manual reconciliation efforts.

Leobit suggested the use of Hive local storage to store and quickly retrieve scanned inventory data. It enables offline access and reduces dependency on constant backend synchronization.

When a product barcode is scanned, the system checks whether the price printed on the label matches the current database value. If there’s a discrepancy (e.g., the price has changed in the back end), the app automatically prompts the user to print an updated price label. These labels, which include the product name, price, and a QR code, can be scanned either by a mobile phone (redirecting to the product’s web page) or by the inventory scanner, which reads embedded price metadata for further validation.

To further improve the in-store experience, the app supported a self-scan shopping mode. Customers or shop employees could scan products directly into a digital cart, enabling faster checkout processes and simplified stock movement tracking. This feature laid the groundwork for future self-service scenarios, such as mobile-based shopping or assisted checkouts.

project-in-detail

Proprietary SDK development

Leobit developed a custom SDK to ensure the proper work of the Zebra scanner with the printer. Since the Zebra scanner SDK lacked direct Flutter support, Leobit built a native-to-Flutter bridge using Method Channels. This ensured that scanned data was processed instantly, thanks to updating the local Hive database and syncing with the backend when needed.

The Zebra printer posed another challenge, as it did not provide the necessary authentication certificate for pairing. To overcome this, Leobit created a custom Java-based Bluetooth module, which helped us bypass the certificate requirement and enable smooth communication. Additionally, the printer did not supply the required connection libraries, making it impossible to process essential data. To resolve this, Leobit manually rewrote the Bluetooth library. This allowed the app to establish a connection and effectively communicate with the printer.

project-in-detail

Custom app update mechanism

Given that the application was not distributed through the Google Play Store, Leobit developed a custom update delivery system. App builds were uploaded to private servers hosted on Azure Blob Storage and managed via a web-based admin panel built with Angular and .NET.

Flutter apps on devices routinely check for updates through API calls. If a new build was available, the app downloaded it and self-updated without user intervention. The admin panel allowed developers to manage active builds, roll back to previous versions, or delete faulty updates. App binaries were stored on Azure Blob Storage, ensuring scalability and reliability.

project-in-detail

Integration with postal service

The solution included direct integration with the local postal carrier. When deliveries arrived, employees could scan postal barcodes, and the system would immediately recognize the incoming shipment, mark it as received in the back end, and optionally ping the postal service’s API to confirm delivery.

In the case of returns, the system allowed staff to scan returned items, automatically generate a return invoice with a tracking number, and print a shipping label for processing. This allowed us to fully automate the return logistics flow.

Technology Solution

  • Custom Bluetooth library development for reliable printer communication
  • Flutter-based architecture for intuitive UI and faster development
  • Advanced integrations with hardware devices through custom SDK development
  • The use of Hive local storage for offline access, storing and quickly retrieving scanned inventory data
  • Developed back-end endpoints for integration with the inventory module
  • Integration with local postal service API

Value Delivered

  • Reduced manual errors thanks to automated inventory tracking
  • Streamlined inventory process
  • Automated flow for parcel acceptance and return logistics