概述
CloudBase Flutter SDK 让您可以在 Flutter 应用中使用云开发的能力,包括身份认证、文档型数据库、数据模型、MySQL 数据库、云函数、云托管、APIs、云存储等功能。当前版本为 1.2.2,支持 Android、iOS、Web、macOS、Linux、Windows。使用方式请参考 CloudBase Flutter SDK,也可以参考示例代码。
提示
CloudBase Flutter SDK 已与 HTTP API 全面对齐
安装
在 pubspec.yaml 中添加依赖:
dependencies:
cloudbase_flutter: ^1.2.2
然后执行:
flutter pub get
SDK 按照功能用途分为以下类别:
- 认证登录:用户注册和登录相关的 API 方法,支持多种登录方式。
- 会话管理:管理用户会话状态和令牌的 API 方法。
- 用户管理:获取、更新和管理用户信息的 API 方法。
- 身份源管理:管理第三方身份源绑定和解绑的 API 方法。
- 密码管理:密码重置和修改相关的 API 方法。
- 验证管理:验证码发送、验证和重发、图形验证码创建、验证和管理相关的 API 方法。
- 文档型数据库:NoSQL 文档型数据库的集合、文档、查询、更新、删除、聚合、事务等操作。
- 数据模型:数据模型 CRUD 操作。
- 数据源查询:查询数据源聚合列表、详情、Schema 和表名。
- MySQL 数据库:MySQL RESTful 数据库操作。
- 云函数:调用云函数和函数型云托管。
- 云托管:调用云托管容器服务。
- APIs:调用 APIs 接口。
- 云存储:文件上传、下载、删除、复制、移动等操作。
基础使用示例
- 初始化配置
- 登录状态检查
- 用户注册流程
- 密码登录
- 退出登录
- 监听状态变化
- 调用云函数
accessKey 可前往 云开发平台/API Key 配置 中生成
import 'package:cloudbase_flutter/cloudbase_flutter.dart';
// 初始化(异步)
final app = await CloudBase.init(
env: 'your-env-id', // 替换为您的环境 ID(必填)
region: 'ap-shanghai', // 地域,默认 ap-shanghai,可选 ap-guangzhou、ap-singapore
lang: 'zh-CN', // 语言,默认 zh-CN,可选 en-US
accessKey: 'your-key', // 填入生成的 Publishable Key
authConfig: AuthConfig(
detectSessionInUrl: true, // 可选:自动检测 URL 中的 OAuth 参数
),
);
final auth = app.auth;
CloudBase.init 参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
env | String | 是 | 云开发环境 ID |
region | String | 否 | 地域,默认 ap-shanghai,可选 ap-guangzhou、ap-singapore |
lang | String | 否 | 语言,默认 zh-CN,可选 en-US |
accessKey | String | 否 | Publishable Key,用于匿名访问公开资源 |
authConfig | AuthConfig | 否 | 认证配置,如 detectSessionInUrl |
// 检查登录状态
Future<bool> checkAuthStatus() async {
final result = await auth.getSession();
if (result.error != null) {
print('检查登录状态失败: ${result.error!.message}');
return false;
}
if (result.data?.session != null) {
print('用户已登录: ${result.data!.user?.id}');
return true;
} else {
print('用户未登录');
return false;
}
}
// 用户注册示例(两步验证流程)
Future<void> registerUser(String email, String password) async {
// 第一步:发送验证码
final signUpResult = await auth.signUp(SignUpReq(
email: email,
password: password,
));
if (signUpResult.error != null) {
print('发送验证码失败: ${signUpResult.error!.message}');
return;
}
print('验证码已发送,等待用户输入...');
// 第二步:验证验证码并完成注册
final verifyResult = await signUpResult.data!.verifyOtp!(
VerifyOtpParams(token: '用户输入的验证码'),
);
if (verifyResult.error != null) {
print('注册失败: ${verifyResult.error!.message}');
} else {
print('注册成功: ${verifyResult.data?.user?.id}');
}
}
// 密码登录示例
Future<void> loginWithPassword(String email, String password) async {
final result = await auth.signInWithPassword(
SignInWithPasswordReq(email: email, password: password),
);
if (result.error != null) {
print('登录失败: ${result.error!.message}');
} else {
print('登录成功: ${result.data?.user?.id}');
print('Access Token: ${result.data?.session?.accessToken}');
}
}
// 退出登录示例
Future<void> logout() async {
await auth.signOut();
print('已退出登录');
}
// 监听认证状态变化
final result = auth.onAuthStateChange((event, session, info) {
switch (event) {
case AuthStateChangeEvent.signedIn:
print('用户已登录');
break;
case AuthStateChangeEvent.signedOut:
print('用户已退出');
break;
case AuthStateChangeEvent.tokenRefreshed:
print('Token 已刷新');
break;
case AuthStateChangeEvent.userUpdated:
print('用户信息已更新');
break;
default:
break;
}
});
// 取消订阅
result.data?.subscription.unsubscribe();
// 调用云函数示例
final result = await app.callFunction(
name: 'myFunction',
data: {'key': 'value'},
);
if (result.isSuccess) {
print('执行结果: ${result.result}');
} else {
print('执行失败: ${result.message}');
}
认证登录
signUp
Future<SignUpRes> auth.signUp(SignUpReq params)
注册新用户账户,采用智能注册并登录流程。
- 创建一个新的用户账户
- 采用智能注册并登录流程:发送验证码 → 等待用户输入 → 智能判断用户存在性 → 自动登录或注册并登录
- 如果用户已存在则直接 登录,如果用户不存在则注册新用户并自动登录
参数
params
SignUpReq
返回
Future
SignUpRes
示例
- 邮箱注册
- 手机号注册
- 错误处理
final result = await auth.signUp(SignUpReq(
email: 'user@example.com',
password: 'securePassword123',
nickname: '新用户',
));
if (result.error != null) {
print('注册失败: ${result.error!.message}');
return;
}
// 验证码验证
final verifyResult = await result.data!.verifyOtp!(
VerifyOtpParams(token: '123456'),
);
if (verifyResult.isSuccess) {
print('注册成功: ${verifyResult.data?.user?.id}');
}
final result = await auth.signUp(SignUpReq(
phone: '13800138000',
password: 'securePassword123',
));
if (result.error != null) {
print('发送验证码失败: ${result.error!.message}');
return;
}
final verifyResult = await result.data!.verifyOtp!(
VerifyOtpParams(token: '123456'),
);
if (verifyResult.isSuccess) {
print('注册成功: ${verifyResult.data?.user?.phone}');
}
final result = await auth.signUp(SignUpReq(
email: 'user@example.com',
password: 'password123',
));
if (result.error != null) {
final code = result.error!.code;
switch (code) {
case 'already_exists':
print('邮箱已被注册');
break;
case 'password_too_weak':
print('密码强度不足');
break;
case 'invalid_email':
print('邮箱格式错误');
break;
default:
print('注册失败: ${result.error!.message}');
}
}
signInAnonymously
Future<SignInRes> auth.signInAnonymously({String? providerToken})
匿名登录,创建一个临时匿名用户账户。
- 创建一个临时匿名用户账户
- 无需提供任何身份验证信息
- 适合需要临时访问权限的场景
参数
providerToken
String?
第三方平台令牌,用于关联第三方平台身份
返回
Future
SignInRes
示例
- 匿名登录
- 匿名用户转正流程
final result = await auth.signInAnonymously();
if (result.isSuccess) {
print('匿名登录成功');
print('用户ID: ${result.data?.user?.id}');
print('是否匿名: ${result.data?.user?.isAnonymous}');
} else {
print('匿名登录失败: ${result.error!.message}');
}
// 第一步:匿名登录
final anonymousResult = await auth.signInAnonymously();
if (anonymousResult.error != null) {
print('匿名登录失败: ${anonymousResult.error!.message}');
return;
}
print('匿名登录成功,准备升级为正式用户');
// 第二步:绑定邮箱(注册时传入 anonymousToken)
final upgradeResult = await auth.signUp(SignUpReq(
email: 'user@example.com',
password: 'securePassword123',
anonymousToken: anonymousResult.data?.session?.accessToken,
));
if (upgradeResult.error != null) {
print('升级失败: ${upgradeResult.error!.message}');
return;
}
// 第三步:验证验证码
final verifyResult = await upgradeResult.data!.verifyOtp!(
VerifyOtpParams(token: '123456'),
);
if (verifyResult.isSuccess) {
print('匿名用户转正成功');
}
signInWithPassword
Future<SignInRes> auth.signInWithPassword(SignInWithPasswordReq params)
使用密码登录。支持通过用户名、邮箱或手机号进行登录。
参数
params
SignInWithPasswordReq
返回
Future
SignInRes