#flutter #flutter-layout
#flutter #flutter-макет
Вопрос:
У меня есть LeafRenderObjectWidget
в Column
:
Column(children: [CustomRenderObject(), InkResponse(child: ..), ...])
Ниже этого есть InkResponse
. Обычно заставка и подсветка из InkResponse
будут отображаться над предыдущим виджетом в Column
. Если бы у меня был следующий сценарий, подсветка и всплеск отображались бы над Container
:
Column(children: [Container(height: ..), InkResponse(child: ..), ...])
Однако в моем сценарии с the RenderObject
все, что я рисую внизу моего CustomRenderObject
виджета в paint
методе my RenderBox
, будет нарисовано над InkResponse
заставкой и подсветкой.
Material
Является родительским элементом Column
.
Это означает, что моя InkReponse
подсветка и всплеск обрезаются вверху. Я не хочу добавлять дополнительные дополнения к своему InkResponse
. Как я могу сделать так, чтобы мой InkResponse
рисунок был выше моего RenderBox
?
Ответ №1:
Решения этой проблемы описаны в разделе устранение InkResponse
неполадок класса.
Если вы просто используете простой цветной Container
или что-то подобное, вы можете вместо этого использовать Ink
виджет, который будет рисовать на Material
и, таким образом, отображать InkResponse
подсветку и всплеск выше.
Другим решением было бы добавление Material
типа MaterialType.transparency
:
Material(type: MaterialType.transparency, child: InkResponse(..))
Это будет прямо под самим InkResponse
собой. Однако это не решает мою проблему, поскольку оно обрезает InkResponse
в прямоугольник.
Ответ №2:
Заставка InkResponse
будет отображаться над родительским виджетом в дереве, а не в родственных виджетах. Это объясняет, почему он рисуется в вашем Material
виджете, который находится над Column
, потому Column
что сам по себе это просто макет MultiChildRenderObjectWidget
.
Решение, которое вы предоставили, на самом деле является хорошим подходом, который иногда используется, но поскольку вы хотите отобразить эффект всплеска в своем LeafRenderObjectWidget
, и поскольку у него нет дочерних элементов, Flutter не знает, где на самом деле вы хотите отобразить эффект всплеска. Боюсь, вы не можете использовать InkResponse
для отображения всплесков в виджете листа.
Уродливое решение, которое может сработать, может перейти от использования a Stack
к размещению каждого виджета поверх другого, но вам все равно нужно убедиться, что они будут иметь одинаковый внешний вид. Если это сложный объект рендеринга, это может быть сложно.