A Dart client for Supabase.
Supabase is an open source Firebase alternative. We are a service to:
- listen to database changes
- query your tables, including filtering, pagination, and deeply nested relationships (like GraphQL)
- create, update, and delete rows
- manage your users and their permissions
- interact with your database using a simple UI
- Alpha: Under heavy development
- Public Alpha: Ready for testing. But go easy on us, there will be bugs and missing functionality.
- Public Beta: Stable. No breaking changes expected in this version but possible bugs.
- Public: Production-ready
supabase-dart
mirrors the design of supabase-js
. Find the documentation here.
import 'package:supabase/supabase.dart';
main() {
final supabase = SupabaseClient('supabaseUrl', 'supabaseKey');
// Select from table `countries` ordering by `name`
final data = await supabase
.from('countries')
.select()
.order('name', ascending: true);
}
import 'package:supabase/supabase.dart';
main() {
final supabase = SupabaseClient('supabaseUrl', 'supabaseKey');
// Set up a listener to listen to changes in `countries` table
supabase.channel('my_channel').on(RealtimeListenTypes.postgresChanges, ChannelFilter(
event: '*',
schema: 'public',
table: 'countries'
), (payload, [ref]) {
// Do something when there is an update
}).subscribe();
// remember to remove the channels when you're done
supabase.removeAllChannels();
}
To receive realtime updates, you have to first enable Realtime on from your Supabase console. You can read more here on how to enable it.
import 'package:supabase/supabase.dart';
main() {
final supabase = SupabaseClient('supabaseUrl', 'supabaseKey');
// Set up a listener to listen to changes in `countries` table
final subscription = supabase
.from('countries')
.stream(primaryKey: ['id']) // Pass list of primary key column names
.order('name')
.limit(30)
.listen(_handleCountriesStream);
// remember to remove subscription when you're done
subscription.cancel();
}
import 'package:supabase/supabase.dart';
main() {
final supabase = SupabaseClient('supabaseUrl', 'supabaseKey');
// Sign up user with email and password
final response = await supabase
.auth
.signUp(email: 'sample@email.com', password: 'password');
}
import 'package:supabase/supabase.dart';
main() {
final supabase = SupabaseClient('supabaseUrl', 'supabaseKey');
// Create file `example.txt` and upload it in `public` bucket
final file = File('example.txt');
file.writeAsStringSync('File content');
final storageResponse = await supabase
.storage
.from('public')
.upload('example.txt', file);
}
Initialize a SupabaseClient
by passing your Supabase URL and Supabase KEY. The keys can be found in your supabase project in /setting/API
.
final client = SupabaseClient('supabaseUrl', 'supabaseKey');
The client
has a auth
attribute (of type GoTrueClient
) that you can use to authenticate your users using supabase.
Use the signUp
method to create a new user account.
// Sign up user with email and password
final response = await supabase.auth.signUp(email: email, password: password);
final Session? session = response.session;
final User? user = response.user;
There are a few ways to sign in a user into your app.
Use the signInWithPassword
method to sign in a user with their email or phone with password.
// Sign in user with email and password
final response = await client.auth.signInWithPassword(email: email, password: password);
final Session? session = response.session;
final User? user = response.user;
Use the signInWithOtp
method to sign in a user using magic link with email or one time password using phone number.
// Sign in user with email and password
await client.auth.signInWithOtp(email: email);
Use the signOut
method to sign out a user.
// Sign out user
await client.auth.signOut();
Check out the Official Documentation to learn all the other available methods.
- Flutter Supabase Authentication - Blog
- Fork the repo on GitHub
- Clone the project to your own machine
- Commit changes to your own branch
- Push your work back up to your fork
- Submit a Pull request so that we can review your changes and merge
This repo is licenced under MIT.