hottake

描述

一个聊天应用,可以让你与匿名人士辩论话题。选择一个话题和立场,然后与持相反观点的人辩论。辩论结束后,给你的对手评分。评分会显示在你辩论时的名字旁边。有一个Android版本和一个Web版本。

图片

技术栈

这个应用使用Flutter作为前端,Firebase作为后端。我对Flutter的体验还不错,我喜欢用Dart和构建移动UI,但在状态管理方面遇到了困难,并努力让Flutter Web感觉像一个网站。Firebase用起来很愉快,因为它在开发应用时可以保持在免费使用限额内。像认证这样的服务也由Firebase提供。我唯一对Firebase感到不满的是,在用了一段时间Firestore之后,我发现没有`onDisconnect`函数可用,所以我最终同时使用了Realtime Database和Firestore。

功能

  1. 话题存储在Firebase Firestore的一个集合中
  2. 应用获取话题并在主页上将它们显示为按钮
  3. 用户点击一个话题,然后被要求选择一个立场(支持或反对该话题)
  4. 发出一个HTTP请求(Firebase Functions),并返回一个聊天室ID给应用
  5. 聊天室加载,用户可以辩论话题
  6. 当用户完成辩论后,他们可以通过一个按钮结束聊天
  7. 聊天结束后,用户可以对他们与对方用户的互动进行评分
  8. 消息、聊天室和用户数据在聊天进行时存储在Firestore中,并在聊天结束时删除。
  9. 用户可以在设置页面更改用户名并查看声誉。
  10. 用户可以创建账户或使用他们的Google账户创建账户。

如何运行

  1. 安装Flutter https://docs.flutterdart.cn/get-started/install
  2. 创建Firebase账户 https://console.firebase.google.com/
  3. 安装Firebase https://firebase.google.com/docs/flutter/setup?platform=ios
  4. 如果您在Firebase中启用了App Check,则需要使用调试密钥进行本地运行
  5. 仓库中未包含的文件
    • 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安装时才有效。

可以添加的功能

  • 用户举报系统
  • 基于声誉的匹配
  • 能够保存聊天
  • 将用户保存为好友并与好友一起加入聊天。

GitHub

查看 Github