Merge branch 'master' into blog-redirects

This commit is contained in:
Jonathan Summers-Muir committed 2022-08-07 19:51:05 -03:00
commit d689fef095
302 files changed
+52403 -2685

No files matched your search

+4 -1
View File
@@ -15,7 +15,7 @@
- [Installing packages](#installing-packages)
- [Development](#development)
- [Common Tasks](#common-tasks)
- [Adding redirects](#adding-redirects)
- [Adding Redirects](#adding-redirects)
- [Finally](#finally)
- [Community Channels](#community-channels)
@@ -181,6 +181,8 @@ Then edit and visit any of the following sites:
- `/apps/www`: http://localhost:3000
- The main website.
- `/apps/reference`: http://localhost:3010
- Reference Documentation.
- `/apps/temp-docs`: http://localhost:3001
- We are migrating the docs to a Next.js application.
- `/apps/temp-community-forum`: http://localhost:3002
@@ -194,6 +196,7 @@ The monorepo has a set of shared components under `/packages`:
- `/packages/common`: Common React code, shared between all sites.
- `/packages/config`: All shared config
- `/packages/spec`: Generates documentation using spec files.
- `/packages/tsconfig`: Shared Typescript settings
### Installing packages
+1 -1
View File
@@ -1,7 +1,7 @@
---
slug: /
sidebar_position: 1
sidebar_label: Introduction
sidebar_label: Supabase API
---
# Supabase API
+23 -37
View File
@@ -5,7 +5,6 @@ title: Usage
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
An isomorphic Javascript library for GoTrue.
@@ -14,50 +13,37 @@ An isomorphic Javascript library for GoTrue.
## New user signup
```js
const { user, session, error } = await gotrue.signUp({
email: 'example@email.com',
password: 'example-password',
})
### Lists all organizations
```
/v1/organizations
```
### Attributes
### Creates an organization
- param-signup-options
- param-options
### Notes
- By default, the user will need to verify their email address before logging in. If you would like to change this, you can disable "Email Confirmations" by going to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If "Email Confirmations" is turned on, a `user` is returned but `session` will be null
- If "Email Confirmations" is turned off, both a `user` and a `session` will be returned
- When the user confirms their email address, they will be redirected to localhost:3000 by default. To change this, you can go to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If signUp() is called for an existing confirmed user:
- If "Enable email confirmations" is enabled on the "Authentication" -> "Settings" page, an obfuscated / fake user object will be returned.
- If "Enable email confirmations" is disabled, an error with a message "User already registered" will be returned.
- To check if a user already exists, refer to getUser().
### Examples
#### Sign up with email
```js
const { user, session, error } = await supabase.auth.signUp({
email: 'example@email.com',
password: 'example-password',
})
```
/v1/organizations
```
### Gets all projects that belong to the authenticated user
```
/v1/projects
```
### Creates a project
```
/v1/projects
```
+1 -1
View File
@@ -2,7 +2,7 @@
id: intro
slug: /
sidebar_position: 1
sidebar_label: Introduction
sidebar_label: Supabase CLI
---
# Supabase CLI
+19 -7
View File
@@ -12,7 +12,10 @@ Supabase CLI.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Manage your Edge Functions
<br /><br />
## Manage your Edge Functions {#supabase-functions}
Manage your Edge Functions.
@@ -28,11 +31,11 @@ supabase functions [command] [flags]
### Available Commands
- supabase-functions-new
- <a href="#supabase-functions-new">supabase-functions-new</a>
- supabase-functions-deploy
- <a href="#supabase-functions-deploy">supabase-functions-deploy</a>
- supabase-functions-delete
- <a href="#supabase-functions-delete">supabase-functions-delete</a>
@@ -47,7 +50,10 @@ supabase functions [command] [flags]
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Create an Edge Functions
<br /><br />
## Create an Edge Functions {#supabase-functions-new}
Create an Edge Functions.
@@ -72,7 +78,10 @@ supabase functions new <Function name>
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Deploy an Edge Functions
<br /><br />
## Deploy an Edge Functions {#supabase-functions-deploy}
Deploy an Edge Functions.
@@ -97,7 +106,10 @@ supabase functions deploy <Function name>
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Delete an Edge Functions
<br /><br />
## Delete an Edge Functions {#supabase-functions-delete}
Delete an Edge Functions.
@@ -1,359 +0,0 @@
---
id: config
title: Configuration
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
A `config.toml` file is generated after running `supabase init`.
This file is located in the `supabase` folder under `supabase/config.toml`.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## General
### `project_id`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `project_id` | `true` | `` |
A string used to distinguish different Supabase projects on the same host. Defaults to the working directory name when running `supabase init`.
See also:
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## API
### `api.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `api.port` | `true` | `54321` |
Port to use for the API URL.
See also:
- [PostgREST configuration](https://postgrest.org/en/stable/configuration.html)
### `api.extra_search_path`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `api.extra_search_path` | `true` | `["extensions"]` |
Extra schemas to add to the `search_path` of every request.
See also:
- [PostgREST configuration](https://postgrest.org/en/stable/configuration.html)
### `api.max_rows`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `api.max_rows` | `true` | `1000` |
The maximum number of rows returned from a view, table, or stored procedure. Limits payload size for accidental or malicious requests.
See also:
- [PostgREST configuration](https://postgrest.org/en/stable/configuration.html)
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Database
### `db.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `db.port` | `true` | `54322` |
Port to use for the local database URL.
See also:
- [PostgreSQL configuration](https://postgrest.org/en/stable/configuration.html)
### `db.major_version`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `db.major_version` | `true` | `14` |
The database major version to use. This has to be the same as your remote database's. Run `SHOW server_version;` on the remote database to check.
See also:
- [PostgreSQL configuration](https://postgrest.org/en/stable/configuration.html)
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Dashboard
### `studio.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `studio.port` | `true` | `54323` |
Port to use for Supabase Studio.
See also:
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Local Development
### `inbucket.port`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `inbucket.port` | `true` | `54324` |
Port to use for the email testing server web interface.
Emails sent with the local dev setup are not actually sent - rather, they are monitored, and you can view the emails that would have been sent from the web interface.
See also:
- [Inbucket documentation](https://www.inbucket.org)
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY -->
## Auth
### `auth.site_url`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.site_url` | `true` | `"http://localhost:3000"` |
The base URL of your website. Used as an allow-list for redirects and for constructing URLs used in emails.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.additional_redirect_urls`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.additional_redirect_urls` | `true` | `["https://localhost:3000"]` |
A list of _exact_ URLs that auth providers are permitted to redirect to post authentication.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.jwt_expiry`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.jwt_expiry` | `true` | `3600` |
How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one week).
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.enable_signup`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.enable_signup` | `true` | `true` |
Allow/disallow new user signups to your project.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.email.enable_signup`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.email.enable_signup` | `true` | `true` |
Allow/disallow new user signups via email to your project.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.email.double_confirm_changes`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.email.double_confirm_changes` | `true` | `true` |
If enabled, a user will be required to confirm any email change on both the old, and new email addresses. If disabled, only the new email is required to confirm.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.email.enable_confirmations`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.email.enable_confirmations` | `true` | `true` |
If enabled, users need to confirm their email address before signing in.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.external.<provider>.enabled`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.external.<provider>.enabled` | `true` | `true` |
Use an external OAuth provider. The full list of providers are:
- `apple`
- `azure`
- `bitbucket`
- `discord`
- `facebook`
- `github`
- `gitlab`
- `google`
- `twitch`
- `twitter`
- `slack`
- `spotify`
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.external.<provider>.client_id`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.external.<provider>.client_id` | `true` | `""` |
Client ID for the external OAuth provider.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
### `auth.external.<provider>.secret`
| Parameter | Required | Default |
| :-------- | :------- | :------------------------- |
| `auth.external.<provider>.secret` | `true` | `""` |
Client secret for the external OAuth provider.
See also:
- [Auth Server configuration](https://supabase.com/docs/reference/tools/reference-auth)
@@ -1,9 +0,0 @@
---
id: intro
slug: /
sidebar_position: 1
---
# Supabase CLI
Manage your Supabase projects.
@@ -1,120 +0,0 @@
---
id: usage
title: Usage
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
Supabase CLI.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Manage your Edge Functions
Manage your Edge Functions.
### Usage
```sh
supabase functions [command] [flags]
```
### Available Commands
- supabase-functions-new
- supabase-functions-deploy
- supabase-functions-delete
### Options
```
-h, --help help for functions
```
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Create an Edge Functions
Create an Edge Functions.
### Usage
```sh
supabase functions new <Function name>
```
### Options
```
-h, --help help for functions
```
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Deploy an Edge Functions
Deploy an Edge Functions.
### Usage
```sh
supabase functions deploy <Function name>
````
### Options
```
-h, --help help for functions
```
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Delete an Edge Functions
Delete an Edge Functions.
### Usage
```sh
supabase functions delete <Function name>
```
### Options
```
-h, --help help for functions
```
@@ -1,3 +0,0 @@
{
"cliSidebar": ["intro", "usage", "config", "release-notes"]
}
+1 -1
View File
@@ -1 +1 @@
["0.0.1"]
[]
+2 -2
View File
@@ -1,9 +1,9 @@
---
slug: /
sidebar_position: 1
sidebar_label: Introduction
sidebar_label: Auth Server
---
# GoTrue - Supabase Auth
# Supabase Auth Server
Some docs
@@ -1,8 +0,0 @@
---
slug: /
sidebar_position: 1
---
# GoTrue - Supabase Auth
Some docs
@@ -1,8 +0,0 @@
---
slug: /
sidebar_position: 1
---
# GoTrue - Supabase Auth
Some docs
@@ -1,7 +0,0 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
@@ -1,7 +0,0 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
@@ -1,3 +0,0 @@
{
"goTrueSidebar": ["intro", "config", "release-notes"]
}
+1 -1
View File
@@ -1 +1 @@
["0.0.1"]
[]
+9
View File
@@ -0,0 +1,9 @@
---
slug: /
sidebar_position: 1
sidebar_label: Storage Server
---
# Supabase Storage Server
Some docs
+637
View File
@@ -0,0 +1,637 @@
---
id: usage
title: Usage
toc_max_heading_level: 2
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
API documentation for Supabase Storage
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Create a bucket {#create-a-bucket}
```
/bucket/
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Gets all buckets {#gets-all-buckets}
```
/bucket/
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Empty a bucket {#empty-a-bucket}
```
/bucket/{bucketId}/empty
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Get details of a bucket {#get-details-of-a-bucket}
```
/bucket/{bucketId}
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Update properties of a bucket {#update-properties-of-a-bucket}
```
/bucket/{bucketId}
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Delete a bucket {#delete-a-bucket}
```
/bucket/{bucketId}
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Delete an object {#delete-an-object}
```
/object/{bucketName}/{wildcard}
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Deprecated (use GET /object/authenticated/{bucketName} instead): Retrieve an object {#deprecated-use-get-objectauthenticatedbucketname-instead-retrieve-an-object}
```
/object/{bucketName}/{wildcard}
```
### Responses
<Tabs>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Update the object at an existing key {#update-the-object-at-an-existing-key}
```
/object/{bucketName}/{wildcard}
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Upload a new object {#upload-a-new-object}
```
/object/{bucketName}/{wildcard}
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Delete multiple objects {#delete-multiple-objects}
```
/object/{bucketName}
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Retrieve an object {#retrieve-an-object}
```
/object/authenticated/{bucketName}/{wildcard}
```
### Responses
<Tabs>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Generate a presigned url to retrieve an object {#generate-a-presigned-url-to-retrieve-an-object}
```
/object/sign/{bucketName}/{wildcard}
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Retrieve an object via a presigned URL {#retrieve-an-object-via-a-presigned-url}
```
/object/sign/{bucketName}/{wildcard}
```
### Responses
<Tabs>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Generate presigned urls to retrieve objects {#generate-presigned-urls-to-retrieve-objects}
```
/object/sign/{bucketName}
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Moves an object {#moves-an-object}
```
/object/move
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Search for objects under a prefix {#search-for-objects-under-a-prefix}
```
/object/list/{bucketName}
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Copies an object {#copies-an-object}
```
/object/copy
```
### Responses
<Tabs>
<TabItem value="200">
```
200
```
</TabItem>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
## Retrieve an object from a public bucket {#retrieve-an-object-from-a-public-bucket}
```
/object/public/{bucketName}/{wildcard}
```
### Responses
<Tabs>
<TabItem value="400">
```
400
```
</TabItem>
</Tabs>
<br />
Whitespace-only changes.
Whitespace-only changes.
+1
View File
@@ -0,0 +1 @@
[]
@@ -0,0 +1,72 @@
---
id: auth-onauthstatechange
title: "auth.onAuthStateChange()"
slug: auth-onauthstatechange
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Receive a notification every time an auth event happens.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final subscription = supabase.auth.onAuthStateChange((event, session) {
print(session?.user?.id);
// handle auth state change
});
```
</TabItem>
</Tabs>
## Examples
### Listen to auth changes
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final subscription = supabase.auth.onAuthStateChange((event, session) {
print(session?.user?.id);
// handle auth state change
});
```
</TabItem>
</Tabs>
@@ -0,0 +1,66 @@
---
id: auth-session
title: "auth.session()"
slug: auth-session
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Returns the session data, if there is an active session.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final session = supabase.auth.session();
```
</TabItem>
</Tabs>
## Examples
### Get the session data
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final session = supabase.auth.session();
```
</TabItem>
</Tabs>
@@ -0,0 +1,124 @@
---
id: auth-signin
title: "auth.signIn()"
slug: auth-signin
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Log in an existing user, or login via a third-party provider.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.signIn(email: 'example@email.com', password: 'example-password');
final user = res.data?.user;
final error = res.error;
```
</TabItem>
</Tabs>
## Notes
- A user can sign up via email, phone number.
- If you provide `email` without a `password`, the user will be sent a magic link.
- The magic link's destination URL is determined by the SITE_URL config variable. To change this, you can go to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- Similarly, if you provide `phone` without a `password`, the user will be sent a one time password.
- If you are looking to sign users in with OAuth in Flutter apps, go to [`signInWithProvider()`](/docs/reference/dart/auth-signinwithprovider).
## Examples
### Sign in with email.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.signIn(email: 'example@email.com', password: 'example-password');
final user = res.data?.user;
final error = res.error;
```
</TabItem>
</Tabs>
### Sign in with magic link.
If email is provided, but no password is provided, the user will be sent a "magic link" to their email address, which they can click to open your application with a valid session. By default, a given user can only request a Magic Link once every 60 seconds.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.signIn(email: 'example@email.com');
final error = res.error;
```
</TabItem>
</Tabs>
### Get OAuth sign in URL.
Passing provider parameter to `signIn()` will return a URL to sign your user in via OAuth.
If you are looking to sign in a user via OAuth on Flutter app, go to [`signInWithProvider()`](/docs/reference/dart/auth-signinwithprovider).
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.signIn(provider: Provider.github);
final url = res.data?.url;
final error = res.error;
```
</TabItem>
</Tabs>
@@ -0,0 +1,129 @@
---
id: auth-signinwithprovider
title: "auth.signInWithProvider()"
slug: auth-signinwithprovider
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Signs the user in using third party OAuth providers.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.signInWithProvider(Provider.github);
final error = res.error;
```
</TabItem>
</Tabs>
## Notes
- `auth.signInWithProvider()` is only available on `supabase_flutter`
- It will open the browser to the relevant login page.
## Examples
### Sign in with provider.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.signInWithProvider(Provider.github);
final error = res.error;
```
</TabItem>
</Tabs>
### With `redirectTo`
Specify the redirect link to bring back the user via deeplink.
Note that `redirectTo` should be null for Flutter Web.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.signInWithProvider(
Provider.github,
options: AuthOptions(
redirectTo: kIsWeb
? null
: 'io.supabase.flutter://reset-callback/'),
);
final error = res.error;
```
</TabItem>
</Tabs>
### With scopes
If you need additional data from an OAuth provider, you can include a space-separated list of scopes in your request to get back an OAuth provider token.
You may also need to specify the scopes in the provider's OAuth app settings, depending on the provider.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
const { user, session, error } = await supabase.auth.signIn({
provider: 'github'
}, {
scopes: 'repo gist notifications'
})
const oAuthToken = session.provider_token // use to access provider API
```
</TabItem>
</Tabs>
@@ -0,0 +1,70 @@
---
id: auth-signout
title: "auth.signOut()"
slug: auth-signout
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Signs out the current user, if there is a logged in user.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.signOut();
final error = res.error;
```
</TabItem>
</Tabs>
## Examples
### Sign out
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.signOut();
final error = res.error;
```
</TabItem>
</Tabs>
@@ -0,0 +1,80 @@
---
id: auth-signup
title: "auth.signUp()"
slug: auth-signup
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Creates a new user.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.signUp('example@email.com', 'example-password');
final user = res.data?.user;
final error = res.error;
```
</TabItem>
</Tabs>
## Notes
- By default, the user will need to verify their email address before logging in. If you would like to change this, you can disable "Email Confirmations" by going to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If "Email Confirmations" is turned on, a user is returned but session will be null
- If "Email Confirmations" is turned off, both a `user` and a `session` will be returned
- When the user confirms their email address, they will be redirected to localhost:3000 by default. To change this, you can go to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
## Examples
### Sign up.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.signUp('example@email.com', 'example-password');
final user = res.data?.user;
final error = res.error;
```
</TabItem>
</Tabs>
### Sign up with third-party providers.
If you are using Flutter, you can sign up with OAuth providers using the [`signInWithProvider()`](/docs/reference/dart/auth-signinwithprovider) method available on `supabase_flutter`.
@@ -0,0 +1,76 @@
---
id: auth-update
title: "auth.update()"
slug: auth-update
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Updates user data, if there is a logged in user.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.update(
UserAttributes(data: {'hello': 'world'})
);
final error = res.error;
```
</TabItem>
</Tabs>
## Notes
It's generally better to store user data in a table inside your public schema (i.e. `public.users`).
Use the `update()` method if you have data which rarely changes or is specific only to the logged in user.
## Examples
### Update a user's metadata.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.update(
UserAttributes(data: {'hello': 'world'})
);
final error = res.error;
```
</TabItem>
</Tabs>
@@ -0,0 +1,66 @@
---
id: auth-user
title: "auth.user()"
slug: auth-user
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Returns the user data, if there is a logged in user.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final user = supabase.auth.user();
```
</TabItem>
</Tabs>
## Examples
### Get the logged in user
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final user = supabase.auth.user();
```
</TabItem>
</Tabs>
@@ -0,0 +1,145 @@
---
id: containedby
title: ".containedBy()"
slug: containedby
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, main_exports')
.containedBy('main_exports', ['cars', 'food', 'machine'])
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, main_exports')
.containedBy('main_exports', ['cars', 'food', 'machine'])
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.update({ 'name': 'Mordor' })
.containedBy('main_exports', ['orks', 'surveillance', 'evil'])
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.delete()
.containedBy('main_exports', ['cars', 'food', 'machine'])
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_countries')
.containedBy('main_exports', ['cars', 'food', 'machine'])
.execute();
```
</TabItem>
</Tabs>
+145
View File
@@ -0,0 +1,145 @@
---
id: contains
title: ".contains()"
slug: contains
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, main_exports')
.contains('main_exports', ['oil'])
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, main_exports')
.contains('main_exports', ['oil'])
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.update({ 'name': 'Mordor' })
.contains('main_exports', ['oil'])
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.delete()
.contains('main_exports', ['oil'])
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_countries')
.contains('main_exports', ['oil'])
.execute();
```
</TabItem>
</Tabs>
+75
View File
@@ -0,0 +1,75 @@
---
id: delete
title: "Delete data: delete()"
slug: delete
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Performs a DELETE on the table.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.match({ 'id': 666 })
.execute();
```
</TabItem>
</Tabs>
## Notes
- `delete()` should always be combined with [Filters](/docs/reference/dart/using-filters) to target the item(s) you wish to delete.
## Examples
### Delete records
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.match({ 'id': 666 })
.execute();
```
</TabItem>
</Tabs>
+146
View File
@@ -0,0 +1,146 @@
---
id: eq
title: ".eq()"
slug: eq
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose value on the stated `column` exactly matches the specified `value`.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.eq('name', 'The shire')
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.eq('name', 'The shire')
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.eq('name', 'San Francisco')
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.eq('name', 'Mordor')
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.eq('name', 'San Francisco')
.execute();
```
</TabItem>
</Tabs>
+176
View File
@@ -0,0 +1,176 @@
---
id: filter
title: ".filter()"
slug: filter
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose `column` satisfies the filter.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.filter('name', 'in', '("Paris","Tokyo")')
.execute();
```
</TabItem>
</Tabs>
## Notes
- `.filter()` expects you to use the raw [PostgREST syntax](https://postgrest.org/en/stable/api.html#horizontal-filtering-rows) for the filter names and values, so it should only be used as an escape hatch in case other filters don't work.
```dart
.filter('arraycol','cs','{"a","b"}') // Use Postgres array {} and 'cs' for contains.
.filter('rangecol','cs','(1,2]') // Use Postgres range syntax for range column.
.filter('id','in','(6,7)') // Use Postgres list () and 'in' for in_ filter.
.filter('id','cs','{${mylist.join(',')}}') // You can insert a Dart array list.
```
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.filter('name', 'in', '("Paris","Tokyo")')
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.filter('name', 'in', '("Paris","Tokyo")')
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.filter('name', 'in', '("Paris","Tokyo")')
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.filter('name', 'in', '("Paris","Tokyo")')
```
</TabItem>
</Tabs>
### Filter embedded resources
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, countries ( name )')
.filter('countries.name', 'in', '("France","Japan")')
.execute();
```
</TabItem>
</Tabs>
@@ -0,0 +1,66 @@
---
id: getsubscriptions
title: "getSubscriptions()"
slug: getsubscriptions
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Returns an array of all your subscriptions.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final subscriptions = supabase.getSubscriptions();
```
</TabItem>
</Tabs>
## Examples
### Get all subscriptions
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final subscriptions = supabase.getSubscriptions();
```
</TabItem>
</Tabs>
+146
View File
@@ -0,0 +1,146 @@
---
id: gt
title: ".gt()"
slug: gt
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose value on the stated `column` is greater than the specified `value`.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.gt('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.gt('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.gt('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.gt('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.gt('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
+146
View File
@@ -0,0 +1,146 @@
---
id: gte
title: ".gte()"
slug: gte
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose value on the stated `column` is greater than or equal to the specified `value`.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.gte('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.gte('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.gte('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.gte('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.gte('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
+146
View File
@@ -0,0 +1,146 @@
---
id: ilike
title: ".ilike()"
slug: ilike
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose value in the stated `column` matches the supplied `pattern` (case insensitive).
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.ilike('name', '%la%')
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.ilike('name', '%la%')
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.ilike('name', '%la%')
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.ilike('name', '%la%')
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.ilike('name', '%la%')
.execute();
```
</TabItem>
</Tabs>
+148
View File
@@ -0,0 +1,148 @@
---
id: in_
title: ".in_()"
slug: in_
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose value on the stated `column` is found on the specified `values`.
`is_` and `in_` filter methods are suffixed with `_` to avoid collisions with reserved keywords.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.in_('name', ['Rio de Janeiro', 'San Francisco'])
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.in_('name', ['Rio de Janeiro', 'San Francisco'])
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.in_('name', ['Rio de Janeiro', 'San Francisco'])
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.in_('name', ['Rio de Janeiro', 'San Francisco'])
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.in_('name', ['Rio de Janeiro', 'San Francisco'])
.execute();
```
</TabItem>
</Tabs>
+12
View File
@@ -0,0 +1,12 @@
---
id: index
title: "Getting started"
slug: getting-started
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Supabase Dart.
@@ -0,0 +1,84 @@
---
id: initializing
title: "Initializing"
slug: initializing
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
## Dart
You can initialize a new Supabase client using the `SupabaseClient()` method.
The Supabase client is your entrypoint to the rest of the Supabase functionality
and is the easiest way to interact with everything we offer within the Supabase ecosystem.
## Flutter
For `supabase_flutter`, you will be using the static `initialize()` method on `Supabase` class.
## Examples
### Dart SupabaseClient()
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final supabase = SupabaseClient('https://xyzcompany.supabase.co', 'public-anon-key');
```
</TabItem>
</Tabs>
### Flutter initialize()
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart title="main.dart"
Future<void> main() async {
await Supabase.initialize(url: 'https://xyzcompany.supabase.co', anonKey: 'public-anon-key');
runApp(MyApp());
}
```
</TabItem>
</Tabs>
+102
View File
@@ -0,0 +1,102 @@
---
id: insert
title: "Create data: insert()"
slug: insert
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Performs an INSERT into the table.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.insert([
{'name': 'The Shire', 'country_id': 554}
]).execute();
```
</TabItem>
</Tabs>
## Notes
- By default, every time you run `insert()`, the client library will make a `select` to return the full record.
This is convenient, but it can also cause problems if your Policies are not configured to allow the `select` operation.
If you are using Row Level Security and you are encountering problems, try setting the `returning` param to `minimal`.
## Examples
### Create a record
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.insert([
{'name': 'The Shire', 'country_id': 554}
]).execute();
```
</TabItem>
</Tabs>
### Bulk create
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.insert([
{'name': 'The Shire', 'country_id': 554},
{'name': 'Rohan', 'country_id': 555},
]).execute();
```
</TabItem>
</Tabs>
@@ -1,12 +1,16 @@
---
id: intro
slug: /
sidebar_label: Introduction
id: installing
title: "Installing"
slug: installing
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
# Supabase Dart
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Dart libraries are built and supported by the community.
## Dart
Dart libraries are built and supported by the community.
```bash
dart pub add supabase
@@ -14,7 +18,7 @@ dart pub add supabase
Find the source code on [GitHub](https://github.com/supabase/supabase-dart).
## Flutter
## Flutter
For Flutter project, you can use [supabase_flutter](https://github.com/supabase/supabase-flutter).
@@ -23,6 +27,6 @@ flutter pub add supabase_flutter
```
`supabase_flutter` plugin uses `supabase` plugin internally, and it adds some Flutter specific functionality such as handling deeplinks coming back from magic link verifications.
If you are creating a Flutter application, we recommend using `supabase_flutter` instead of `supabase`.
If you are creating a Flutter application, we recommend using `supabase_flutter` instead of `supabase`.
For the most part `supabase_flutter` shares the same API as `supabase` with few exceptions such as initialization or OAuth sign in.
For the most part `supabase_flutter` shares the same API as `supabase` with few exceptions such as initialization or OAuth sign in.
+2 -2
View File
@@ -1,10 +1,10 @@
---
id: intro
slug: /
sidebar_label: Introduction
sidebar_label: Supabase Dart Library
---
# Supabase Dart
# Supabase Dart Library
Dart libraries are built and supported by the community.
+135
View File
@@ -0,0 +1,135 @@
---
id: invoke
title: "invoke()"
slug: invoke
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Invokes a Supabase Function. See the [guide](/docs/guides/api) for details on writing Functions.
:::caution
Supabase Functions are in Experimental release until 1 August 2022. There will breaking changes. Do not use them in Production.
:::
We have released Supabase Functions to gather feedback. You're welcome to try them out and send us feedback but we strongly advise against using them for anything in production.
There will be breaking changes with no notice.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabaseClient.functions.invoke('hello', body: {'foo': 'baa'});
final data = res.data;
final error = res.error;
```
</TabItem>
</Tabs>
## Notes
- Requires an Authorization header.
- Invoke params generally match the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) spec.
## Examples
### Basic invocation.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabaseClient.functions.invoke('hello', body: {'foo': 'baa'});
final data = res.data;
final error = res.error;
```
</TabItem>
</Tabs>
### Specifying response type.
By default, `invoke()` will parse the response as JSON. You can parse the response in the following formats: `json`, `blob`, `text`, and `arrayBuffer`.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabaseClient.functions.invoke(
'hello',
body: {'foo': 'baa'},
responseType: ResponseType.text,
);
final data = res.data;
final error = res.error;
```
</TabItem>
</Tabs>
### Parsing custom headers.
Any `headers` will be passed through to the function. A common pattern is to pass a logged-in user's JWT token as an Authorization header.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabaseClient.functions.invoke(
'hello',
body: {'foo': 'baa'},
headers: {
'Authorization': 'Bearer ${supabase.auth.session()?.access_token}'
},
);
```
</TabItem>
</Tabs>
+148
View File
@@ -0,0 +1,148 @@
---
id: is_
title: ".is_()"
slug: is_
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
A check for exact equality (null, true, false), finds all rows whose value on the stated `column` exactly match the specified `value`.
`is_` and `in_` filter methods are suffixed with `_` to avoid collisions with reserved keywords.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.is_('name', null)
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.is_('name', null)
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.is_('name', null)
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.is_('name', null)
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.is_('name', null)
.execute();
```
</TabItem>
</Tabs>
+191
View File
@@ -0,0 +1,191 @@
---
id: like
title: ".like()"
slug: like
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose value in the stated `column` matches the supplied `pattern` (case sensitive).
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.like('name', '%la%')
.execute();
```
</TabItem>
</Tabs>
## Parameters
<ul className="method-list-group">
<li className="method-list-item">
<h4 className="method-list-item-label">
<span className="method-list-item-label-name">
column
</span>
<span className="method-list-item-label-badge required">
required
</span>
<span className="method-list-item-validation">
<code>object</code>
</span>
</h4>
<div class="method-list-item-description">
The column to filter on.
</div>
</li>
<li className="method-list-item">
<h4 className="method-list-item-label">
<span className="method-list-item-label-name">
pattern
</span>
<span className="method-list-item-label-badge required">
required
</span>
<span className="method-list-item-validation">
<code>string</code>
</span>
</h4>
<div class="method-list-item-description">
The pattern to filter with.
</div>
</li>
</ul>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.like('name', '%la%')
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.like('name', '%la%')
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.like('name', '%la%')
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.like('name', '%la%')
.execute();
```
</TabItem>
</Tabs>
+99
View File
@@ -0,0 +1,99 @@
---
id: limit
title: "limit()"
slug: limit
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Limits the result with the specified count.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.limit(1)
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.limit(1)
.execute();
```
</TabItem>
</Tabs>
### With embedded resources
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, cities(name)')
.eq('name', 'United States')
.limit(1, foreignTable: 'cities' )
.execute();
```
</TabItem>
</Tabs>
+146
View File
@@ -0,0 +1,146 @@
---
id: lt
title: ".lt()"
slug: lt
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose value on the stated `column` is less than the specified `value`.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.lt('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.lt('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.lt('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.lt('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.lt('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
+191
View File
@@ -0,0 +1,191 @@
---
id: lte
title: ".lte()"
slug: lte
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose value on the stated `column` is less than or equal to the specified `value`.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.lte('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
## Parameters
<ul className="method-list-group">
<li className="method-list-item">
<h4 className="method-list-item-label">
<span className="method-list-item-label-name">
column
</span>
<span className="method-list-item-label-badge required">
required
</span>
<span className="method-list-item-validation">
<code>object</code>
</span>
</h4>
<div class="method-list-item-description">
The column to filter on.
</div>
</li>
<li className="method-list-item">
<h4 className="method-list-item-label">
<span className="method-list-item-label-name">
value
</span>
<span className="method-list-item-label-badge required">
required
</span>
<span className="method-list-item-validation">
<code>object</code>
</span>
</h4>
<div class="method-list-item-description">
The value to filter with.
</div>
</li>
</ul>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.lte('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.lte('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.lte('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.lte('country_id', 250)
.execute();
```
</TabItem>
</Tabs>
+146
View File
@@ -0,0 +1,146 @@
---
id: match
title: ".match()"
slug: match
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose columns match the specified `query` object.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.match({'name': 'Beijing', 'country_id': 156})
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.match({'name': 'Beijing', 'country_id': 156})
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.match({'name': 'Beijing', 'country_id': 156})
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.match({'name': 'Beijing', 'country_id': 156})
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.match({'name': 'Beijing', 'country_id': 156})
.execute();
```
</TabItem>
</Tabs>
+146
View File
@@ -0,0 +1,146 @@
---
id: neq
title: ".neq()"
slug: neq
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose value on the stated `column` doesn't match the specified `value`.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.neq('name', 'The shire')
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.neq('name', 'The shire')
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.neq('name', 'San Francisco')
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.neq('name', 'Mordor')
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities')
.neq('name', 'Lagos')
.execute();
```
</TabItem>
</Tabs>
+155
View File
@@ -0,0 +1,155 @@
---
id: not
title: ".not()"
slug: not
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows which doesn't satisfy the filter.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.not('name', 'eq', 'Paris')
.execute();
```
</TabItem>
</Tabs>
## Notes
- `.not()` expects you to use the raw [PostgREST syntax](https://postgrest.org/en/stable/api.html#horizontal-filtering-rows) for the filter names and values.
```dart
.not('name','eq','Paris')
.not('arraycol','cs','{"a","b"}') // Use Postgres array {} for array column and 'cs' for contains.
.not('rangecol','cs','(1,2]') // Use Postgres range syntax for range column.
.not('id','in','(6,7)') // Use Postgres list () and 'in' for in_ filter.
.not('id','in','(${mylist.join(',')})') // You can insert a Dart list array.
```
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.not('name', 'eq', 'Paris')
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Mordor' })
.not('name', 'eq', 'Paris')
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.delete()
.not('name', 'eq', 'Paris')
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_cities)
.not('name', 'eq', 'Paris')
.execute();
```
</TabItem>
</Tabs>
+105
View File
@@ -0,0 +1,105 @@
---
id: or
title: ".or()"
slug: or
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows satisfying at least one of the filters.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.or('id.eq.20,id.eq.30')
.execute();
```
</TabItem>
</Tabs>
## Notes
- `.or()` expects you to use the raw [PostgREST syntax](https://postgrest.org/en/stable/api.html#horizontal-filtering-rows) for the filter names and values.
```dart
.or('id.in.(6,7),arraycol.cs.{"a","b"}') // Use Postgres list () and 'in' for in_ filter. Array {} and 'cs' for contains.
.or('id.in.(${mylist.join(',')}),arraycol.cs.{${mylistArray.join(',')}}') // You can insert a Dart list for list or array column.
.or('id.in.(${mylist.join(',')}),rangecol.cs.(${mylistRange.join(',')}]') // You can insert a Dart list for list or range column.
```
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.or('id.eq.20,id.eq.30')
.execute();
```
</TabItem>
</Tabs>
### Use `or` with `and`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.or('id.gt.20,and(name.eq.New Zealand,name.eq.France)')
.execute();
```
</TabItem>
</Tabs>
+99
View File
@@ -0,0 +1,99 @@
---
id: order
title: "order()"
slug: order
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Orders the result with the specified column.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.order('id', ascending: false )
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.order('id', ascending: false )
.execute();
```
</TabItem>
</Tabs>
### With embedded resources
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, cities(name)')
.eq('name', 'United States')
.order('name', foreignTable: 'cities')
.execute();
```
</TabItem>
</Tabs>
+145
View File
@@ -0,0 +1,145 @@
---
id: overlaps
title: ".overlaps()"
slug: overlaps
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, main_exports')
.overlaps('main_exports', ['computers', 'minerals'])
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, main_exports')
.overlaps('main_exports', ['computers', 'minerals'])
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.update({ 'name': 'Mordor' })
.overlaps('main_exports', ['computers', 'minerals'])
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.delete()
.overlaps('main_exports', ['computers', 'minerals'])
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_countries')
.overlaps('main_exports', ['computers', 'minerals'])
.execute();
```
</TabItem>
</Tabs>
+74
View File
@@ -0,0 +1,74 @@
---
id: range
title: "range()"
slug: range
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Limits the result to rows within the specified range, inclusive.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.range(0,3)
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.range(0,3)
.execute();
```
</TabItem>
</Tabs>
@@ -0,0 +1,145 @@
---
id: rangeadjacent
title: ".rangeAdjacent()"
slug: rangeadjacent
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, population_range_millions')
.rangeAdjacent('population_range_millions', '[70, 185]')
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, population_range_millions')
.rangeAdjacent('population_range_millions', '[70, 185]')
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.update({ 'name': 'Mordor' })
.rangeAdjacent('population_range_millions', '[70, 185]')
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.delete()
.rangeAdjacent('population_range_millions', '[70, 185]')
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_countries')
.rangeAdjacent('population_range_millions', '[70, 185]')
.execute();
```
</TabItem>
</Tabs>
+145
View File
@@ -0,0 +1,145 @@
---
id: rangegt
title: ".rangeGt()"
slug: rangegt
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, population_range_millions')
.rangeGt('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, population_range_millions')
.rangeGt('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.update({ 'name': 'Mordor' })
.rangeGt('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.delete()
.rangeGt('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_countries')
.rangeGt('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
+145
View File
@@ -0,0 +1,145 @@
---
id: rangegte
title: ".rangeGte()"
slug: rangegte
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, population_range_millions')
.rangeGte('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, population_range_millions')
.rangeGte('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.update({ 'name': 'Mordor' })
.rangeGte('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.delete()
.rangeGte('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_countries')
.rangeGte('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
+145
View File
@@ -0,0 +1,145 @@
---
id: rangelt
title: ".rangeLt()"
slug: rangelt
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, population_range_millions')
.rangeLt('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, population_range_millions')
.rangeLt('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.update({ 'name': 'Mordor' })
.rangeLt('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.delete()
.rangeLt('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_countries')
.rangeLt('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
+145
View File
@@ -0,0 +1,145 @@
---
id: rangelte
title: ".rangeLte()"
slug: rangelte
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, population_range_millions')
.rangeLte('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('name, id, population_range_millions')
.rangeLte('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `update()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.update({ 'name': 'Mordor' })
.rangeLte('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `delete()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.delete()
.rangeLte('population_range_millions', '[150, 250]')
.execute();
```
</TabItem>
</Tabs>
### With `rpc()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
// Only valid if the Stored Procedure returns a table type.
final res = await supabase
.rpc('echo_all_countries')
.rangeLte('population_range_millions', [150, 250])
.execute();
```
</TabItem>
</Tabs>
@@ -0,0 +1,67 @@
---
id: removesubscription
title: "removeSubscription()"
slug: removesubscription
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Removes an active subscription and returns the number of open connections.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
supabase.removeSubscription(mySubscription);
```
</TabItem>
</Tabs>
## Notes
- Removing subscriptions is a great way to maintain the performance of your project's database. Supabase will automatically handle cleanup 30 seconds after a user is disconnected, but unused subscriptions may cause degradation as more users are simultaneously subscribed.
## Examples
### Remove a subscription
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
supabase.removeSubscription(mySubscription);
```
</TabItem>
</Tabs>
@@ -0,0 +1,114 @@
---
id: reset-password-email
title: "Reset Password (Email)"
slug: reset-password-email
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Sends a reset request to an email address.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.api.resetPasswordForEmail('user@example.com');
final error = res.error;
```
</TabItem>
</Tabs>
## Notes
Sends a reset request to an email address.
When the user clicks the reset link in the email they will be forwarded to:
`<SITE_URL>#access_token=x&refresh_token=y&expires_in=z&token_type=bearer&type=recovery`
Your app must detect `type=recovery` in the fragment and display a password reset form to the user.
You should then use the access_token in the url and new password to update the user as follows:
```dart
final res = await supabase.auth.api.updateUser(
accessToken,
UserAttributes(password: 'NEW_PASSWORD'),
);
```
## Examples
### Reset password
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase.auth.api.resetPasswordForEmail('user@example.com');
final error = res.error;
```
</TabItem>
</Tabs>
### Reset password for Flutter
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
You can pass `redirectTo` to open the app via deeplink when user opens the password reset email.
```dart
final res = await supabase.auth.api.resetPasswordForEmail(
'user@example.com',
options: AuthOptions(redirectTo: kIsWeb
? null
: 'io.supabase.flutter://reset-callback/'),
);
final error = res.error;
```
</TabItem>
</Tabs>
+119
View File
@@ -0,0 +1,119 @@
---
id: rpc
title: "Stored Procedures: rpc()"
slug: rpc
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
You can call stored procedures as a "Remote Procedure Call".
That's a fancy way of saying that you can put some logic into your database then call it from anywhere.
It's especially useful when the logic rarely changes - like password resets and updates.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.rpc('hello_world')
.execute();
```
</TabItem>
</Tabs>
## Examples
### Call a stored procedure
This is an example invoking a stored procedure.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.rpc('hello_world')
.execute();
```
</TabItem>
</Tabs>
### With Parameters
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.rpc('echo_city', params: { 'name': 'The Shire' })
.execute();
```
</TabItem>
</Tabs>
### With count option
You can specify a count option to get the row count along with your data.
Allowed values for count option are `exact`, `planned` and `estimated`.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.rpc('hello_world')
.execute(count: CountOption.exact);
```
</TabItem>
</Tabs>
+276
View File
@@ -0,0 +1,276 @@
---
id: select
title: "Fetch data: select()"
slug: select
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Performs vertical filtering with SELECT.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select()
.execute();
final data = res.data;
final error = res.error;
```
</TabItem>
</Tabs>
## Notes
- By default, Supabase projects will return a maximum of 1,000 rows. This setting can be changed in Project API Settings. It's recommended that you keep it low to limit the payload size of accidental or malicious requests. You can use `range()` queries to paginate through your data.
- `select()` can be combined with [Modifiers](/docs/reference/dart/using-modifiers)
- `select()` can be combined with [Filters](/docs/reference/dart/using-filters)
- If using the Supabase hosted platform `apikey` is technically a reserved keyword, since the API gateway will pluck it out for authentication. [It should be avoided as a column name](https://github.com/supabase/supabase/issues/5465).
## Examples
### Getting your data
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select()
.execute();
final data = res.data;
final error = res.error;
```
</TabItem>
</Tabs>
### Selecting specific columns
You can select specific fields from your tables.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name')
.execute();
```
</TabItem>
</Tabs>
### Query foreign tables
If your database has relationships, you can query related tables too.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('countries')
.select('''
name,
cities (
name
)
''')
.execute();
```
</TabItem>
</Tabs>
### Query the same foreign table multiple times
Sometimes you will need to query the same foreign table twice.
In this case, you can use the name of the joined column to identify
which join you intend to use. For convenience, you can also give an
alias for each column. For example, if we had a shop of products,
and we wanted to get the supplier and the purchaser at the same time
(both in the users) table:
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('products')
.select('''
id,
supplier:supplier_id ( name ),
purchaser:purchaser_id ( name )
''')
.execute();
```
</TabItem>
</Tabs>
### Filtering with inner joins
If you want to filter a table based on a child table's values you can use the `!inner()` function. For example, if you wanted
to select all rows in a `message` table which belong to a user with the `username` "Jane":
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('messages')
.select('*, users!inner(*)')
.eq('users.username', 'Jane')
.execute();
```
</TabItem>
</Tabs>
### Querying with count option
You can get the number of rows by using the count option.
Allowed values for count option are [exact](https://postgrest.org/en/stable/api.html#exact-count), [planned](https://postgrest.org/en/stable/api.html#planned-count) and [estimated](https://postgrest.org/en/stable/api.html#estimated-count).
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name')
.execute(count: CountOption.exact);
final count = res.count;
```
</TabItem>
</Tabs>
### Querying JSON data
If you have data inside of a JSONB column, you can apply select
and query filters to the data values. Postgres offers a
[number of operators](https://www.postgresql.org/docs/current/functions-json.html)
for querying JSON data. Also see
[PostgREST docs](http://postgrest.org/en/v7.0.0/api.html#json-columns) for more details.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('users')
.select('''
id, name,
address->street
''')
.eq('address->postcode', 90210)
.execute();
```
</TabItem>
</Tabs>
### Return data as CSV
By default the data is returned in JSON format, however you can also request for it to be returned as Comma Separated Values.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('users')
.select()
.csv()
.execute();
```
</TabItem>
</Tabs>
+74
View File
@@ -0,0 +1,74 @@
---
id: single
title: "single()"
slug: single
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Retrieves only one row from the result. Result must be one row (e.g. using limit), otherwise this will result in an error.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.single()
.execute();
```
</TabItem>
</Tabs>
## Examples
### With `select()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.single()
.execute();
```
</TabItem>
</Tabs>
@@ -0,0 +1,73 @@
---
id: storage-createbucket
title: "createBucket()"
slug: storage-createbucket
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Creates a new Storage bucket
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.createBucket('avatars');
```
</TabItem>
</Tabs>
## Notes
- Policy permissions required:
- `buckets` permissions: `insert`
- `objects` permissions: none
## Examples
### Create bucket
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.createBucket('avatars');
```
</TabItem>
</Tabs>
@@ -0,0 +1,73 @@
---
id: storage-deletebucket
title: "deleteBucket()"
slug: storage-deletebucket
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Deletes an existing bucket. A bucket can't be deleted with existing objects inside it. You must first `empty()` the bucket.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.deleteBucket('avatars');
```
</TabItem>
</Tabs>
## Notes
- Policy permissions required:
- `buckets` permissions: `select` and `delete`
- `objects` permissions: none
## Examples
### Delete bucket
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.deleteBucket('avatars');
```
</TabItem>
</Tabs>
@@ -0,0 +1,73 @@
---
id: storage-emptybucket
title: "emptyBucket()"
slug: storage-emptybucket
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Removes all objects inside a single bucket.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.emptyBucket('avatars');
```
</TabItem>
</Tabs>
## Notes
- Policy permissions required:
- `buckets` permissions: `select`
- `objects` permissions: `select` and `delete`
## Examples
### Empty bucket
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.emptyBucket('avatars');
```
</TabItem>
</Tabs>
@@ -0,0 +1,79 @@
---
id: storage-from-createsignedurl
title: "from.createSignedUrl()"
slug: storage-from-createsignedurl
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Create signed url to download file without requiring permissions. This URL can be valid for a set number of seconds.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.from('avatars')
.createSignedUrl('avatar1.png', 60);
final signedURL = res.data;
```
</TabItem>
</Tabs>
## Notes
- Policy permissions required:
- `buckets` permissions: none
- `objects` permissions: `select`
## Examples
### Create Signed URL
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.from('avatars')
.createSignedUrl('avatar1.png', 60);
final signedURL = res.data;
```
</TabItem>
</Tabs>
@@ -0,0 +1,75 @@
---
id: storage-from-download
title: "from.download()"
slug: storage-from-download
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Downloads a file.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.from('avatars')
.download('avatar1.png');
```
</TabItem>
</Tabs>
## Notes
- Policy permissions required:
- `buckets` permissions: none
- `objects` permissions: `select`
## Examples
### Download file
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.from('avatars')
.download('avatar1.png');
```
</TabItem>
</Tabs>
@@ -0,0 +1,80 @@
---
id: storage-from-getpublicurl
title: "from.getPublicUrl()"
slug: storage-from-getpublicurl
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Retrieve URLs for assets in public buckets
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = supabase
.storage
.from('public-bucket')
.getPublicUrl('avatar1.png');
final publicURL = res.data;
```
</TabItem>
</Tabs>
## Notes
- The bucket needs to be set to public, either via [updateBucket()](/docs/reference/javascript/storage-updatebucket) or by going to Storage on [app.supabase.com](https://app.supabase.com), clicking the overflow menu on a bucket and choosing "Make public"
- Policy permissions required:
- `buckets` permissions: none
- `objects` permissions: none
## Examples
### Returns the URL for an asset in a public bucket
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = supabase
.storage
.from('public-bucket')
.getPublicUrl('avatar1.png');
final publicURL = res.data;
```
</TabItem>
</Tabs>
@@ -0,0 +1,75 @@
---
id: storage-from-list
title: "from.list()"
slug: storage-from-list
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Lists all the files within a bucket.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.from('avatars')
.list();
```
</TabItem>
</Tabs>
## Notes
- Policy permissions required:
- `buckets` permissions: none
- `objects` permissions: `select`
## Examples
### List files in a bucket
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.from('avatars')
.list();
```
</TabItem>
</Tabs>
@@ -0,0 +1,75 @@
---
id: storage-from-move
title: "from.move()"
slug: storage-from-move
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Moves an existing file, optionally renaming it at the same time.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.from('avatars')
.move('public/avatar1.png', 'private/avatar2.png');
```
</TabItem>
</Tabs>
## Notes
- Policy permissions required:
- `buckets` permissions: none
- `objects` permissions: `update` and `select`
## Examples
### Move file
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.from('avatars')
.move('public/avatar1.png', 'private/avatar2.png');
```
</TabItem>
</Tabs>
@@ -0,0 +1,75 @@
---
id: storage-from-remove
title: "from.remove()"
slug: storage-from-remove
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Deletes files within the same bucket
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.from('avatars')
.remove(['avatar1.png']);
```
</TabItem>
</Tabs>
## Notes
- Policy permissions required:
- `buckets` permissions: none
- `objects` permissions: `delete` and `select`
## Examples
### Delete file
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.from('avatars')
.remove(['avatar1.png']);
```
</TabItem>
</Tabs>
@@ -0,0 +1,83 @@
---
id: storage-from-update
title: "from.update()"
slug: storage-from-update
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Replaces an existing file at the specified path with a new one.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final avatarFile = File('path/to/file');
final res = await supabase
.storage
.from('avatars')
.update('public/avatar1.png', avatarFile, fileOptions: FileOptions(
cacheControl: '3600',
upsert: false
));
```
</TabItem>
</Tabs>
## Notes
- Policy permissions required:
- `buckets` permissions: none
- `objects` permissions: `update` and `select`
## Examples
### Update file
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final avatarFile = File('path/to/file');
final res = await supabase
.storage
.from('avatars')
.update('public/avatar1.png', avatarFile, fileOptions: FileOptions(
cacheControl: '3600',
upsert: false
));
```
</TabItem>
</Tabs>
@@ -0,0 +1,152 @@
---
id: storage-from-upload
title: "from.upload()"
slug: storage-from-upload
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Uploads a file to an existing bucket.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final avatarFile = File('path/to/file');
final res = await supabase
.storage
.from('avatars')
.upload('public/avatar1.png', avatarFile, fileOptions: FileOptions(
cacheControl: '3600',
upsert: false
));
```
</TabItem>
</Tabs>
## Parameters
<ul className="method-list-group">
<li className="method-list-item">
<h4 className="method-list-item-label">
<span className="method-list-item-label-name">
path
</span>
<span className="method-list-item-label-badge required">
required
</span>
<span className="method-list-item-validation">
<code>string</code>
</span>
</h4>
<div class="method-list-item-description">
The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.
</div>
</li>
<li className="method-list-item">
<h4 className="method-list-item-label">
<span className="method-list-item-label-name">
fileBody
</span>
<span className="method-list-item-label-badge required">
required
</span>
<span className="method-list-item-validation">
<code>ArrayBuffer</code> | <code>ArrayBufferView</code> | <code>Blob</code> | <code>Buffer</code> | <code>File</code> | <code>FormData</code> | <code>ReadableStream</code> | <code>ReadableStream</code> | <code>URLSearchParams</code> | <code>string</code>
</span>
</h4>
<div class="method-list-item-description">
The body of the file to be stored in the bucket.
</div>
</li>
<li className="method-list-item">
<h4 className="method-list-item-label">
<span className="method-list-item-label-name">
fileOptions
</span>
<span className="method-list-item-label-badge false">
optional
</span>
<span className="method-list-item-validation">
<code>FileOptions</code>
</span>
</h4>
<div class="method-list-item-description">
HTTP headers.
`cacheControl`: string, the `Cache-Control: max-age=<seconds>` seconds value.
`contentType`: string, the `Content-Type` header value. Should be specified if using a `fileBody` that is neither `Blob` nor `File` nor `FormData`, otherwise will default to `text/plain;charset=UTF-8`.
`upsert`: boolean, whether to perform an upsert.
</div>
</li>
</ul>
## Notes
- Policy permissions required:
- `buckets` permissions: none
- `objects` permissions: `insert`
## Examples
### Upload file
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final avatarFile = File('path/to/file');
final res = await supabase
.storage
.from('avatars')
.upload('public/avatar1.png', avatarFile, fileOptions: FileOptions(
cacheControl: '3600',
upsert: false
));
```
</TabItem>
</Tabs>
@@ -0,0 +1,97 @@
---
id: storage-getbucket
title: "getBucket()"
slug: storage-getbucket
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Retrieves the details of an existing Storage bucket.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.getBucket('avatars')
```
</TabItem>
</Tabs>
## Parameters
<ul className="method-list-group">
<li className="method-list-item">
<h4 className="method-list-item-label">
<span className="method-list-item-label-name">
id
</span>
<span className="method-list-item-label-badge required">
required
</span>
<span className="method-list-item-validation">
<code>string</code>
</span>
</h4>
<div class="method-list-item-description">
The unique identifier of the bucket you would like to retrieve.
</div>
</li>
</ul>
## Notes
- Policy permissions required:
- `buckets` permissions: `select`
- `objects` permissions: none
## Examples
### Get bucket
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.getBucket('avatars')
```
</TabItem>
</Tabs>
@@ -0,0 +1,73 @@
---
id: storage-listbuckets
title: "listBuckets()"
slug: storage-listbuckets
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Retrieves the details of all Storage buckets within an existing product.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.listBuckets()
```
</TabItem>
</Tabs>
## Notes
- Policy permissions required:
- `buckets` permissions: `select`
- `objects` permissions: none
## Examples
### List buckets
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.listBuckets()
```
</TabItem>
</Tabs>
@@ -0,0 +1,73 @@
---
id: storage-updatebucket
title: "updateBucket()"
slug: storage-updatebucket
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Updates a new Storage bucket
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.updateBucket('avatars', { public: false });
```
</TabItem>
</Tabs>
## Notes
- Policy permissions required:
- `buckets` permissions: `update`
- `objects` permissions: none
## Examples
### Update bucket
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.storage
.updateBucket('avatars', { public: false });
```
</TabItem>
</Tabs>
+148
View File
@@ -0,0 +1,148 @@
---
id: stream
title: "stream()"
slug: stream
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Notifies of data at the queried table.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
supabase
.from('countries')
.stream(['id'])
.execute();
```
</TabItem>
</Tabs>
## Notes
- `stream()` will emit the initial data as well as any further change on the database as `Stream` of `List<Map<String, dynamic>>` by combining Postgrest and Realtime.
- Takes a list of primary key columns as its argument.
## Examples
### Listening to a specific table
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
supabase
.from('countries')
.stream(['id'])
.execute();
```
</TabItem>
</Tabs>
### Listening to a specific rows within a table
You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match.
This syntax is the as how you can filter data in Realtime
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
supabase
.from('countries:id=eq.120')
.stream(['id'])
.execute();
```
</TabItem>
</Tabs>
### With `order()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
supabase
.from('countries')
.stream(['id'])
.order('name', ascending: false)
.execute();
```
</TabItem>
</Tabs>
### With `limit()`
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
supabase
.from('countries')
.stream(['id'])
.order('name', ascending: false)
.limit(10)
.execute();
```
</TabItem>
</Tabs>
+237
View File
@@ -0,0 +1,237 @@
---
id: subscribe
title: "on().subscribe()"
slug: subscribe
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Subscribe to realtime changes in your database.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final mySubscription = supabase
.from('countries')
.on(SupabaseEventTypes.all, (payload) {
// Handle realtime payload
})
.subscribe();
```
</TabItem>
</Tabs>
## Notes
- Realtime is disabled by default for new Projects for better database performance and security. You can turn it on by [managing replication](/docs/guides/api#managing-realtime).
- If you want to receive the "previous" data for updates and deletes, you will need to set `REPLICA IDENTITY` to `FULL`, like this: `ALTER TABLE your_table REPLICA IDENTITY FULL;`
## Examples
### Listen to all database changes
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final mySubscription = supabase
.from('countries')
.on(SupabaseEventTypes.all, (payload) {
// Handle realtime payload
})
.subscribe();
```
</TabItem>
</Tabs>
### Listening to a specific table
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final mySubscription = supabase
.from('countries')
.on(SupabaseEventTypes.all, (payload) {
// Handle realtime payload
})
.subscribe();
```
</TabItem>
</Tabs>
### Listening to inserts
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final mySubscription = supabase
.from('countries')
.on(SupabaseEventTypes.insert, (payload) {
// Handle realtime payload
})
.subscribe();
```
</TabItem>
</Tabs>
### Listening to updates
By default, Supabase will send only the updated record. If you want to receive the previous values as well you can
enable full replication for the table you are listening too:
```sql
alter table "your_table" replica identity full;
```
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final mySubscription = supabase
.from('countries')
.on(SupabaseEventTypes.update, (payload) {
// Handle realtime payload
})
.subscribe();
```
</TabItem>
</Tabs>
### Listening to deletes
By default, Supabase does not send deleted records. If you want to receive the deleted record you can
enable full replication for the table you are listening too:
```sql
alter table "your_table" replica identity full;
```
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final mySubscription = supabase
.from('countries')
.on(SupabaseEventTypes.delete, (payload) {
// Handle realtime payload
})
.subscribe();
```
</TabItem>
</Tabs>
### Listening to multiple events
You can chain listeners if you want to listen to multiple events for each table.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final mySubscription = supabase
.from('countries')
.on(SupabaseEventTypes.insert, handleInsert)
.on(SupabaseEventTypes.delete, handleDelete)
.subscribe();
```
</TabItem>
</Tabs>
### Listening to row level changes
You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final mySubscription = supabase
.from('countries:id=eq.200')
.on(SupabaseEventTypes.update, handleRecordUpdated)
.subscribe();
```
</TabItem>
</Tabs>
@@ -0,0 +1,147 @@
---
id: textsearch
title: ".textSearch()"
slug: textsearch
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Finds all rows whose tsvector value on the stated `column` matches to_tsquery(query).
## Examples
### Text search
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('quotes')
.select('catchphrase')
.textSearch('catchphrase', "'fat' & 'cat'",
config: 'english'
)
.execute();
```
</TabItem>
</Tabs>
### Basic normalization
Uses PostgreSQL's `plainto_tsquery` function.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('quotes')
.select('catchphrase')
.textSearch('catchphrase', "'fat' & 'cat'",
type: TextSearchType.plain,
config: 'english'
)
.execute();
```
</TabItem>
</Tabs>
### Full normalization
Uses PostgreSQL's `phraseto_tsquery` function.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('quotes')
.select('catchphrase')
.textSearch('catchphrase', "'fat' & 'cat'",
type: TextSearchType.phrase,
config: 'english'
)
.execute();
```
</TabItem>
</Tabs>
### Full normalization
Uses PostgreSQL's `websearch_to_tsquery` function.
This function will never raise syntax errors, which makes it possible to use raw user-supplied input for search, and can be used
with advanced operators.
- `unquoted text`: text not inside quote marks will be converted to terms separated by & operators, as if processed by plainto_tsquery.
- `"quoted text"`: text inside quote marks will be converted to terms separated by <-> operators, as if processed by phraseto_tsquery.
- `OR`: the word “or” will be converted to the | operator.
- `-`: a dash will be converted to the ! operator.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('quotes')
.select('catchphrase')
.textSearch('catchphrase', "'fat or cat'",
type: TextSearchType.websearch,
config: 'english'
)
.execute();
```
</TabItem>
</Tabs>
+108
View File
@@ -0,0 +1,108 @@
---
id: update
title: "Modify data: update()"
slug: update
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Performs an UPDATE on the table.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Middle Earth' })
.match({ 'name': 'Auckland' })
.execute();
```
</TabItem>
</Tabs>
## Notes
- `update()` should always be combined with [Filters](/docs/reference/dart/using-filters) to target the item(s) you wish to update.
## Examples
### Updating your data
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('cities')
.update({ 'name': 'Middle Earth' })
.match({ 'name': 'Auckland' })
.execute();
```
</TabItem>
</Tabs>
### Updating JSON data
Postgres offers a
[number of operators](https://www.postgresql.org/docs/current/functions-json.html)
for working with JSON data. Right now it is only possible to update an entire JSON document,
but we are [working on ideas](https://github.com/PostgREST/postgrest/issues/465) for updating individual keys.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('users')
.update({
'address': {
'street': 'Melrose Place',
'postcode': 90210
}
})
.eq('address->postcode', 90210)
.execute();
```
</TabItem>
</Tabs>
+128
View File
@@ -0,0 +1,128 @@
---
id: upsert
title: "Upsert data: upsert()"
slug: upsert
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Performs an UPSERT into the table.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('messages')
.upsert({ 'id': 3, 'message': 'foo', 'username': 'supabot' })
.execute();
```
</TabItem>
</Tabs>
## Notes
- Primary keys should be included in the data payload in order for an update to work correctly.
- Primary keys must be natural, not surrogate. There are however, [workarounds](https://github.com/PostgREST/postgrest/issues/1118) for surrogate primary keys.
## Examples
### Upsert your data
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('messages')
.upsert({ 'id': 3, 'message': 'foo', 'username': 'supabot' })
.execute();
```
</TabItem>
</Tabs>
### Upserting into tables with constraints
Running the following will cause supabase to upsert data into the `users` table.
If the username 'supabot' already exists, the `onConflict` argument tells supabase to overwrite that row
based on the column passed into `onConflict`.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('users')
.upsert({ 'username': 'supabot' }, { 'onConflict': 'username' })
.execute();
```
</TabItem>
</Tabs>
### Return the exact number of rows
Allowed values for count option are `exact`, `planned` and `estimated`.
<Tabs
defaultValue="dart"
groupId="reference/dart"
values={[{ label: 'Dart', value: 'dart' }]}>
<TabItem value="dart">
```dart
final res = await supabase
.from('users')
.upsert({
'id': 3,
'message': 'foo',
'username': 'supabot'
})
.execute(count: CountOption.exact);
```
</TabItem>
</Tabs>
-115
View File
@@ -1,115 +0,0 @@
---
id: usage
title: Usage
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
Supabase Dart.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Initializing the client library
```dart
final supabase = SupabaseClient('<SUPABASE_URL>', '<SUPABASE_ANON_KEY>');
```
### Attributes
### Notes
## Dart
You can initialize a new Supabase client using the `SupabaseClient()` method.
The Supabase client is your entrypoint to the rest of the Supabase functionality
and is the easiest way to interact with everything we offer within the Supabase ecosystem.
## Flutter
For `supabase_flutter`, you will be using the static `initialize()` method on `Supabase` class.
### Examples
####
```dart
final supabase = SupabaseClient('https://xyzcompany.supabase.co', 'public-anon-key');
```
####
```dart title="main.dart"
Future<void> main() async {
await Supabase.initialize(url: 'https://xyzcompany.supabase.co', anonKey: 'public-anon-key');
runApp(MyApp());
}
```
## Create a new user.
```dart
final res = await supabase.auth.signUp('<USER_EMAIL>', '<USER_PASSWORD>');
```
### Attributes
### Notes
- By default, the user will need to verify their email address before logging in. If you would like to change this, you can disable "Email Confirmations" by going to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If "Email Confirmations" is turned on, a user is returned but session will be null
- If "Email Confirmations" is turned off, both a `user` and a `session` will be returned
- When the user confirms their email address, they will be redirected to localhost:3000 by default. To change this, you can go to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
### Examples
#### Sign up.
```dart
final res = await supabase.auth.signUp('example@email.com', 'example-password');
final user = res.data?.user;
final error = res.error;
```
#### Sign up with third-party providers.
```dart
// Use signInWithProvider()
```
@@ -0,0 +1,44 @@
---
id: using-filters
title: "Using Filters"
slug: using-filters
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Filters can be used on `select()`, `update()`, and `delete()` queries.
If a Stored Procedure returns a table response, you can also apply filters.
### Applying Filters
You must apply your filters to the end of your query. For example:
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.eq('name', 'The Shire') // Correct
.execute();
final res = await supabase
.from('cities')
.eq('name', 'The Shire') // Incorrect
.select('name, country_id')
.execute();
```
### Chaining
Filters can be chained together to produce advanced queries. For example:
```dart
final res = await supabase
.from('cities')
.select('name, country_id')
.gte('population', 1000)
.lt('population', 10000)
.execute();
```
@@ -0,0 +1,13 @@
---
id: using-modifiers
title: "Using Modifiers"
slug: using-modifiers
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/dart.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Modifiers can be used on `select()` queries.
If a Stored Procedure returns a table response, you can also apply modifiers to the `rpc()` function.
@@ -1,7 +0,0 @@
---
id: release-notes
---
# Release Notes
Start your release notes here.
@@ -1,115 +0,0 @@
---
id: usage
title: Usage
---
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
Supabase Dart.
<!-- AUTOGENERATED: DO NOT EDIT DIRECTLY IF THIS IS VERSION "next" -->
## Initializing the client library
```dart
final supabase = SupabaseClient('<SUPABASE_URL>', '<SUPABASE_ANON_KEY>');
```
### Attributes
### Notes
## Dart
You can initialize a new Supabase client using the `SupabaseClient()` method.
The Supabase client is your entrypoint to the rest of the Supabase functionality
and is the easiest way to interact with everything we offer within the Supabase ecosystem.
## Flutter
For `supabase_flutter`, you will be using the static `initialize()` method on `Supabase` class.
### Examples
####
```dart
final supabase = SupabaseClient('https://xyzcompany.supabase.co', 'public-anon-key');
```
####
```dart title="main.dart"
Future<void> main() async {
await Supabase.initialize(url: 'https://xyzcompany.supabase.co', anonKey: 'public-anon-key');
runApp(MyApp());
}
```
## Create a new user.
```dart
final res = await supabase.auth.signUp('<USER_EMAIL>', '<USER_PASSWORD>');
```
### Attributes
### Notes
- By default, the user will need to verify their email address before logging in. If you would like to change this, you can disable "Email Confirmations" by going to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
- If "Email Confirmations" is turned on, a user is returned but session will be null
- If "Email Confirmations" is turned off, both a `user` and a `session` will be returned
- When the user confirms their email address, they will be redirected to localhost:3000 by default. To change this, you can go to Authentication -> Settings on [app.supabase.com](https://app.supabase.com)
### Examples
#### Sign up.
```dart
final res = await supabase.auth.signUp('example@email.com', 'example-password');
final user = res.data?.user;
final error = res.error;
```
#### Sign up with third-party providers.
```dart
// Use signInWithProvider()
```
@@ -1,3 +0,0 @@
{
"goTrueSidebar": ["intro", "usage", "release-notes"]
}
+1 -1
View File
@@ -1 +1 @@
["1.0"]
[]
+2 -2
View File
@@ -1,9 +1,9 @@
---
slug: /
sidebar_position: 1
sidebar_label: Introduction
sidebar_label: Supabase JavaScript Library
---
# Supabase JavaScript Client
# Supabase JavaScript Library
Some docs
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,148 @@
---
id: auth-api-createuser
title: "createUser()"
slug: auth-api-createuser
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Creates a new user.
This function should only be called on a server. Never expose your `service_role` key in the browser.
<Tabs
defaultValue="js"
groupId="reference/supabase-js"
values={[{ label: 'JavaScript', value: 'js' }]}>
<TabItem value="js">
```js
const { data: user, error } = await supabase.auth.api.createUser({
email: 'user@email.com',
password: 'password',
user_metadata: { name: 'Yoda' }
})
```
</TabItem>
</Tabs>
## Parameters
<ul className="method-list-group">
<li className="method-list-item">
<h4 className="method-list-item-label">
<span className="method-list-item-label-name">
attributes
</span>
<span className="method-list-item-label-badge required">
required
</span>
<span className="method-list-item-validation">
<code>AdminUserAttributes</code>
</span>
</h4>
<div class="method-list-item-description">
The data you want to create the user with.
</div>
</li>
</ul>
## Notes
- Requires a `service_role` key.
- This function should be called on a server. Never expose your `service_role` key in the browser.
- If you do not provide the `email_confirm` and `phone_confirm` options to this function, both will default to false.
## Examples
### Create a new user.
<Tabs
defaultValue="js"
groupId="reference/supabase-js"
values={[{ label: 'JavaScript', value: 'js' }]}>
<TabItem value="js">
```js
const { data: user, error } = await supabase.auth.api.createUser({
email: 'user@email.com',
password: 'password',
user_metadata: { name: 'Yoda' }
})
```
</TabItem>
</Tabs>
### Auto-confirm email.
<Tabs
defaultValue="js"
groupId="reference/supabase-js"
values={[{ label: 'JavaScript', value: 'js' }]}>
<TabItem value="js">
```js
const { data: user, error } = await supabase.auth.api.createUser({
email: 'user@email.com',
email_confirm: true
})
```
</TabItem>
</Tabs>
### Auto-confirm phone.
<Tabs
defaultValue="js"
groupId="reference/supabase-js"
values={[{ label: 'JavaScript', value: 'js' }]}>
<TabItem value="js">
```js
const { data: user, error } = await supabase.auth.api.createUser({
phone: '1234567890',
phone_confirm: true
})
```
</TabItem>
</Tabs>
@@ -0,0 +1,97 @@
---
id: auth-api-deleteuser
title: "deleteUser()"
slug: auth-api-deleteuser
custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Delete a user. Requires a `service_role` key.
This function should only be called on a server. Never expose your `service_role` key in the browser.
<Tabs
defaultValue="js"
groupId="reference/supabase-js"
values={[{ label: 'JavaScript', value: 'js' }]}>
<TabItem value="js">
```js
const { data: user, error } = await supabase.auth.api.deleteUser(
'715ed5db-f090-4b8c-a067-640ecee36aa0'
)
```
</TabItem>
</Tabs>
## Parameters
<ul className="method-list-group">
<li className="method-list-item">
<h4 className="method-list-item-label">
<span className="method-list-item-label-name">
uid
</span>
<span className="method-list-item-label-badge required">
required
</span>
<span className="method-list-item-validation">
<code>string</code>
</span>
</h4>
<div class="method-list-item-description">
The user uid you want to remove.
</div>
</li>
</ul>
## Notes
- Requires a `service_role` key.
- This function should be called on a server. Never expose your `service_role` key in the browser.
## Examples
### Remove a user completely.
<Tabs
defaultValue="js"
groupId="reference/supabase-js"
values={[{ label: 'JavaScript', value: 'js' }]}>
<TabItem value="js">
```js
const { data: user, error } = await supabase.auth.api.deleteUser(
'715ed5db-f090-4b8c-a067-640ecee36aa0'
)
```
</TabItem>
</Tabs>
Loaded 100 of 302 files, more files were not shown because too many files have changed in this diff. Show more