Flutter数据库扩展插件supabase_extensions的使用
Flutter数据库扩展插件supabase_extensions的使用
简介
supabase_extensions
是一个对 Supabase API 的扩展,提供了一些便捷的方法来简化与数据库的交互。
特性
- 使用SQL语句字符串从Supabase(使用PostgREST)获取结果。
- 尽可能简短的语法。
- 更简单的方式监听数据库中的变化。
注意: 目前仅支持Select/Insert SQL语句(仍在开发中)。
开始使用
要在您的应用程序中使用它,请导入以下包:
import 'package:supabase_extensions/base.dart';
用法示例
使用SQL查询获取数据
// 初始化 Supabase 客户端
final supabase = SupabaseClient('supabaseUrl', 'supabaseKey');
const sqlString = 'SELECT code FROM courses WHERE code > 32000 ORDER BY code LIMIT 2';
QueryResults queryResults = await supabase.sql(sqlString);
List<Map<String, dynamic>> rows = queryResults.rows; // 获取查询结果
获取用户ID
// 初始化 Supabase 客户端
final supabase = SupabaseClient('supabaseUrl', 'supabaseKey');
String? userId = supabase.uid; /// 替代 supabase.auth.currentUser?.id
检查用户是否已登录
// 初始化 Supabase 客户端
final supabase = SupabaseClient('supabaseUrl', 'supabaseKey');
bool isLoggedIn = supabase.isLogged; /// 替代 supabase.auth.currentUser?.id != null
获取用户的访问令牌
// 初始化 Supabase 客户端
final supabase = SupabaseClient('supabaseUrl', 'supabaseKey');
String? accessToken = supabase.jwt; /// 替代 supabase.auth.currentSession?.accessToken
监听数据库表的变化
// 初始化 Supabase 客户端
final supabase = SupabaseClient('supabaseUrl', 'supabaseKey');
// 监听所有事件
supabase.from('test').stream(primaryKey: ['id']).listen((event) {
print(event);
});
// 仅监听 INSERT 事件
supabase.on('table', CrudEvent.insert).listen((event) {
print(event);
});
// 更简短的语法监听 INSERT 和 DELETE 事件
supabase.onInsert('table').listen((event) {
print(event);
});
supabase.onDelete('table').listen((event) {
print(event);
});
注意: 记得在完成后移除通道并关闭流。
supabase.removeAllChannels();
supabase.closeAllStreams(); // 添加这行!
获取当前登录用户的提供商名称
// 初始化 Supabase 客户端
final supabase = SupabaseClient('supabaseUrl', 'supabaseKey');
String? providerName = supabase.auth.provider; /// 替代 supabase.auth.provider
完整示例 Demo
import 'package:supabase/supabase.dart';
import 'package:supabase_extensions/src/base.dart';
import 'package:supabase_extensions/src/query_results.dart';
import 'package:dotenv/dotenv.dart';
import 'package:supabase_extensions/src/supabase_auth_ext.dart';
void main() async {
// 初始化 Supabase 客户端
var env = DotEnv(includePlatformEnvironment: true)..load();
final String SUPABASE_URL = env['SUPABASE_URL']!;
final String SUPABASE_ANNON_KEY = env['SUPABASE_ANNON_KEY']!;
final supabase = SupabaseClient(SUPABASE_URL, SUPABASE_ANNON_KEY);
var userId = "dcde0dba-f759-4700-84a2-5534aadaaf54";
// 使用SQL查询获取数据
var results = await supabase
.sql("select * from user_constraints where user_id = '$userId'");
print(results.rows ?? []);
// 获取当前登录用户的提供商名称
final providerName = supabase.auth.provider;
// 监听数据库表的变化
supabase.from('test').stream(primaryKey: ['id']).listen((event) {
print(event);
});
supabase.on('test', CrudEvent.insert).listen((event) {
print(event);
});
supabase.onInsert('test').listen((event) {
print(event);
});
// 记得在完成后移除通道并关闭流
supabase.removeAllChannels();
supabase.closeAllStreams();
// 使用SQL查询获取数据
QueryResults data = await supabase.sql(
"select last_data from saved_schedules where user_id = '6bce5d00-5365-4d44-a33b-089ee431161b'");
print(data.rows);
await Future.delayed(Duration(seconds: 100));
}
更多关于Flutter数据库扩展插件supabase_extensions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复