GoSnackbar — сообщение, которое само встаёт на место
Садится снизу (или сверху), над безопасной областью и клавиатурой, и уходит сам. Без него слой, размещение, таймер и уборку вы пишете на каждом экране, которому нужно сказать «сохранено».
snack.show_text("Сохранено", GoTheme.SUCCESS)
# Возможность отменить — 0 это первая кнопка, -1 означает, что время вышло
if await snack.post({"text": "Предмет выброшен", "actions": ["Отменить"]}) == 0:
restore_item()
Сообщения встают в очередь, а не затирают друг друга, и повторы одной и той же строки объединяются — сервер, падающий четыре раза в секунду, больше не копит четыре минуты уведомлений. Снекбар без кнопки пропускает ввод сквозь себя, поэтому игра под ним продолжает идти.
GoDialogs. Кнопки здесь должны быть необязательными:
«Отменить», «Подробнее», «Повторить».
GoNotice — вторая половина пары: он никогда не берёт ввод и фокус, а место ему назначает экран,
которому он принадлежит. Кнопку он держать не может; этот — может.
GoSpinner — ожидание без видимого конца
Играм, которые разговаривают с сервером, это нужно больше всего остального на этой странице: замерший экран читается как вылет. Один вызов превращает нажатую кнопку в спиннер на её же месте.
GoSpinner.busy(buy_button, true)
var ok := await server.purchase(item)
GoSpinner.busy(buy_button, false)
Кнопка сохраняет свой размер — подпись становится прозрачной, а не исчезает, поэтому ряд не прыгает, —
и на время вращения она отключена. Вторая часть и есть суть: покупка не должна сработать дважды, пока вы
await. При включённом reduce_motion он не вращается; вместо этого пульсируют три точки.
Прогресс, который можно измерить, — это GoBar. Спиннер ничего не обещает о том, когда закончится.
GoBadge — точка непрочитанного, метка НОВОЕ, 99+
GoBadge.attach(mail_button, unread_count) # при нуле прячется сам
GoBadge.attach(shop_button, 0, "НОВОЕ")
GoBadge.attach(friend_button, 3, "", true) # точка — «там что-то есть»
Он висит на правом верхнем углу носителя на якорях, поэтому следует за носителем, чей размер определится позже, а повторное навешивание возвращает тот же значок. Берите число, когда от количества зависит, что игрок сделает, и точку — когда важно только «там что-то есть».
Цвет его текста подбирается по контрасту с тем цветом, которым значок покрасил скин, — белый никогда не предполагается заранее, — и у него есть доступное имя, потому что цветная точка ничего не говорит программе чтения с экрана.