Получение родительского размера для использования в дочернем - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь поместить AnimatedContainer в свой расширенный виджет (поскольку наличие AnimatedContainer в качестве родительского элемента вызывает ошибки Flex), поскольку я использую событие для изменения размера двух расширенных контейнеров при трех возможных условиях. Оба начинают с гибкого размера 50/50, затем при втором условии он меняется на 25/75, последнее условие - 75/25. Это хорошо работало без контейнера Animated, но изменение размера происходит мгновенно, и я бы предпочел, чтобы он был анимированным. было бы неплохо иметь возможность установить ширину AnimatedContainer равной размеру родительской расширенной ширины, чтобы он анимировал переход размера при изменении значения гибкости Expanded из события, но мне еще предстоит найти достойный способ go около Это. Есть идеи / предложения?

Спасибо, -MH

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Как уже упоминалось, для получения размера используйте LayoutBUilder. Однако для этого варианта использования вы можете просто анимировать Flex напрямую:

var leftFlex = 75;
return TweenAnimationBuilder<int>(
  tween: Tween(begin: 50, end: leftFlex),
  duration: Duration(milliseconds: 700),
  builder: (_, value, __){
    return Row(
      children: [
        Expanded(flex: value, child: leftContent),
        Expanded(flex: 100 - value, child: rightContent),
      ],
    )
  },
)
1 голос
/ 20 июня 2020

Вы можете использовать LayoutBuilder

Expanded(
  flex: (target[expController.target]["changeLogWidth"]),
  child: LayoutBuilder(
    builder: (context, constraints) => AnimatedContainer(
      width: constraints.maxWidth,
      duration: Duration(milliseconds: 500),
      curve: Curves.fastOutSlowIn,
      child: ChangeLogList(),
    ),
  ),
),

Или, что еще проще, попробуйте это

Expanded(
  flex: (target[expController.target]["changeLogWidth"]),
  child: AnimatedContainer(
    width: double.infinity,
    duration: Duration(milliseconds: 500),
    curve: Curves.fastOutSlowIn,
    child: ChangeLogList(),
  ),
),
...