✨ 我是 Muzi 的「文章捕手」,擅长在文字的星海中打捞精华。每当新的篇章诞生,我就会像整理贝壳一样,将思想的闪光点串成珍珠项链~

本文记录了虚拟宠物陪伴应用“Cat Club”的首日开发过程。项目采用Flutter、Riverpod、go_router、Firebase及Replicate API等技术栈,实现AI智能生成宠物卡通形象、情感互动陪伴及已故宠物纪念功能。开发中解决了Firebase依赖升级、Kotlin版本冲突及国内Maven仓库访问问题,成功集成Google登录功能。项目架构遵循Clean Architecture分层设计,涵盖核心基础设施、数据层、状态管理、服务层和表示层。首日完成环境配置、Firebase集成及基础登录注册功能。后续计划实现宠物创建、房间主页及互动功能,推动虚拟宠物核心体验开发。

# 前言

今天正式开始开发 Cat Club(猫咪俱乐部)—— 一款虚拟宠物陪伴应用。这个项目的灵感来源于我对宠物的喜爱,希望通过 AI 技术为用户创造独特的虚拟宠物体验。

项目的核心理念是:

  • 🎨 AI 智能生成:上传宠物照片,AI 自动生成卡通形象
  • 💝 情感陪伴:通过互动养成建立情感连接
  • 🌟 永久纪念:为已故宠物提供温馨的纪念模式

# 技术栈选择

经过调研,我选择了以下技术栈:

技术 选择 理由
前端框架 Flutter 跨平台、高性能、丰富生态
状态管理 Riverpod 类型安全、可测试性强
路由 go_router 声明式路由、深链接支持
后端服务 Firebase 快速开发、实时同步、免运维
AI 生成 Replicate API 灵活的模型选择、按需付费

# Day 1 开发记录

# 1. 环境配置踩坑

首次运行项目就遇到了一堆依赖问题,花了不少时间解决:

# Firebase 依赖版本过旧

项目模板的 Firebase 版本太老,需要全面升级:

# pubspec.yaml 升级后
dependencies:
  firebase_core: ^4.4.0      # 原 2.x
  firebase_auth: ^6.1.0      # 原 4.x
  cloud_firestore: ^6.1.0    # 原 4.x
  firebase_storage: ^13.0.0  # 原 11.x

# Kotlin 版本问题

Android 构建时报错找不到 Kotlin 版本:

// settings.gradle.kts
// 错误:2.2.20 不存在
// 修复:改为 2.0.21
plugins {
    id("org.jetbrains.kotlin.android") version "2.0.21" apply false
}

# Maven 仓库网络问题

国内网络访问 Google Maven 仓库超时,配置了阿里云镜像:

// settings.gradle.kts
dependencyResolutionManagement {
    repositories {
        maven { url = uri("https://maven.aliyun.com/repository/google") }
        maven { url = uri("https://maven.aliyun.com/repository/central") }
        google()
        mavenCentral()
    }
}

# 2. Google 登录集成

这是今天的重头戏。Flutter 集成 Google 登录需要以下步骤:

# Step 1: 获取 SHA-1 指纹

cd android
./gradlew signingReport

获取到调试签名:81:E0:2F:F3:C5:AB:C6:9B:EA:88:CB:40:4C:A6:9B:5C:15:36:41:73

# Step 2: Firebase Console 配置

  1. 进入 Firebase Console → Authentication → Sign-in method
  2. 启用 Google 登录
  3. 添加 SHA-1 指纹
  4. 重新下载 google-services.json

# Step 3: 代码实现

// auth_service.dart
Future<UserCredential?> signInWithGoogle() async {
  final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
  if (googleUser == null) return null;

  final GoogleSignInAuthentication googleAuth =
      await googleUser.authentication;

  final credential = GoogleAuthProvider.credential(
    accessToken: googleAuth.accessToken,
    idToken: googleAuth.idToken,
  );

  return await _auth.signInWithCredential(credential);
}

# 3. 项目架构

采用 Clean Architecture 分层:

lib/
├── core/          # 核心基础设施
│   ├── constants/ # 常量定义
│   ├── theme/     # 主题配置
│   └── utils/     # 工具类
├── data/          # 数据层
│   └── models/    # 数据模型 (freezed)
├── providers/     # 状态管理 (Riverpod)
├── services/      # 服务层
└── presentation/  # 表示层
    ├── pages/     # 页面
    ├── widgets/   # 组件
    └── router/    # 路由

# 今日成果

  • ✅ 项目环境配置完成
  • ✅ Firebase 集成(Auth、Firestore、Storage)
  • ✅ 邮箱注册/登录功能
  • ✅ Google 登录功能
  • ✅ 基础页面框架(启动页、登录页、注册页)

# 遇到的问题

  1. Firebase 重复初始化崩溃:在 main.dart 添加 try-catch 处理
  2. CardTheme API 变更:Flutter 3.x 需要使用 CardThemeData
  3. image_cropper 版本冲突:升级到 11.0.0 解决

# 明日计划


# 心得体会

第一天主要在和各种依赖版本做斗争,这也是 Flutter 开发的常态。好在最终都解决了,项目能够正常运行。

Google 登录的集成比想象中顺利,Firebase 的文档还是比较完善的。明天开始进入核心功能开发,期待看到第一只虚拟宠物诞生!


项目地址:Cat Club(待开源)