flutter-pocketbase-sync

command module
v0.0.0-...-7b58ecc Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 23, 2024 License: Apache-2.0 Imports: 14 Imported by: 0

README

drift-pocketbase-sync

This is a simple Flutter project that demonstrates how to sync a Pocketbase database with a Flutter SQLite database via drift without using a CRDT.

Getting Started

Run the server
make dev 
Create an admin account

Create an admin account for testing:

  • Username: admin@email.com
  • Password: admin123456
Import the collections

Import the pb_schema.json file into your Pocketbase admin dashboard.

Run the tests
flutter test

Update the generated code

After making any changes to the schema in Pocketbase, you need to regenerate the client code.

The client needs to be in sync with the server to ensure schema alignment.

Regenerate the client schema

To update the generated code, run the following command:

make generate

This will run the generate command, which you can change the admin username and password variables in the Makefile.

Drift does support schema migrations, see the documentation for more information.

FAQ

Why not use a CRDT?

CRDTs are great for eventual consistency, but they can be complex to implement and maintain. This project demonstrates how to sync a Pocketbase database with a Flutter SQLite database without using a CRDT by using a simple sync algorithm since the PocketBase server is a single source of truth and the date time for created/updated are always in order.

How do I generate new IDs on the client?

The code for generating a new ID is take directly from the Pocketbase codebase.

final id = Database.newId();
How do I sync the data?

To sync the data call the sync command:

final Database db = ...;
final PocketBase pb = ...;
final service = SyncService(db, pb);
await service.syncCollections();

This will first check for any new deletes and remove them from the local database.

Then it will check for any new or updated records and add them to the local database.

Finally, it will check the local database for any new or updated records and add them to the Pocketbase database.

How are deletes handled?

Deletes are soft deletes first on both the server and the client. There is a hook to add the deleted record to a special table for later cleanup.

This table is cleaned up after a certain period of time.

Can I use this with a precompiled Pocketbase database?

No, this requires extending the PocketBase server with go. It might be possible with pb_hooks and JS.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL