Progress Indicators

Use notifications to display progress on activities within your application.

Notifications can display progress indicators to show users a status of an ongoing operation, for example, the progress of file being uploaded/download.

Progress indicators can be added alongside other notification options, and can be updated many times to show realtime progress.

Creating a progress indicator

To create a notification with a progress indicator, a progress object can be attached to the notifications android object:

notifee.displayNotification({
  android: {
    progress: {
      max: 10,
      current: 5,
    },
  },
});

The max value indicates the maximum value of the progress bar. The current indicating the current progress value. The values can be any positive integer, and the current value cannot be greater than the max.

Indeterminate progress

In some scenarios, it may not be possible to determine the overall progress of an ongoing operation. It is also possible to show an indeterminate (unknown) progress state, where the progress indicator is in a state of flux (animating left-to-right) until it is removed by the user. This can be achieved using the indeterminate flag:

notifee.displayNotification({
  android: {
    progress: {
      max: 10,
      current: 5,
      indeterminate: true,
    },
  },
});

If indeterminate is true, any max and current values will be ignored.

Updating a progress indicator

In most cases, you'll want to handle the progress "complete" status of a notification.

To update a notification, use the unique ID generated when creating the notification for the first time. The following example upload task event handler updates an existing notification (using the id) each time a new event.

onUploadTaskEvent(async (event, upload) => {
  if (event.status === 'start') {
    await notifee.displayNotification({
      id: upload.id,
      android: {
        progress: {
          max: upload.size,
          current: 0,
        },
      },
    });
  }

  if (event.status === 'update') {
    await notifee.displayNotification({
      id: upload.id,
      android: {
        progress: {
          max: upload.size,
          current: upload.current,
        },
      },
    });
  }

  if (upload.size === upload.current) {
    await notifee.displayNotification({
      id: upload.id,
      title: 'Finalizing upload...',
      android: {
        progress: {
          indeterminate: true,
        },
      },
    });
  }

  if (event.status === 'complete') {
    await notifee.cancelNotification(upload.id);
  }
});

Displaying multiple notifications will also cause the device to notify the user multiple times (e.g. a sound for each update). Use the onlyAlertOnce property to only alert the user the first time a notification is displayed:

notifee.displayNotification({
  title: 'Updating',
  android: {
    onlyAlertOnce: true,
  },
});