App Session¶
Source: ui/app_session.py
Process-wide runtime services: the live Page, the shared export FilePicker,
the session TtsService, a lazily created flet_audio.Audio player (mounted
on first speak, never with an empty src), and a temporary navigation lock
for drawer / bottom bar / FAB. A newer speak takes over the remaining
slash-separated playlist; the current clip is not paused or stopped. Repeating
the same cached file skips remounting and the load wait so the speaker can
replay immediately. Not a general store for form fields or domain data — see
State and persistence
(Text to speech).
Session-scoped page, picker, TTS playback, and navigation-interaction state.
AppSession ¶
Store process-wide UI objects and navigation-disabled state.
Source code in src/learning_app/ui/app_session.py
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 | |
set_page
classmethod
¶
Register the active Flet page.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
page
|
Page
|
Page used by session-level UI operations. |
required |
get_page
classmethod
¶
Return the registered active page.
Returns:
| Type | Description |
|---|---|
Page
|
The active Flet page. |
Raises:
| Type | Description |
|---|---|
AssertionError
|
If a page has not been registered. |
Source code in src/learning_app/ui/app_session.py
get_export_csv_picker
classmethod
¶
Return the lazily created CSV export file picker.
Returns:
| Type | Description |
|---|---|
FilePicker
|
The shared picker instance for export operations. |
Source code in src/learning_app/ui/app_session.py
init_tts
classmethod
¶
init_tts(
page: Page,
*,
service: TtsService | None = None,
player=None,
) -> None
Create the session TTS service.
Call once from main after set_page. The Audio player is
created during speak with a non-empty src already set, because
Flutter's AudioService throws if it is inited without src.
Screens should use get_tts_service or speak rather than
constructing Audio or GttsProvider.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
page
|
Page
|
Active Flet page; used when |
required |
service
|
TtsService | None
|
Optional pre-built TTS service (tests). |
None
|
player
|
Optional pre-built player (tests). When omitted, Audio is
created later in |
None
|
Source code in src/learning_app/ui/app_session.py
get_tts_service
classmethod
¶
get_tts_service() -> TtsService
Return the shared TTS service for this app session.
Returns:
| Type | Description |
|---|---|
TtsService
|
The session |
Raises:
| Type | Description |
|---|---|
AssertionError
|
If |
Source code in src/learning_app/ui/app_session.py
get_tts_player
classmethod
¶
Return the shared Flet Audio player for pronunciations.
Returns:
| Type | Description |
|---|---|
Audio
|
The session |
Raises:
| Type | Description |
|---|---|
AssertionError
|
If |
Source code in src/learning_app/ui/app_session.py
speak
async
classmethod
¶
Synthesize text if needed and play every slash-separated member.
A newer speak takes over the remaining playlist so two calls do
not drive play in parallel. The current clip is not paused or
stopped. Repeating the same cached file skips remounting and the
load wait so the speaker button can replay immediately. Screens
should call this instead of driving Audio.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
text
|
str
|
Cell value, possibly containing |
required |
language
|
str
|
IETF language tag passed to the TTS provider. |
required |
Source code in src/learning_app/ui/app_session.py
disable_all_navigation_controls
classmethod
¶
Disable available shell navigation controls and update the page.
Bottom app-bar icon buttons, the floating action button, the registered drawer, and home/export sort dropdowns are disabled when present.
Raises:
| Type | Description |
|---|---|
AssertionError
|
If a page has not been registered. |
Source code in src/learning_app/ui/app_session.py
enable_all_navigation_controls
classmethod
¶
Enable available shell navigation controls and update the page.
Raises:
| Type | Description |
|---|---|
AssertionError
|
If a page has not been registered. |
Source code in src/learning_app/ui/app_session.py
is_navigation_disabled
classmethod
¶
Return the navigation state last set by this session registry.
Returns:
| Type | Description |
|---|---|
bool
|
|
bool
|
they are enabled again. |