在 Flutter 中使用 Supabase
了解如何创建 Supabase 项目,向数据库添加示例数据,并在 Flutter 应用中查询这些数据。
1# First, get your access token from https://supabase.org.cn/dashboard/account/tokens2export SUPABASE_ACCESS_TOKEN="your-access-token"34# List your organizations to get the organization ID5curl -H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" \6 https://api.supabase.com/v1/organizations78# Create a new project (replace <org-id> with your organization ID)9curl -X POST https://api.supabase.com/v1/projects \10 -H "Authorization: Bearer $SUPABASE_ACCESS_TOKEN" \11 -H "Content-Type: application/json" \12 -d '{13 "organization_id": "<org-id>",14 "name": "My Project",15 "region": "us-east-1",16 "db_pass": "<your-secure-password>"17 }'1-- Create the table2create table instruments (3 id bigint primary key generated always as identity,4 name text not null5);6-- Insert some sample data into the table7insert into instruments (name)8values9 ('violin'),10 ('viola'),11 ('cello');1213alter table instruments enable row level security;通过添加 RLS 策略使表格中的数据可公开读取
1create policy "public can read instruments"2on public.instruments3for select to anon4using (true);创建 Flutter 应用
使用 flutter create 命令创建一个 Flutter 应用。如果您已经有一个现成的应用,可以跳过此步骤。
终端
1flutter create my_app安装 Supabase 客户端库
最快的入门方式是使用 supabase_flutter 客户端库,它为在 Flutter 应用中操作 Supabase 提供了便捷的接口。
打开 Flutter 应用中的 pubspec.yaml 文件,并将 supabase_flutter 添加为依赖项。
pubspec.yaml
1supabase_flutter: ^2.0.0初始化 Supabase 客户端
打开 lib/main.dart 并编辑 main 函数,使用您的项目 URL 和公共 API (anon) 密钥来初始化 Supabase。
项目 URL
可发布密钥
匿名密钥
lib/main.dart
1import 'package:supabase_flutter/supabase_flutter.dart';23Future<void> main() async {4 WidgetsFlutterBinding.ensureInitialized();56 await Supabase.initialize(7 url: 'YOUR_SUPABASE_URL',8 anonKey: 'YOUR_SUPABASE_PUBLISHABLE_KEY',9 );10 runApp(MyApp());11}您也可以通过项目中的 Connect(连接)对话框获取项目 URL 和密钥。
API 密钥的更改
Supabase 正在更改密钥的工作方式,以提高项目安全性和开发人员体验。您可以 阅读完整的公告,但在过渡期间,您可以使用当前的 anon 和 service_role 密钥以及新的可发布密钥,格式为 sb_publishable_xxx,它将取代旧的密钥。
在大多数情况下,您可以从项目的 Connect 对话框中获取正确的密钥,但如果您需要特定的密钥,可以在项目设置页面的 API Keys 部分找到所有密钥。
- 对于旧版密钥,从 旧版 API 密钥 选项卡中复制
anon密钥用于客户端操作,并复制service_role密钥用于服务器端操作。 - 对于新密钥,打开 API 密钥 选项卡,如果您还没有可发布密钥,请单击 创建新的 API 密钥,并复制 可发布密钥 部分中的值。
阅读 API 密钥文档 以全面了解所有密钥类型及其用途。
从应用查询数据
使用 FutureBuilder 在主页加载时获取数据,并在 ListView 中显示查询结果。
将默认的 MyApp 和 MyHomePage 类替换为以下代码。
lib/main.dart
1class MyApp extends StatelessWidget {2 const MyApp({super.key});34 @override5 Widget build(BuildContext context) {6 return const MaterialApp(7 title: 'Instruments',8 home: HomePage(),9 );10 }11}1213class HomePage extends StatefulWidget {14 const HomePage({super.key});1516 @override17 State<HomePage> createState() => _HomePageState();18}1920class _HomePageState extends State<HomePage> {21 final _future = Supabase.instance.client22 .from('instruments')23 .select();2425 @override26 Widget build(BuildContext context) {27 return Scaffold(28 body: FutureBuilder(29 future: _future,30 builder: (context, snapshot) {31 if (!snapshot.hasData) {32 return const Center(child: CircularProgressIndicator());33 }34 final instruments = snapshot.data!;35 return ListView.builder(36 itemCount: instruments.length,37 itemBuilder: ((context, index) {38 final instrument = instruments[index];39 return ListTile(40 title: Text(instrument['name']),41 );42 }),43 );44 },45 ),46 );47 }48}启动应用
在您选择的平台上运行应用!默认情况下,应用将在 Web 浏览器中启动。
请注意,supabase_flutter 兼容 Web、iOS、Android、macOS 和 Windows 应用。在 macOS 上运行应用需要额外的配置来 设置权限 (entitlements)。
终端
1flutter run设置深层链接 (Deep links)#
许多登录方法需要深层链接,以便在身份验证后将用户重定向回您的应用。有关为所有平台(包括 Web)设置深层链接的更多信息,请参阅 Flutter 移动端指南。
部署到生产环境#
Android#
在生产环境中,您的 Android 应用需要获得使用用户设备互联网连接的显式权限,这是与 Supabase API 通信所必需的。为此,请将以下行添加到 android/app/src/main/AndroidManifest.xml 文件中。
1<manifest xmlns:android="http://schemas.android.com/apk/res/android">2 <!-- Required to fetch data from the internet. -->3 <uses-permission android:name="android.permission.INTERNET" />4 <!-- ... -->5</manifest>