<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mobile (genie_ai_mobile) on GENIE.AI</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/mobile/</link><description>Recent content in Mobile (genie_ai_mobile) on GENIE.AI</description><generator>Hugo</generator><language>en</language><atom:link href="https://genie-ai-7e342b.opensource.unicc.org/docs/mobile/index.xml" rel="self" type="application/rss+xml"/><item><title>Ui Component Inventory Mobile</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/mobile/ui-component-inventory-mobile/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/mobile/ui-component-inventory-mobile/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;For mobile developers.&lt;/strong&gt; A reference catalogue of the Flutter app widgets.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="summary"&gt;Summary&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Total Dart Files&lt;/strong&gt;: 76&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UI Components&lt;/strong&gt;: 14&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design System Components&lt;/strong&gt;: 6&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design System Tokens&lt;/strong&gt;: 5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Services&lt;/strong&gt;: 12&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Config&lt;/strong&gt;: 5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;i18n Locales&lt;/strong&gt;: 13&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="design-system-libdesign_system"&gt;Design System (&lt;code&gt;lib/design_system/&lt;/code&gt;)&lt;/h2&gt;
&lt;h3 id="ds-components-libdesign_systemcomponents"&gt;DS Components (&lt;code&gt;lib/design_system/components/&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ds_button.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Button primitive with variants (primary, secondary, ghost, danger)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ds_card.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Container card with elevation and border radius&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ds_input.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Text input field with label, validation states, and error messaging&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ds_modal.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Modal dialog overlay with content slot&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ds_spinner.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Loading spinner animation (circular progress indicator)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ds_state_display.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Empty/error/loading state display component&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ds-tokens-libdesign_systemtokens"&gt;DS Tokens (&lt;code&gt;lib/design_system/tokens/&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Token File&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;app_tokens.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Global design tokens (typography, colors, spacing scale)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;color_utils.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Color utilities (lighten, darken, opacity, theme mapping)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;spacing.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Spacing scale constants (xs, sm, md, lg, xl)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;radii.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Border radius tokens (sm, md, lg, xl, full)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="ds-theme-libdesign_systemtheme"&gt;DS Theme (&lt;code&gt;lib/design_system/theme/&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;File&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;app_theme.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Material theme configuration (light/dark, color schemes)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="chat-components-libcomponentschat"&gt;Chat Components (&lt;code&gt;lib/components/chat/&lt;/code&gt;)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;chatbot_component.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Main chat interface with message list and input area&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;right_sidebar_component.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Right sidebar displaying context, documents, or service info&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;chat_response_feedback_dialog.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Feedback dialog for rating chat responses (thumbs up/down)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;web_file_utils.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;File utility functions for web platform&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;stub_file_utils.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;File utility stubs for non-web platforms&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;right_sidebar_stub.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Stub implementation for right sidebar (conditional compilation)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="sidebar-components-libcomponentssidebar"&gt;Sidebar Components (&lt;code&gt;lib/components/sidebar/&lt;/code&gt;)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sidebar_component.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Left sidebar with conversation history and navigation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;chat_folders_panel.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Conversation folder management (create, rename, delete)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;service_tree_panel.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Hierarchical tree view of service categories&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="authentication-components-libcomponentsauth"&gt;Authentication Components (&lt;code&gt;lib/components/auth/&lt;/code&gt;)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;oidc_login_screen.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;OIDC login screen with Keycloak authentication flow&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="user-components-libcomponentsuser"&gt;User Components (&lt;code&gt;lib/components/user/&lt;/code&gt;)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;user_profile_component.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;User profile display and edit form&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="settings-components-libcomponentssettings"&gt;Settings Components (&lt;code&gt;lib/components/settings/&lt;/code&gt;)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;settings_component.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Application settings panel (theme, language, preferences)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;about_screen.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;About screen with app version, license, and links&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="shared-components-libcomponentsshared"&gt;Shared Components (&lt;code&gt;lib/components/shared/&lt;/code&gt;)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;nav_bar_component.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Bottom navigation bar (mobile app navigation)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;confirm_dialog.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generic confirmation dialog (confirm/cancel actions)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;language_selector.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Language selection dropdown for i18n&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="application-structure-libsrc"&gt;Application Structure (&lt;code&gt;lib/src/&lt;/code&gt;)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;File&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;app.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Root app widget with router and global providers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sample_feature/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Sample feature code (Flutter template, may be unused)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;settings/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Settings controller and service (legacy, may be unused)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;localization/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;App localization delegates&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="services-libservices"&gt;Services (&lt;code&gt;lib/services/&lt;/code&gt;)&lt;/h2&gt;
&lt;h3 id="authentication-services-libservicesauth"&gt;Authentication Services (&lt;code&gt;lib/services/auth/&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Service&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;app_auth.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Authentication state management and token handling&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;auth_interceptor.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;HTTP request interceptor for auth token injection&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;auth_logger.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Authentication event logging&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;auth_notifier.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Authentication state change notifications&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;auth_state.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Authentication state enum and data classes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;auth_providers.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Riverpod providers for auth services&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;token_storage.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Secure token storage (Keychain/Keystore)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;connectivity_checker.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Network connectivity status checker&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;network_error_classifier.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Network error classification and retry logic&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;insecure_http_client.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;HTTP client for dev environments (bypasses SSL)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="other-services-libservices"&gt;Other Services (&lt;code&gt;lib/services/&lt;/code&gt;)&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Service&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;keycloak/keycloak_service.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Keycloak OIDC service wrapper&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;connectivity_service.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Network connectivity monitoring&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;notification_service.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Push notification handling&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;user_service.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;User profile and preferences service&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;i18n_service.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Internationalization service&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;genie_ai_config.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;GENIE.AI configuration loader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;fallback_localizations.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Fallback localization delegates&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sse_parser.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Server-Sent Events (SSE) stream parser&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="configuration-libconfig"&gt;Configuration (&lt;code&gt;lib/config/&lt;/code&gt;)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;File&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;keycloak_config.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Keycloak OIDC client configuration&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dev_config.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Development environment configuration&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;staging_config.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Staging environment configuration&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;e2e_config.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;E2E testing configuration&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;flavors/itu.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;ITU flavor-specific configuration&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;flavors/template.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Flavor configuration template&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="providers-libproviders"&gt;Providers (&lt;code&gt;lib/providers/&lt;/code&gt;)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;File&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;api_providers.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Riverpod providers for API clients&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="utilities-libutils"&gt;Utilities (&lt;code&gt;lib/utils/&lt;/code&gt;)&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;File&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;theme_manager.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Theme switching and persistence&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;chart_theme_utils.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Chart theme utilities (for analytics charts)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;dialog_theme_utils.dart&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Dialog theme utilities&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="internationalization-libi18nlocales"&gt;Internationalization (&lt;code&gt;lib/i18n/locales/&lt;/code&gt;)&lt;/h2&gt;
&lt;p&gt;Supported languages (14 locales):&lt;/p&gt;</description></item><item><title>Mobile Architecture</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/mobile/mobile-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/mobile/mobile-architecture/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;For mobile developers and integrators.&lt;/strong&gt; The Flutter app&amp;rsquo;s architecture — layers, state, and platform integration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;The Flutter mobile app (&lt;code&gt;genie_ai_mobile&lt;/code&gt;) is a sophisticated AI chat application with OIDC authentication, multi-language support, and responsive design patterns.&lt;/p&gt;
&lt;h2 id="1-api-layer"&gt;1. API Layer&lt;/h2&gt;
&lt;h3 id="service--provider-layer"&gt;Service &amp;amp; Provider Layer&lt;/h3&gt;
&lt;p&gt;The app does &lt;strong&gt;not&lt;/strong&gt; use a proxy pattern. API access is structured around
Riverpod providers and a thin set of domain services:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Riverpod providers&lt;/strong&gt; (&lt;code&gt;lib/providers/api_providers.dart&lt;/code&gt;) — define the API
calls (chat/query, feedback, user profile, analytics, admin) as providers
consumed by the UI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain services&lt;/strong&gt; (&lt;code&gt;lib/services/&lt;/code&gt;):
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;user_service.dart&lt;/code&gt; — user profile operations.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;connectivity_service.dart&lt;/code&gt; — network connectivity state.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;i18n_service.dart&lt;/code&gt; — locale and translation orchestration.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;notification_service.dart&lt;/code&gt;, &lt;code&gt;sse_parser.dart&lt;/code&gt;, &lt;code&gt;genie_ai_config.dart&lt;/code&gt;,
&lt;code&gt;fallback_localizations.dart&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;auth/&lt;/code&gt; and &lt;code&gt;keycloak/&lt;/code&gt; subdirectories — OIDC auth state, token storage,
and Keycloak integration.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The flavor-specific base URL comes from the flavor config (see §2).&lt;/p&gt;</description></item><item><title>Mobile Deployment Guide</title><link>https://genie-ai-7e342b.opensource.unicc.org/docs/mobile/mobile-deployment-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://genie-ai-7e342b.opensource.unicc.org/docs/mobile/mobile-deployment-guide/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;This guide walks deployment technicians through creating a new institutional deployment of the GENIE.AI mobile app. Each deployment produces a dedicated build with its own app ID, Keycloak client, backend URL, and deep link scheme — all compiled at build-time via Flutter flavors.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Target audience:&lt;/strong&gt; Deployment technicians familiar with Flutter, Gradle, Xcode, and Docker.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estimated time:&lt;/strong&gt; Under a day for a single deployment.&lt;/p&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Requirement&lt;/th&gt;
 &lt;th&gt;Purpose&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Flutter SDK 3.10+&lt;/td&gt;
 &lt;td&gt;Build the mobile app&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Android Studio (with SDK)&lt;/td&gt;
 &lt;td&gt;Android builds, Gradle, emulator&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Xcode 14+ (macOS only)&lt;/td&gt;
 &lt;td&gt;iOS builds, signing, IPA creation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Docker + Docker Compose&lt;/td&gt;
 &lt;td&gt;Run Keycloak locally for testing&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Device or emulator&lt;/td&gt;
 &lt;td&gt;End-to-end validation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Access to deployment &lt;code&gt;.env&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Configure Keycloak client and redirect scheme&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Keystore for Android signing&lt;/td&gt;
 &lt;td&gt;Release builds (see &lt;a href="https://genie-ai-7e342b.opensource.unicc.org/docs/mobile/mobile-deployment-guide/#step-5-android-signing"&gt;Step 5: Android Signing&lt;/a&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="step-1-environment-variables"&gt;Step 1: Environment Variables&lt;/h2&gt;
&lt;p&gt;Add two required variables to the deployment &lt;code&gt;.env&lt;/code&gt; file:&lt;/p&gt;</description></item></channel></rss>