Flutter: Subscribe to channel

Subscribe to realtime changes in your database.

Examples

Listen to database changes

supabase
    .channel('public:countries')
    .onPostgresChanges(
        event: PostgresChangeEvent.all,
        schema: 'public',
        table: 'countries',
        callback: (payload) {
          print('Change received: ${payload.toString()}');
        })
    .subscribe();

Listen to inserts

supabase
    .channel('public:countries')
    .onPostgresChanges(
        event: PostgresChangeEvent.insert,
        schema: 'public',
        table: 'countries',
        callback: (payload) {
          print('Change received: ${payload.toString()}');
        })
    .subscribe();

Listen to updates

supabase
    .channel('public:countries')
    .onPostgresChanges(
        event: PostgresChangeEvent.update,
        schema: 'public',
        table: 'countries',
        callback: (payload) {
          print('Change received: ${payload.toString()}');
        })
    .subscribe();

Listen to deletes

supabase
    .channel('public:countries')
    .onPostgresChanges(
        event: PostgresChangeEvent.delete,
        schema: 'public',
        table: 'countries',
        callback: (payload) {
          print('Change received: ${payload.toString()}');
        })
    .subscribe();

Listen to multiple events

supabase
    .channel('public:countries')
    .onPostgresChanges(
        event: PostgresChangeEvent.insert,
        schema: 'public',
        table: 'countries',
        callback: (payload) {
          print('Insert event received: ${payload.toString()}');
        })
    .onPostgresChanges(
        event: PostgresChangeEvent.delete,
        schema: 'public',
        table: 'countries',
        callback: (payload) {
          print('Delete event received: ${payload.toString()}');
        })
    .subscribe();

Listen to row level changes

supabase
    .channel('public:countries:id=eq.200')
    .onPostgresChanges(
        event: PostgresChangeEvent.delete,
        schema: 'public',
        table: 'countries',
        filter: PostgresChangeFilter(
          type: PostgresChangeFilterType.eq,
          column: 'id',
          value: 200,
        ),
        callback: (payload) {
          print('Change received: ${payload.toString()}');
        })
    .subscribe();

Listen to broadcast messages

supabase
    .channel('room1')
    .onBroadcast(
        event: 'cursor-pos',
        callback: (payload) {
          print('Cursor position received!: $payload');
        })
    .subscribe();

Listen to presence events

final channel = supabase.channel('room1');

channel.onPresenceSync((payload) {
  print('Synced presence state: ${channel.presenceState()}');
}).onPresenceJoin((payload) {
  print('Newly joined presences $payload');
}).onPresenceLeave((payload) {
  print('Newly left presences: $payload');
}).subscribe((status, error) async {
  if (status == RealtimeSubscribeStatus.subscribed) {
    await channel.track({'online_at': DateTime.now().toIso8601String()});
  }
});