Flutter
Full SDK reference for using PowerSync in Flutter/Dart clients
PowerSync SDK on pub.dev
The SDK is distributed via pub.dev [External link].
Source Code
Refer to the powersync.dart repo on GitHub.
API Reference
Full API reference for the PowerSync SDK [External link].
Example Projects
Gallery of example projects/demo apps built with Flutter and PowerSync.
SDK Features
- Provides real-time streaming of database changes.
- Offers direct access to the SQLite database, enabling the use of SQL on both client and server sides.
- Operations are asynchronous by default, ensuring the user interface remains unblocked.
- Supports concurrent database operations, allowing one write and multiple reads simultaneously.
- Enables subscription to queries for receiving live updates.
- Eliminates the need for client-side database migrations as these are managed automatically.
Web support is currently in an alpha release. Refer to Flutter Web Support (Alpha) for more details.
Installation
See the SDK’s README for installation instructions.
Getting Started
Before implementing the PowerSync SDK in your project, make sure you have completed these steps:
- Signed up for a PowerSync Cloud account (here) or self-host PowerSync.
- Configured your backend database and connected it to your PowerSync instance.
- Installed the PowerSync Flutter SDK.
1. Define the Schema
The first step is defining the schema for the local SQLite database. This will be provided as a schema
parameter to the PowerSyncDatabase constructor.
This schema represents a “view” of the downloaded data. No migrations are required — the schema is applied directly when the PowerSync database is constructed.
The types available are text
, integer
and real
. These should map directly to the values produced by the Sync Rules. If a value doesn’t match, it is cast automatically. For details on how Postgres types are mapped to the types below, see the section on Types in the Sync Rules documentation.
Example:
Note: No need to declare a primary key id
column, as PowerSync will automatically create this.
2. Instantiate the PowerSync Database
Next, you need to instantiate the PowerSync database — this is the core managed client-side database.
Its primary functions are to record all changes in the local database, whether online or offline. In addition, it automatically uploads changes to your app backend when connected.
To instantiate PowerSyncDatabase
, inject the Schema you defined in the previous step and a file path — it’s important to only instantiate one instance of PowerSyncDatabase
per file.
Example:
Once you’ve instantiated your PowerSync database, you will need to call the connect() method to activate it. This method requires the backend connector that will be created in the next step.
3. Integrate with your Backend
The PowerSync backend connector provides the connection between your application backend and the PowerSync client-slide managed SQLite database.
It is used to:
- Retrieve an auth token to connect to the PowerSync instance.
- Apply local changes on your backend application server (and from there, to Postgres)
Accordingly, the connector must implement two methods:
- PowerSyncBackendConnector.fetchCredentials - This is called every couple of minutes and is used to obtain credentials for your app backend API. -> See Authentication Setup for instructions on how the credentials should be generated.
- PowerSyncBackendConnector.uploadData - Use this to upload client-side changes to your app backend. -> See Writing Client Changes for considerations on the app backend implementation.
Example:
Using PowerSync: CRUD functions
Once the PowerSync instance is configured you can start using the SQLite DB functions.
The most commonly used CRUD functions to interact with your SQLite data are:
- PowerSyncDatabase.get - get (SELECT) a single row from a table.
- PowerSyncDatabase.getAll - get (SELECT) a set of rows from a table.
- PowerSyncDatabase.watch - execute a read query every time source tables are modified.
- PowerSyncDatabase.execute - execute a write (INSERT/UPDATE/DELETE) query.
Fetching a Single Item
The get method executes a read-only (SELECT) query and returns a single result. It throws an exception if no result is found. Use getOptional to return a single optional result (returns null
if no result is found).
Querying Items (PowerSync.getAll)
The getAll method returns a set of rows from a table.
Watching Queries (PowerSync.watch)
The watch method executes a read query whenever a change to a dependent table is made.
Mutations (PowerSync.execute)
The execute method can be used for executing single SQLite write statements.
Additional Usage Examples
See Usage Examples for further examples of the SDK.
ORM Support
See Flutter ORM Support for details.
Troubleshooting
See Troubleshooting for pointers to debug common issues.
Was this page helpful?