History Entries
Every successful send (outside of incognito mode) writes aHistoryEntryEntity to local SQLite storage. The entity records the following fields:
The history list is rendered from
recentHistoryStreamProvider, which watches watchRecentHistory(workspaceId) and re-emits whenever a new entry is added or an entry is deleted.
Each history card displays the status code in a colour-coded badge (green for 2xx, red otherwise), the HTTP method label in its method colour, the URL truncated to a single line, the human-readable time (e.g. 14:32 for today, Jun 12 for older entries), and the duration in milliseconds.
Replaying a Request
Tap any history card to load the request into a new composer tab:1
Tap the history entry
Tapping a
_HistoryItem card triggers _loadHistoryItem, which creates a new tab via tabsProvider.notifier.addTab().2
Session state is populated
The new tab’s
RequestSessionController is seeded with the entry’s method and originalUrl (the un-substituted template, so variables remain editable).3
Composer opens
The app navigates to the composer (
AppRoutes.composer) and activates the new tab. A snackbar confirms “Request loaded in new tab”.Clearing History
1
Tap the sweep icon
Tap the Delete Sweep (🧹) icon in the History screen app bar.
2
Confirm
A confirmation dialog warns that the action cannot be undone. Tap Clear to proceed.
3
History is wiped
clearHistory(workspaceId) removes all entries scoped to the active workspace. To remove history across every workspace at once, call clearAllHistory() from the repository directly.deleteHistoryEntry(entry). A snackbar with an Undo action appears immediately — tapping it calls restoreHistoryEntry(entry) to reinstate the record.
History is stored locally in SQLite and is not included in cloud sync by default. Clearing history on one device does not affect history on any other device.
Incognito Mode
Enable Incognito Mode from the composer toolbar to send requests without recording them in history. While incognito is active:- Requests are dispatched and responses are shown normally.
- The
RequestControllerreadsref.read(isIncognitoProvider)after every send; if the value istrue, theaddHistoryItem(...)call is skipped entirely. - No entry appears in the History screen.
isIncognitoProvider is a NotifierProvider<BooleanNotifier, bool> that defaults to false. BooleanNotifier exposes set(bool) and toggle() to change the value. The provider is not persisted — incognito mode resets to false each time the app starts.
Saved Requests
Requests bookmarked from the composer are stored asSavedRequestEntity records and displayed in the Saved Requests screen (accessible from the Collections tab). Saving calls createRequest(name, method, url, body, collectionId) on XoloRepository, persisting the full request definition including headers, params, body, auth type, auth data, scripts, and assertions.
From the Saved Requests screen you can:
- Open a saved request by tapping it — a new composer tab is opened and pre-populated with the request’s method, URL, body, and name.
- Delete a saved request via the context menu —
softDeleteRequest(id)marks the record as deleted without immediately purging it from storage. - Move a request to a different collection via drag-and-drop onto a folder card; the drop calls
moveRequest(requestId, collectionId). - Browse unclassified requests — requests saved without a collection land in the Unclassified section at the bottom of the screen.
Workspace Isolation
Both history and saved requests are scoped to the active workspace. TherecentHistoryStreamProvider passes the current activeWorkspaceIdProvider value to watchRecentHistory(workspaceId?):
null as the workspace ID returns history from the global context (no project selected). Switching the active workspace automatically re-subscribes the provider and refreshes the history list.