# LoaderRow.qml Одна строка модлоадера в карточке [BuildsDialog](BuildsDialog.md): чекбокс, а если он отмечен, выпадающий список версий под выбранную версию Minecraft. Совместимость здесь не проверяется. `backend.loaderVersions()` отдаёт список уже под конкретную версию игры, и несовместимых строк в нём нет. Если список пустой, значит, модлоадер эту версию не поддерживает, и вместо пустого выпадающего списка показывается текст. ## Интерфейс | | | |---|---| | `backend` (required) | `LauncherBackend` | | `loaderKey` (required) | `forge`, `fabric`, `neoforge`, `quilt` | | `title` (required) | подпись у чекбокса | | `gameVersion` | версия Minecraft из карточки; её смена сбрасывает выбор | | `checked` | алиас чекбокса | | `selectedVersion` | выбранная версия модлоадера | | `entries` | строки `{version, label, recommended, stable}` | | `applying` | строка заполняется из сборки; изменения в это время не считаются пользовательскими | | `userChecked()` | пользователь отметил чекбокс. Карточка снимает отметки с остальных строк | | `changed()` | отметка или версия изменились, карточке пора сохранить сборку | | `applyBuild(loader, loaderVersion)` | заполнить из сохранённой сборки без `changed()` | Пока версия игры не выбрана, чекбокс выключен. ## applyEntries(list) Единственное место, где меняются `entries` и `selectedVersion`. Через него проходят все три пути: ответ из кэша, ответ сети и заполнение из сборки. Если выбранной версии в новом списке нет, она заменяется первой строкой, а это самая новая версия для этой версии игры. Если при этом значение изменилось и строка не в режиме `applying`, испускается `changed()`. Раньше проверку делал только путь из сети, и версия модлоадера, выбранная под прошлую версию игры, доживала до сохранения сборки. ## Откуда берётся список `reload()` сначала берёт то, что уже есть в кэше (`loaderVersions()`), чтобы список появился сразу, а потом просит обновление (`refreshLoaderVersions()`). Ответ приходит в `backend.loaderVersionsChanged(key, game)`. Строка сравнивает пару со своей и игнорирует чужие ответы: от другого модлоадера или от прошлой версии игры. Под пустым списком написано «загрузка версий…», пока идёт запрос (`loaderVersionsLoading()`), и «не поддерживает версию N» после. `applyBuild()` берёт версию из сборки как пожелание. Если под текущую версию игры её нет, `applyEntries()` заменит её на самую новую. --- При создании этого документа использовался ИИ.