Skip to main content
Version: Next 🚧

Feedback UI

Fedo ships two UI entry points on each platform:

Android (Compose)iOS (SwiftUI)
Full feedback board (list, details, editor)FedoFeedbackScreen()FedoFeedbackView()
Submission-only sheetFedoCreateFeedbackSheet().presentFedoCreateFeedback(isPresented:)

Signature​

@Composable
fun FedoFeedbackScreen(
modifier: Modifier = Modifier,
onDismiss: () -> Unit,
)
ParameterTypeDescription
modifierModifierCompose modifier for sizing/padding
onDismiss() -> UnitCalled when user navigates back from the root screen

Screens​

The board manages its own internal navigation with three screens (identical on both platforms):

1. Feedback List​

  • Shows feedback items in a vertical list with pull-to-refresh
  • Status filter tabs: All, In review, Planned, In progress, Done, Closed (each with a count on iOS)
  • FAB to create new feedback
  • Vote buttons on each item
Fedo feedback board on Android: feature request list with vote counts and status filter tabs

Android

Fedo feedback board on iOS: feature request list with vote counts and status filter tabs

iOS

The board follows each platform's own conventions, so Android and iOS look different by design.

2. Feedback Details​

  • Full feedback description
  • Threaded comments section
  • Vote on the feedback
  • Edit/delete own feedback (when status allows)
  • Reply to existing comments
Fedo feedback details on Android: status badge, title, description, author and date, votes button, comments list with a You badge, and an Add a comment field

Android

3. Feedback Editor​

  • Create new feedback (title + description)
  • Edit existing feedback (pre-populated fields)
  • Validation before submit
Fedo feedback editor on Android in edit mode: close button, Update button, title field with 21/200 counter, optional details field with 0/5000 counter, and a Posts go to the team for review note

Android

Back navigation is automatic. On Android:

  • Editor → Details / List
  • Details → List
  • List → onDismiss fires

The onDismiss lambda is only called when the user presses back on the root list screen. Your app handles this by popping its own navigation stack.

On iOS there is no onDismiss: FedoFeedbackView pushes onto your NavigationStack, so the system back button pops it for you.

State handling​

The screen handles loading, error, and empty states internally. No extra UI work needed.

If the SDK has not been initialized, FedoFeedbackScreen() renders a full-screen "Fedo not initialized" placeholder in place of the board. It does not crash.


Feedback Sheet​

The submission sheet is built per platform. On Android, FedoCreateFeedbackSheet() renders a self-contained creation form (title + details fields) as a ModalBottomSheet, with its own submit state and validation - no navigation setup or FedoFeedbackScreen() host required. On iOS, the equivalent is the .presentCreateFeedback(isPresented:) view modifier, which presents the same sheet without requiring a NavigationStack or FedoFeedbackView host. Use it when you want a lightweight "suggest a feature" entry point (e.g. from a menu or FAB) instead of the full feedback flow.

Signature​

@Composable
fun FedoCreateFeedbackSheet(
onDismiss: () -> Unit,
modifier: Modifier = Modifier,
)
ParameterTypeDescription
onDismiss() -> UnitCalled when the sheet is dismissed by the user (swipe/scrim/close button) or automatically after a successful submit
modifierModifierCompose modifier applied to the ModalBottomSheet container

There's no visible param - toggle composition yourself:

@Composable
fun MyScreen() {
var showFeedbackSheet by remember { mutableStateOf(false) }

Button(onClick = { showFeedbackSheet = true }) {
Text("Suggest a feature")
}

if (showFeedbackSheet) {
FedoCreateFeedbackSheet(
onDismiss = { showFeedbackSheet = false }
)
}
}

On success, the form is replaced with a brief thank-you message before the sheet auto-dismisses, which fires onDismiss.

info

If Fedo.initialize has not been called, FedoCreateFeedbackSheet() shows the same "Fedo not initialized" error inside the sheet, while FedoFeedbackScreen() shows it full-screen. On both platforms, calls to user-management methods (setUserID, setUserEmail, etc.) are silent no-ops — they do not throw.

Fedo create-feedback bottom sheet on Android: submission form with title and details fields

Android