Flutter数据库交互插件supabase_repository的使用
Flutter数据库交互插件supabase_repository
的使用
使用supabase_repository
插件可以方便地将Supabase集成到Dart项目中。以下是详细的安装和使用说明。
如何安装
在你的pubspec.yaml
文件中添加以下依赖:
dart pub add supabase_repository
如何使用
首先,确保你已经获得了Supabase的URL和API密钥。然后,你可以按照以下步骤进行配置:
import 'package:database_repository/database_repository.dart';
import 'package:supabase_repository/supabase_repository.dart';
void main() {
// 替换为你的Supabase安装URL
final String mySupabaseUrl = "https://your-supabase-url.supabase.co";
// 替换为你的Supabase API密钥
final String mySupabaseKey = "your-supabase-api-key";
// 创建Supabase数据库适配器实例
final DatabaseAdapter myDatabaseAdapter = SupabaseDatabaseAdapter(
supabaseInstallationUrl: mySupabaseUrl,
supabaseApiKey: mySupabaseKey
);
// 注册你想要使用的数据库适配器
DatabaseAdapterRegistry.register(myDatabaseAdapter);
// 创建数据库仓库实例
final repository = DatabaseRepository.fromRegistry(serializer: mySerializer, name: 'supabase');
// 现在可以使用create()等方法
// 示例:创建一条记录
repository.create('users', {'name': 'John Doe', 'email': 'john.doe@example.com'});
}
完整示例Demo
以下是一个完整的示例代码,展示了如何使用supabase_repository
插件与Supabase进行数据库交互:
import 'package:database_repository/database_repository.dart';
import 'package:supabase_repository/supabase_repository.dart';
void main() async {
// 替换为你的Supabase安装URL
final String mySupabaseUrl = "https://your-supabase-url.supabase.co";
// 替换为你的Supabase API密钥
final String mySupabaseKey = "your-supabase-api-key";
// 创建Supabase数据库适配器实例
final DatabaseAdapter myDatabaseAdapter = SupabaseDatabaseAdapter(
supabaseInstallationUrl: mySupabaseUrl,
supabaseApiKey: mySupabaseKey
);
// 注册你想要使用的数据库适配器
DatabaseAdapterRegistry.register(myDatabaseAdapter);
// 创建数据库仓库实例
final repository = DatabaseRepository.fromRegistry(serializer: mySerializer, name: 'supabase');
// 示例:创建一条记录
await repository.create('users', {'name': 'John Doe', 'email': 'john.doe@example.com'});
// 示例:读取一条记录
final record = await repository.read('users', id: 'some-record-id');
print(record);
// 示例:更新一条记录
await repository.update('users', id: 'some-record-id', data: {'email': 'new-email@example.com'});
// 示例:删除一条记录
await repository.delete('users', id: 'some-record-id');
}
更多关于Flutter数据库交互插件supabase_repository的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库交互插件supabase_repository的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
supabase_repository
是一个用于简化 Flutter 应用与 Supabase 数据库交互的插件。它提供了一种方便的方式来处理 Supabase 的认证、数据库操作和实时订阅等功能。以下是使用 supabase_repository
插件的基本步骤和示例。
1. 安装依赖
首先,在 pubspec.yaml
文件中添加 supabase_repository
依赖:
dependencies:
flutter:
sdk: flutter
supabase_flutter: ^1.0.0
supabase_repository: ^0.1.0
然后运行 flutter pub get
来安装依赖。
2. 初始化 Supabase
在使用 supabase_repository
之前,你需要初始化 Supabase 客户端。通常在 main.dart
中完成:
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:supabase_repository/supabase_repository.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Supabase.initialize(
url: 'https://your-supabase-url.supabase.co',
anonKey: 'your-anon-key',
);
runApp(MyApp());
}
3. 创建 Repository
supabase_repository
提供了一个 SupabaseRepository
类,你可以继承它来创建自定义的 Repository 类,用于处理特定的数据库操作。
import 'package:supabase_repository/supabase_repository.dart';
class UserRepository extends SupabaseRepository {
UserRepository() : super('users'); // 'users' 是你要操作的 Supabase 表名
// 添加自定义方法
Future<List<Map<String, dynamic>>> getActiveUsers() async {
return await supabase
.from(tableName)
.select()
.eq('is_active', true)
.execute()
.then((response) => response.data);
}
}
4. 使用 Repository
在你的应用中使用 UserRepository
来进行数据库操作:
import 'package:flutter/material.dart';
import 'user_repository.dart';
class UserListScreen extends StatefulWidget {
@override
_UserListScreenState createState() => _UserListScreenState();
}
class _UserListScreenState extends State<UserListScreen> {
final UserRepository _userRepository = UserRepository();
List<Map<String, dynamic>> _users = [];
@override
void initState() {
super.initState();
_loadUsers();
}
Future<void> _loadUsers() async {
final users = await _userRepository.getActiveUsers();
setState(() {
_users = users;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Active Users'),
),
body: ListView.builder(
itemCount: _users.length,
itemBuilder: (context, index) {
final user = _users[index];
return ListTile(
title: Text(user['name']),
subtitle: Text(user['email']),
);
},
),
);
}
}
5. 处理实时更新
supabase_repository
还支持实时订阅功能。你可以使用 RealtimeSubscription
来监听数据库的变化:
import 'package:supabase_repository/supabase_repository.dart';
class UserRepository extends SupabaseRepository {
UserRepository() : super('users');
Stream<List<Map<String, dynamic>>> getActiveUsersStream() {
return supabase
.from(tableName)
.stream(['id']) // 监听 'id' 列的变化
.eq('is_active', true)
.map((snapshot) => snapshot.map((data) => data as Map<String, dynamic>).toList());
}
}
然后在你的 UI 中使用 StreamBuilder
来显示实时更新的数据:
import 'package:flutter/material.dart';
import 'user_repository.dart';
class UserListScreen extends StatelessWidget {
final UserRepository _userRepository = UserRepository();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Active Users'),
),
body: StreamBuilder<List<Map<String, dynamic>>>(
stream: _userRepository.getActiveUsersStream(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else if (!snapshot.hasData || snapshot.data!.isEmpty) {
return Center(child: Text('No active users found.'));
} else {
final users = snapshot.data!;
return ListView.builder(
itemCount: users.length,
itemBuilder: (context, index) {
final user = users[index];
return ListTile(
title: Text(user['name']),
subtitle: Text(user['email']),
);
},
);
}
},
),
);
}
}
6. 处理认证
supabase_repository
也提供了对 Supabase 认证的支持。你可以使用 SupabaseAuthRepository
来处理用户认证:
import 'package:supabase_repository/supabase_repository.dart';
class AuthService {
final SupabaseAuthRepository _authRepository = SupabaseAuthRepository();
Future<void> signIn(String email, String password) async {
await _authRepository.signIn(email: email, password: password);
}
Future<void> signUp(String email, String password) async {
await _authRepository.signUp(email: email, password: password);
}
Future<void> signOut() async {
await _authRepository.signOut();
}
User? getCurrentUser() {
return _authRepository.currentUser;
}
}
7. 集成认证与数据库操作
你可以将认证服务和数据库操作结合起来,确保只有认证用户才能访问某些数据:
class UserRepository extends SupabaseRepository {
UserRepository() : super('users');
Future<List<Map<String, dynamic>>> getActiveUsers() async {
final user = supabase.auth.currentUser;
if (user == null) {
throw Exception('User not authenticated');
}
return await supabase
.from(tableName)
.select()
.eq('is_active', true)
.execute()
.then((response) => response.data);
}
}