--- id: user_presence sidebar_position: 5 title: User Presence --- User presence allows you to show when a user was last active and if they are online right now. Whenever you read a user the data will look like this: ```json { id: 'unique_user_id', online: true, status: 'Eating a veggie burger...', last_active: '2019-01-07T13:17:42.375Z' } ``` Notes: 1. The online field indicates if the user is online. The status field stores text indicating the current user status. 2. The last_active field is updated when a user connects and then refreshed every 15 minutes. ### Invisible To mark a user invisible simply set the invisible property to true. You can also set a custom status message at the same time: ```dart await client.connectUser( User( id: 'super-band-9', extraData: { 'invisible': true, }, ), 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoic3VwZXItYmFuZC05In0.0L6lGoeLwkz0aZRUcpZKsvaXtNEDHBcezVTZ0oPq40A', ); ``` Notes: 1. When invisible is set to true, the current user will appear as offline to other users. ### Listening to Presence Changes Of course, you want to listen to the user presence changes. This allows you to show a user as offline when they leave and update their status in real time. These 3 endpoints allow you to watch user presence: ```dart // If you pass presence: true to channel.watch it will watch the list of user presence changes. // Note that you can listen to at most 10 users using this API call final channel = client.channel( 'messaging', id: 'flutterdevs', extraData: { 'name': 'Flutter devs', }, ); await channel.watch({ 'presence': true, }); // queryChannels allows you to listen to the members of the channels that are returned // so this does the same thing as above and listens to online status changes for john and jack final filter = Filter.in_('members', ['john']); final sort = [SortOption("last_message_at", direction: SortOption.DESC)]; final channels = await client.queryChannels( filter: filter, sort: sort, options: { 'presence': true, }, ); // queryUsers allows you to listen to user presence changes for john and jack final result = await client.queryUsers( filter: Filter.in_('id', ['john', 'jack', 'jessie']), sort: [SortOption('last_active')], pagination: PaginationParams( offset: 0, limit: 20, ), options: { 'presence': true, }, ); ```