使用 Flutter 开始使用 Firebase Data Connect

在本快速入门中,您将创建一个小型示例数据库并将其部署到 Firebase,然后从 Flutter 前端访问该数据库。

前提条件

如需完成本快速入门,您需要具备以下条件:

  • 安装了以下工具的环境:
  • Google 账号。

教程

教程

1. 创建新的 Firebase 项目

首先,在 Firebase 控制台中创建一个新的 Firebase 项目。然后,将项目升级到 Blaze 方案。

2. 初始化您的项目

创建一个新目录,并在其中初始化 Firebase 项目。出现提示时,请选择以下选项:

  • 选择您在上一步中创建的项目。
  • 请勿使用 Gemini 创建架构(在本教程中,您将使用预构建的示例架构)。
  • 创建新的 Cloud SQL 实例。
  • 创建 Flutter 模板。
mkdir myproj ; cd myproj
firebase login --reauth
firebase init dataconnect

3. 查看示例 GraphQL 定义

Data Connect 中,您可以使用 GraphQL 定义所有数据库架构和操作。初始化项目时,Firebase CLI 会创建一些示例定义,帮助您入门。

dataconnect/schema/schema.gql(摘录)
type Movie @table {
  title: String!
  imageUrl: String!
  genre: String
}

type MovieMetadata @table {
  movie: Movie! @unique
  rating: Float
  releaseYear: Int
  description: String
}
dataconnect/example/queries.gql(摘录)
query ListMovies @auth(level: PUBLIC) {
  movies {
    id
    title
    imageUrl
    genre
  }
}

4. 部署架构和操作

无论何时对数据库架构、查询或突变进行更改,您都必须部署这些更改,才能使它们在数据库中生效。

firebase deploy --only dataconnect

5. 使用示例数据为数据库播种

此初始数据将为您提供在测试示例应用时可供查看的内容。请注意,在此步骤中,您正在执行任意 GraphQL,这对于管理任务是允许的。

firebase dataconnect:execute dataconnect/seed_data.gql

6. 生成 Dart 客户端 SDK

此命令使用您的 GraphQL 定义生成专门针对您的数据库的 Dart 库。您可以在客户端应用中使用此库来执行所有数据库操作。

您可以通过向 connector.yaml 添加定义,为多个平台生成库,包括适用于 Android 的 Kotlin、适用于 iOS 的 Swift 和适用于 Web 的 JavaScript。

firebase dataconnect:sdk:generate
自动生成的 Dart SDK(摘录)
class ExampleConnector {
  ListMoviesVariablesBuilder listMovies() {
    return ListMoviesVariablesBuilder(dataConnect);
  }

  // ...
}

7. 设置 Flutter 应用

运行以下命令,将 Flutter 应用设置为使用您的 Firebase 项目。

flutterfire 命令提示时,选择您之前创建的 Firebase 项目,然后选择要定位的平台。

cd flutter_app
flutter pub add firebase_core firebase_data_connect
flutterfire configure

8. 编写示例 Flutter 客户端

flutter_app/lib/main.dart 的内容替换为这个简单的 Flutter 应用。

请注意,应用使用生成的 SDK 中的函数完成必要的数据库访问。

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app/dataconnect_generated/generated.dart';
import 'package:flutter_app/firebase_options.dart';

class MyApp extends StatelessWidget {
  late final Future<QueryResult<ListMoviesData, void>>
  _movieListFuture;

  MyApp({super.key}) {
    _movieListFuture = ExampleConnector.instance
        .listMovies()
        .execute();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FutureBuilder(
        future: _movieListFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return ListView.builder(
              scrollDirection: Axis.vertical,
              itemBuilder: (context, index) => Card(
                child: Text(
                  snapshot.data?.data.movies[index].title ?? "",
                ),
              ),
              itemCount: snapshot.data?.data.movies.length ?? 0,
            );
          }
          return const CircularProgressIndicator();
        },
      ),
    );
  }
}

Future<void> main() async {
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(MyApp());
}

9. 试用此应用

启动开发服务器,查看示例应用的实际效果。

flutter run

后续步骤

试用 Visual Studio Code 扩展程序

使用 Data Connect 进行开发时,我们强烈建议使用 Visual Studio Code 扩展程序。即使您不使用 Visual Studio Code 作为主要开发环境,该扩展程序也提供了多项功能,可让架构和操作开发更加便捷:

  • 一个 GraphQL 语言服务器,提供特定于 Data Connect 的语法检查和自动补全建议
  • 与代码位于同一行的 CodeLens 按钮,可让您从架构定义文件中读取和写入数据,并从操作定义中执行查询和突变。
  • 自动使生成的 SDK 与 GraphQL 定义保持同步。
  • 简化了本地模拟器设置。
  • 简化了向生产环境的部署。

使用 Data Connect 模拟器进行本地开发

虽然本教程介绍了如何将 Data Connect 架构和操作直接部署到生产环境,但您可能不希望在积极开发应用时更改生产数据库。相反,您应该设置 Data Connect 模拟器,并针对该模拟器(而非生产环境)开展开发工作。模拟器会设置一个本地 PGlite 实例,该实例的行为与 CloudSQL 上的实时 Postgres 实例类似。

了解如何为应用编写架构和操作

使用 Data Connect 开发应用时,设计架构和操作是您要完成的首要且最重要的开发任务之一。

  • Firebase 控制台中的 Gemini 是一款 AI 工具,可根据应用的自然语言描述生成 Data Connect 架构。借助此工具,您可以非常快速地开始使用,尤其是在您之前从未处理过关系型数据库的情况下。
  • 或者,您也可以直接使用 GraphQL 编写数据库架构、查询和变更。 首先,请参阅设计 Data Connect 架构页面,然后继续浏览后续页面,了解如何编写操作。