* Add account section to more tab, and remove drawer on android
* Put puzzle dashboard and history button as list tiles
* Remove redundant header when anon
Previous fix was in #2859, but this PR fixes the root cause instead of
adding a workaround.
The root cause of this problem was that we check
`_game.serverAnalysis == null` to check if the RetroController needs to
trigger server analysis in case it isn't already running. When the
server analysis was already triggered by the `AnalysisController`, the
problem was that `archivedGameProvider` is not invalidated and still
returns `null` for the server analysis field. By using the
`GameRepository` directly instead, we get a fresh response from the
server which correctly has a non-null `serverAnalysis`.
An alternative fix would be to add
`red.invalidate(archivedGameProvider(gameId))` when a server analysis
request is triggered in the analysis screen, however this leads to the
analysis screen being rebuilt when triggering server analysis, which
causes a short flicker of the screen during the reload.
To verify that everything still works, I successfully tested the
following scenarios:
1) Trigger server analysis in analysis screen and immediately open
"Learn From Your Mistakes"
-> The loading bar correctly displays server analysis progress,
once analysis is finished Learn from your mistakes is available.
2) Trigger server analysis in analysis screen, wait for it to finish
and only then open "Learn From Your Mistakes"
-> Learn from your mistakes is available immediately without any
loading bar.
3) Trigger server analysis, wait for it to finish and then close the
analysis screen. Open analysis again for the same game and open
"Learn from your Mistakes".
-> Learn from your mistakes is available immediately without any
loading bar.
* New Crowdin translations by GitHub Action
* New Crowdin translations by GitHub Action
---------
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Remove this line so that `enableOnBackInvokedCallback` falls back to the platform default: `false` on Android 14/15 and `true` on Android 16. This should resolve some of the current issues.
* New Crowdin translations by GitHub Action
* New Crowdin translations by GitHub Action
---------
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
The rating filter is disabled whenever the user's rating for the
selected perf is provisional. Previously the UI showed the filter as
greyed-out with no explanation, leaving users confused about why they
couldn't use it.
Tapping the disabled rating filter now opens an adaptive dialog with
the existing localized message
`ratingRangeIsDisabledBecauseYourRatingIsProvisional` explaining the
cause. Applied in both places the filter is rendered:
- The real-time lobby sheet (`create_game_widget.dart`) — the
`OutlinedButton` now has an `onPressed` that shows the dialog when
the filter is unavailable, with `foregroundColor` set to the theme's
disabled color to preserve the greyed-out look.
- The inline `PlayRatingRange` widget (`common_play_widgets.dart`)
used by the correspondence sheet — the disabled `ListTile` is wrapped
in `IgnorePointer` + `GestureDetector(HitTestBehavior.opaque)` so the
inner `NonLinearSlider` widgets cannot swallow the tap in the gesture
arena.
A `SnackBar` was tried first but is invisible behind modal bottom
sheets (it anchors to the root `ScaffoldMessenger`), so a dialog route
is used instead — it pushes on top of the sheet.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>