hottake
描述
一个聊天应用,可以让你与匿名人士辩论话题。选择一个话题和立场,然后与持相反观点的人辩论。辩论结束后,给你的对手评分。评分会显示在你辩论时的名字旁边。有一个Android版本和一个Web版本。
图片
技术栈
这个应用使用Flutter作为前端,Firebase作为后端。我对Flutter的体验还不错,我喜欢用Dart和构建移动UI,但在状态管理方面遇到了困难,并努力让Flutter Web感觉像一个网站。Firebase用起来很愉快,因为它在开发应用时可以保持在免费使用限额内。像认证这样的服务也由Firebase提供。我唯一对Firebase感到不满的是,在用了一段时间Firestore之后,我发现没有`onDisconnect`函数可用,所以我最终同时使用了Realtime Database和Firestore。
功能
- 话题存储在Firebase Firestore的一个集合中
- 应用获取话题并在主页上将它们显示为按钮
- 用户点击一个话题,然后被要求选择一个立场(支持或反对该话题)
- 发出一个HTTP请求(Firebase Functions),并返回一个聊天室ID给应用
- 聊天室加载,用户可以辩论话题
- 当用户完成辩论后,他们可以通过一个按钮结束聊天
- 聊天结束后,用户可以对他们与对方用户的互动进行评分
- 消息、聊天室和用户数据在聊天进行时存储在Firestore中,并在聊天结束时删除。
- 用户可以在设置页面更改用户名并查看声誉。
- 用户可以创建账户或使用他们的Google账户创建账户。
如何运行
- 安装Flutter https://docs.flutterdart.cn/get-started/install
- 创建Firebase账户 https://console.firebase.google.com/
- 安装Firebase https://firebase.google.com/docs/flutter/setup?platform=ios
- 如果您在Firebase中启用了App Check,则需要使用调试密钥进行本地运行
- 仓库中未包含的文件
- lib/shared/private.dart (包含Web App Check的reCapchta密钥)
- android/app/google-services.json (用于Android认证,请遵循步骤3中的说明)
- lib/firebase_options.dart (在步骤3中初始化Firebase时创建)
- web/token.js (用于Android APK认证,如果您决定上传到Play Store)
为什么
这个应用是我为了学习Flutter工作原理而做的个人项目,主要是学习一个代码库如何用于开发跨平台应用。我也会将这个项目用在我的开发者作品集中。
限制
- Flutter Web在刷新浏览器窗口时会丢失状态,这意味着如果您刷新窗口,您将从聊天中断开连接。需要添加Shared Preferences来在页面刷新时保存数据。
- 您无法更改密码或电子邮件。
- 如果要使用从APK安装的Android版本,则需要禁用App Check(在Firebase控制台中),因为App Check令牌仅在应用从Play Store安装时才有效。
可以添加的功能
- 用户举报系统
- 基于声誉的匹配
- 能够保存聊天
- 将用户保存为好友并与好友一起加入聊天。





