bottomSheetStatusMenu static method

StatusMenuCallback bottomSheetStatusMenu({
  1. required Auth auth,
})

Default status menu showing modal bottom sheet with standard items.

Shows connection status, sync actions, and sign out option.

Implementation

static StatusMenuCallback bottomSheetStatusMenu({
  required Auth auth,
}) {
  return (
    BuildContext context, {
    required LocordaStatusState state,
    required VoidCallback onTriggerSync,
    required VoidCallback onTriggerDisconnect,
  }) {
    final l10n = LocordaUILocalizations.of(context)!;

    // Build menu items
    final menuItems = <Widget>[
      // Status header
      ListTile(
        leading: Icon(
          state.isAuthenticated ? Icons.cloud_done : Icons.cloud_off,
          color: state.isAuthenticated ? Colors.green : Colors.grey,
        ),
        title:
            Text(state.isAuthenticated ? l10n.connected : l10n.notConnected),
        subtitle:
            auth.userDisplayName != null ? Text(auth.userDisplayName!) : null,
      ),
      const Divider(),

      // Error display if present
      if (state.hasError) ...[
        ListTile(
          leading: const Icon(Icons.error_outline, color: Colors.red),
          title: Text(l10n.syncError),
          subtitle: Text(
            state.errorMessage ?? l10n.syncError,
            style: const TextStyle(fontSize: 12),
          ),
        ),
        const Divider(),
      ],

      // Sync action (Retry or Sync Now depending on state)
      if (state.hasError)
        ListTile(
          leading: const Icon(Icons.refresh),
          title: Text(l10n.retrySync),
          enabled: !state.isSyncing,
          onTap: state.isSyncing
              ? null
              : () {
                  Navigator.pop(context);
                  onTriggerSync();
                },
        )
      else
        ListTile(
          leading: const Icon(Icons.sync),
          title: Text(l10n.syncNow),
          enabled: !state.isSyncing,
          onTap: state.isSyncing
              ? null
              : () {
                  Navigator.pop(context);
                  onTriggerSync();
                },
        ),

      const Divider(),

      // Sign out
      ListTile(
        leading: const Icon(Icons.logout),
        title: Text(l10n.signOut),
        onTap: () {
          Navigator.pop(context);
          onTriggerDisconnect();
        },
      ),
    ];

    showModalBottomSheet(
      context: context,
      builder: (context) => Container(
        padding: const EdgeInsets.all(16),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: menuItems,
        ),
      ),
    );
  };
}