Size: a a a

Dart & Flutter по-русски

2020 March 30

M

Mike in Dart & Flutter по-русски
Max
(Объясню вопросы. По моему опыту, если нативные средства UI приходится оверрайдить грубыми костылями - в 95% случаев это непродуманный UX)
Не, по UX проблемы нет на этом экране.
Инпут там единственный
источник

БК

Богдан Коломеец in Dart & Flutter по-русски
Смотрю и не могу догнать, что с шарпом не так..
А потом замечаю, что зашёл в другой чатик
источник

M

Mike in Dart & Flutter по-русски
Ну как вариант ещё в стейт писать активно окно или нет, а в каждом диалоге передавать false для родителя, но мне казалось, что есть какие-то более удачные способы
источник

M

Mike in Dart & Flutter по-русски
Диалоговые только для удаления и изменения количества.
Вот на изменении количества и проблема, потому что появляется ещё один инпут
источник

M

Max in Dart & Flutter по-русски
Mike
Ну как вариант ещё в стейт писать активно окно или нет, а в каждом диалоге передавать false для родителя, но мне казалось, что есть какие-то более удачные способы
Подожди. Я правильно понял, что ты рисуешь элементы списка с помощью InkWell, по тапу на них отрабатывает анимация тапа, но не должно происходить никакого действия?
источник

M

Mike in Dart & Flutter по-русски
Max
Подожди. Я правильно понял, что ты рисуешь элементы списка с помощью InkWell, по тапу на них отрабатывает анимация тапа, но не должно происходить никакого действия?
На экране:
1 инпут с постоянным автофокусом
Несколько кнопок и список из InkWell, при нажатии на которые открывается диалоговое для удаления или изменения количества.

Так вот если с целыми(штучными) все было хорошо(±), то когда для весовых(float) сделал поле, то пришлось впихнуть инпут. Фокус которого забирает основной экран, потому что dispose не срабатывает для диалоговых
источник

M

Max in Dart & Flutter по-русски
Звучит так, как будто твою проблему решает метод onFocusChange - отслеживать потерю фокуса и возвращать на место. Но этой проблемы в принципе не должно было возникнуть...
https://api.flutter.dev/flutter/widgets/Focus-class.html
источник

M

Max in Dart & Flutter по-русски
И там же ещё свойство autofocus...
источник

M

Mike in Dart & Flutter по-русски
Max
И там же ещё свойство autofocus...
Короч проще выбросить фокусировку по таймеру и RawKeyboardListener только использовать.
источник

M

Max in Dart & Flutter по-русски
Mike
Короч проще выбросить фокусировку по таймеру и RawKeyboardListener только использовать.
Использование таймера - точно неправильный путь.
источник

M

Mike in Dart & Flutter по-русски
Max
Использование таймера - точно неправильный путь.
¯\_(ツ)_/¯
Спасибо
источник

M

Max in Dart & Flutter по-русски
Мне кажется, средства работы с фокусом во Flutter достаточно развиты, чтобы решить твою задачу без ухищрений. Но не глядя в твой код трудно понять, как именно.
источник

M

Max in Dart & Flutter по-русски
Ты сейчас используешь виджеты Focus, FocusNode или FocusManager?
источник

M

Mike in Dart & Flutter по-русски
Max
Ты сейчас используешь виджеты Focus, FocusNode или FocusManager?
FocusNode
источник

M

Max in Dart & Flutter по-русски
Выглядит так, как будто тебе всё таки нужен Focus
источник

M

Mike in Dart & Flutter по-русски
Похоже самый правильный способ: добавить bool hasActiveDialog = false и при открытии диалога писать true
А дальше, как ты сказал, onFocusChange впихнуть проверку hasActiveDialog
И если нет диалоговых, то фокусироваться на главном
источник

M

Max in Dart & Flutter по-русски
onFocusChange будет дёргаться в момент открытия, а не закрытия диалогового окна.
источник

M

Mike in Dart & Flutter по-русски
Max
onFocusChange будет дёргаться в момент открытия, а не закрытия диалогового окна.
И при тапе на InkWell
источник

M

Max in Dart & Flutter по-русски
а вот свойство autofocus может помочь
источник

M

Mike in Dart & Flutter по-русски
А мне и нужно, чтобы случайные тапы не сбрасывали фокус
источник