
字节笔记本
2026年8月29日
开源 Flutter POS:小店点餐结账怎么自己跑
小餐馆要一套点餐、库存、收银、蓝牙出单,商业 POS 又贵又爱往云上塞数据。flutter-pos-system 是 Apache 2.0 的 Flutter 应用,订单和菜单默认躺在你自己的手机里,没网也能卖。作者吕学洲维护,仓库大约 600 star,最近一版是 2026 年 8 月 7 日的 v2.12.0。
店里直接用可以去 Google Play 装 Android 包。想改功能或自己编译,下面按官方文档和仓库现状写。
店里实际能做哪些事
菜单能按分类改价、改成本、挂食材。每点一单,对应库存会扣。库存不够会提醒。点餐带排队和金额速算,结账走收银机,用来对当日现金。顾客侧可以记外带/内用、年龄、性别这类维度,后面做图表。出单走蓝牙打印机。v2.12.0 起小票格式能自己改。
备份不走作者的服务器。Transit 能把订单、菜单导出成 CSV 或 Excel;也可以授权 Google 账号,把表推到 Google 表格。分析页能自己拼折线、饼图。
三条设计原则写在文档里:离线能用、客单不默认上传、界面跟大屏。中文界面目前主要是繁体(zh-TW)。
iOS 官方文档还写着「再等等」。2026 年 5 月的更新加过 iOS 工程配置和权限,但商店下载口仍然只有 Android。
数据放哪
业务对象分两套存储:
对应代码在 lib/services/:database 管 SQLite 和迁移,storage 管 sembast。仓库层(lib/models/repository/)负责购物车、菜单、库存、收银、出单,UI 不直接碰文件。
应用里有 Firebase Analytics / Crashlytics / Auth。这是客户端崩溃和用量统计。客单不会因此同步到作者那边。真正离开本机的业务数据,只有你主动做的 Google 表格备份或文件导出。
本地把工程跑起来
pubspec.yaml 把 Flutter 钉在 >=3.41.0 <3.42.0,Dart >=3.11.0 <4.0.0。版本不对会直接解析失败,先对一下 flutter --version。
作者把蓝牙打印等私有辅助放在 flutter-pos-packages。本地开发要先换成 mock,避免去拉那份私有依赖:
git clone https://github.com/evan361425/flutter-pos-system.git
cd flutter-pos-system
sed -i.bk 's/flutter-pos-packages$/flutter-pos-packages-mock/' pubspec.yaml
rm -f pubspec.yaml.bk
flutter pub get只想跑测试的话:
make mock
make test要打 Android 包,还得自己准备三样:android/app/*.jks 签名、android/key.properties、以及 Firebase 的 google-services.json。密钥指纹要写进 Firebase 项目,再把 debug 配置填进 lib/firebase_compatible_options.dart。文档给了一套 keytool 示例,正式上架请换成你自己的密码和 dname,别用文档里的占位口令。
贡献流程是常见的 fork → flutter pub get → dart run build_runner build → flutter test → 开 PR。文档和站点在 gh-pages 分支。
代码怎么拆
对想改功能的人,目录比 README 有用:
| 目录 | 干什么 |
|---|---|
lib/ui/order/ | 点餐、购物车、结账 |
lib/ui/menu/ | 分类和商品 |
lib/ui/stock/ | 库存、分量、补货 |
lib/ui/cashier/ | 收银、找零 |
lib/ui/analysis/ | 图表 |
lib/models/ | 商品、食材、订单等对象,只跟 repository / service 说话 |
lib/components/ | 对话框、可排序列表这些通用壳 |
lib/settings/ | 主题、语言、点餐时是否亮屏 |
路由在 lib/routes.dart,状态用 provider。入门可以先从改菜单字段或加一种顾客选项开始,这两处模型边界清楚,也不容易把收银账算乱。
更细的树状说明在官方 Architecture 页,繁中入口是 POS 系統文档。
适合谁、不适合谁
适合:小店先用起来、不想月付云 POS;或者拿来当 Flutter 中型应用样本(有库存、有钱、有外设)。
不适合:连锁、要云端多终端实时对账、要现成的员工权限和税务申报。那些得自己在 repository 和 sync 层加。蓝牙打印机型号以应用内支持列表为准,生僻机子要在设置里手选类型。
店里用:Play 安装,先建分类和商品,把食材挂上库存,再配对打印机打一张测试小票。改代码:锁 Flutter 3.41,换 mock 包,flutter pub get,从 lib/ui/menu/ 看起。