用Flutter和PocketBase制作购物清单
概述
此应用的目的是维护一个可供多人使用的购物清单。在我们的家庭中,我们都使用这个应用程序来告知其他成员想要购买的商品。如果有人去购物,他/她可以为所有家庭成员购买商品。
后端软件PocketBase会通知所有正在运行的应用实例有关清单中的更改。所以,如果你在商店里,你也会看到其他成员新添加到列表中的商品。
此应用需要一个PocketBase后端,在某个地方运行。PocketBase是一个单二进制文件中的Firebase克隆。更多信息请访问PocketBase主页。在该页面上,在讨论区有一个关于在fly.io上运行PocketBase的良好描述。下面有一些关于fly.io的章节。
功能
- 多个主题,带自定义选项
- 本地化(英语和德语)
- 适用于Linux、Android、Windows、iOS、MacOS(Web版本缺乏实时事件,请参阅注意事项)
屏幕截图
以下是购物清单的一些技巧
- 您可以通过向左滑动并按勾选标记图标,或双击商品本身来将商品标记为已购
- 点击加号或减号即可更改商品的数量
- 已购商品会放在列表的末尾,以便更清晰地查看
- 商品按商店分组,并按字母顺序排序
- 在搜索对话框中,可以通过按加号来添加新商品
技术描述
此应用中只使用了一个数据库表“shoppinglist”。此表(或集合)具有以下必须预先创建的字段
active:布尔值amount:数字,最小值=0,最大值=100bought:布尔值article:纯文本,最小长度=1,最大长度=120,非空,唯一shop:纯文本,最大长度=80
还有一个JSON格式的模式文件(pb_schema.json),可以导入PocketBase来创建此集合。
注意事项
PocketBase提供实时事件来通知客户端(购物清单应用)数据更改。不幸的是,这在Flutter Web上不起作用。有关技术细节的更多信息可以在PocketBase讨论区的这个主题中找到。
使其工作
安装/部署PocketBase
按以下步骤进行
- 部署或安装PocketBase(本地运行即可)
- 打开PocketBase的管理页面(即时创建PocketBase管理员用户)
- 导入
pb_schema.json以创建购物清单集合(通过“Sync – Import Collection”) - 创建带有电子邮件和密码的用户。将他们标记为已验证,并给他们一个**姓名**。这个名字在应用中可见。
- 在购物清单集合中输入一些数据,或者稍后在应用中进行
编译/运行购物清单
我假设您的机器上已安装Flutter,并且flutter doctor对于您将使用的平台没有显示错误。
- 运行**
flutter run**来启动应用程序,并使用本地安装的PocketBase - 如果您的PocketBase实例不在localhost上,您必须运行**
flutter run --dart-define=SHOPPINGLIST_HOST=https://YOUR-POCKETBASE-DOMAIN.com** - 要创建Android应用,例如运行**
flutter build apk** - 如果您的PocketBase实例不在localhost上,您必须运行**
flutter build apk --dart-define=SHOPPINGLIST_HOST=https://YOUR-POCKETBASE-DOMAIN.com** - 在应用内,使用电子邮件和密码登录
就是这样。祝您购物愉快!
重要提示
如果您在本地运行PocketBase,并想从Android模拟器等设备访问它,您需要这样启动PocketBase
> pocketbase serve --http 0.0.0.0:8090这可以确保PocketBase监听所有地址。此外,您需要设置环境变量
SHOPPINGLIST_HOST,将其设置为您主机机器的正确IP地址,例如http://192.168.0.52。地址取决于您的网络,您应该使用ip a、ipconfig或ifconfig等工具查找它。
创建发布版本
要创建使用正确PocketBase URL的发布版本,您需要设置一个命令行选项,将环境变量提供给Flutter
> flutter build apk --dart-define=SHOPPINGLIST_HOST=https://YOUR-POCKETBASE-DOMAIN.com
使用Visual Studio Code
为了在VSCode中运行或调试应用程序时拥有正确的环境变量,您需要创建一个启动配置.vscode/launch.json,并具有如下配置
{
"version": "0.2.0",
"configurations": [
{
"name": "shoppinglist",
"request": "launch",
"type": "dart",
// Arguments to be passed to the Flutter app
"args": [
"--dart-define",
"SHOPPINGLIST_HOST=https://YOUR-POCKETBASE-DOMAIN.com"
]
},
]
}
本地化
该应用程序使用Intl包来维护不同的本地化。如果您更改了./lib/l10n/*.arb文件的内容,请运行以下命令
> flutter gen-l10n
这将更新.dart_tool/flutter_gen/gen_l10n中的文件。
PocketBase在fly.io上运行
在接下来的章节中,我将展示一些有用的命令来帮助您管理fly.io上的PocketBase。我假设您位于包含Dockerfile和fly.toml文件的文件夹中。
检查容器
如果您想查看容器中当前有什么
> flyctl ssh console
# ls -l /pb/pb_data
备份
本地备份数据库文件
> flyctl ssh sftp get /pb/pb_data/data.db ./data.db
恢复
在fly.io上恢复数据库备份
> flyctl ssh sftp shell
>> put ./LOCAL-PATH-WITH-DB/data.db /pb/pb_data/data.db
之后,您应该重启PocketBase,以便使用恢复的数据库
> flyctl apps restart YOUR_APPLICATION_NAME
部署新的PocketBase版本
您需要更新fly.toml文件,以PocketBase版本(PB_VERSION)为准。完成后,运行
> flyctl deploy
您的数据库将不受影响,保持原样。










