在Flutter中使用Supabase
学习如何创建Supabase项目,向数据库添加示例数据,以及从Flutter应用中查询数据。
创建一个Supabase项目
前往 database.new 并创建一个新的Supabase项目。
当您的项目启动并运行后,前往 表编辑器,创建一个新表并插入一些数据。
或者,您可以在项目的 SQL编辑器 中运行以下代码片段。这将创建一个包含一些示例数据的 instruments
表。
12345678910111213-- 创建表create table instruments ( id bigint primary key generated always as identity, name text not null);-- 向表中插入一些示例数据insert into instruments (name)values ('violin'), ('viola'), ('cello');alter table instruments enable row level security;
通过添加RLS策略,使表中的数据可公开读取:
1234create policy "public can read instruments"on public.instrumentsfor select to anonusing (true);
创建Flutter应用
使用flutter create
命令创建Flutter应用。如果您已有可运行的应用,可以跳过此步骤。
Terminal
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:
Project URL
Anon key
lib/main.dart
1234567891011import 'package:supabase_flutter/supabase_flutter.dart';Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Supabase.initialize( url: 'YOUR_SUPABASE_URL', anonKey: 'YOUR_SUPABASE_ANON_KEY', ); runApp(MyApp());}
从应用查询数据
使用FutureBuilder
在首页加载时获取数据,并在ListView
中显示查询结果。
用以下代码替换默认的MyApp
和MyHomePage
类。
lib/main.dart
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp( title: 'Instruments', home: HomePage(), ); }}class HomePage extends StatefulWidget { const HomePage({super.key}); @override State<HomePage> createState() => _HomePageState();}class _HomePageState extends State<HomePage> { final _future = Supabase.instance.client .from('instruments') .select(); @override Widget build(BuildContext context) { return Scaffold( body: FutureBuilder( future: _future, builder: (context, snapshot) { if (!snapshot.hasData) { return const Center(child: CircularProgressIndicator()); } final instruments = snapshot.data!; return ListView.builder( itemCount: instruments.length, itemBuilder: ((context, index) { final instrument = instruments[index]; return ListTile( title: Text(instrument['name']), ); }), ); }, ), ); }}
启动应用
在您选择的平台上运行应用!默认情况下应用会在网页浏览器中启动。
请注意supabase_flutter
兼容网页、iOS、Android、macOS和Windows应用。
在macOS上运行应用需要额外配置来设置权限。
Terminal
1flutter run
设置深度链接
许多登录方法需要使用深度链接在认证后将用户重定向回您的应用。有关为所有平台(包括网页)设置深度链接的更多信息,请参阅 Flutter 移动端指南。
进入生产环境
Android
在生产环境中,您的 Android 应用需要明确权限才能使用用户设备上的互联网连接,这是与 Supabase API 通信所必需的。为此,请将以下行添加到 android/app/src/main/AndroidManifest.xml
文件中。
12345<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 需要此权限才能从互联网获取数据 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- ... --></manifest>