Build your own
Scale-Tec connected app

With our cross-platform template that handles all the Bluetooth complexity — so you can focus on building your app.

Android 11+
iOS / iPadOS
Flutter 3.x
Dart 3.x
POINT device
CORE device

A head start,
not a hello world.

Want to build a scale connected mobile app? The hard part is done — real-time weight streaming, reconnection logic, fault detection, scale commands, and parameter access — all wired up and working on day one.

📦

Free to use template

Clone it, rename the app, swap in your own UI. The BLE layer is production-ready and stays out of your way.

BLE made easy

Advertisement parsing, GATT connections, characteristic notifications, reconnection — all handled. You subscribe to a stream and get live weight data.

📱

Cross-Platform

Android and iOS, with the correct permissions, CocoaPods integration, and platform-specific Bluetooth handling already in place.

🔧

A foundation for innovation

The core BLE files are designed to stay untouched. Build your app around them — replace the example screens with whatever your users need.

Works with Scale-Tec scales.

The template automatically detects which device it's connected to and selects the correct parameter IDs. You don't need to handle that yourself.

POINT

BLE prefix: Point-

The original Scale-Tec indicator. Supports Zero, Tare, Gross commands and full parameter read/write. Fault detection included.

CORE

BLE prefix: SJB-

Scale-Tec's new multi-ADC scale controller supporting up to 6 load cell channels simultaneously with industry leading diagnostics. Per-channel fault reporting via sjbFaults in the state stream.

Removing the barrier to entry.

Connecting your own app to an agricultural scale system wasn't easy... Until Now! .

Refresh icon

live weight (20ms updates)

Weight data from BLE advertisement packets — no GATT connection required for live display. Allows for live weight to be displayed even when signal is poor.

Refresh icon

Automatic reconnection

Handles reconnections quickly to minimize impact on user experience. Direct connect by device ID with scan fallback. A keep-alive timer detects dropped connections within 1 second.

Refresh icon

Fault detection

Reads load cell faults automatically when the scale requests service.

Refresh icon

Scale commands

Zero, Tare, Gross, and Tare Stop with Load Record — ready to wire to any button in your UI.

Refresh icon

Parameter access

Read and write Units, Display Language, Display Count, Scale Capacity, and Filter Sample Depth over GATT.

Refresh icon

App lifecycle handling

Scanning pauses automatically when the app is backgrounded and resumes when it returns to the foreground. Maximizing connection stability with minimal impact on battery life.

Subscribe to a stream.
That's the whole API.

All weight data, connection status, and fault information flows through a single stream. No polling, no callbacks — just reactive data.

live_weight.dart
// Create a manager for your device
final manager = ScaleConnectionManager(device);
manager.start();

// Subscribe — weight, status, and faults in one place
manager.stateStream.listen((ScaleConnectionState state) {
  final weight = state.data?.formattedWeight; // e.g. "12.34 lb"
  final status = state.status;              // connecting / connected / failed
  final fault  = state.pointFault;          // null if no fault
});

// Send commands
manager.zero();
manager.tare();
manager.gross();
manager.tareStopWithRecord();

// Clean up
manager.dispose();

Two files do the work.
Three screens show how.

The green files are the reusable BLE core — keep them untouched. The blue files are example screens — replace them with your own UI or modify them to suite your needs.

lib/ main.dart — app entry point src/ — reusable BLE core, keep untouched scale_data.dart — data types, enums, advertisement parsing scale_connection_manager.dart — all BLE logic screens/ — example UI, replace with your own or modify device_selection_screen.dart — scan for scales and select a device to connect to live_scale_screen.dart — live weight + Zero/Tare buttons settings_screen.dart — parameter read/write

Already configured
for Android and iOS.

Permissions, native dependencies, and platform-specific Bluetooth handling are all in place.

  • Supports API 21+ (Android 5.0 and up)
  • Correct permissions pre-configured for both API 30− and API 31+
  • Runtime permission handling built into the example scan screen
  • Tested on Android 11 and Android 12+
  • Requires a Mac with Xcode
  • Native dependencies and project setup already configured
  • Bluetooth permission strings already in Info.plist
  • Tested on iPad and iPhone

Up and running
in four steps.

You'll need Flutter installed and either Android Studio or Xcode depending on your target platform.

01

Clone the repo

Run git clone https://github.com/Dan-Scale-Tec/BLE-Scale-App-Template.git then flutter pub get to fetch dependencies.

02

Rename the app

Update the app name in pubspec.yaml and the bundle ID in build.gradle.kts (Android) or Xcode Signing settings (iOS). Do this before writing any code.

03

Run the example app

Connect a device or open a simulator and run flutter run. The example screens let you scan, connect, display live weight, send commands, and read parameters right away.

04

Build your own UI

Replace the screens in lib/screens/ with your own. Keep lib/src/ untouched — it's the part that talks to the scale and it's designed to stay stable across template updates.

Everything you need
to go from code to app store.

Helpful links for getting your Flutter environment set up, learning the framework, and publishing your finished app.

Built something with
this template?

We'd love to see it. Share a screenshot and a short description of your app — you might inspire the next developer to get started.

Optional — share a link so others can find your app

📸
Drop screenshots here, or click to browse
PNG, JPG, or WEBP · Up to 5 images · Max 5 MB each

Show off your UI! Phone screenshots or tablet screenshots both welcome.

By submitting you agree that Scale-Tec may feature your app on this page and related materials.

Ready to build?

This repository is open source under the MIT License—feel free to use it in personal or commercial projects. See the LICENSE file for full terms.