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

Сценарий.

Здесь находится контейнер с TextFormField

Container(
  child: Text(
    'Heloo'
  ),
),

Высота контейнера охватывает текст, чтобы вы могли читать текст. Поэтому в контейнере уже настроена высота по умолчанию (возможно, для обтекания текстового виджета).

Если я использую анимированный контейнер, чтобы по какой-то причине увеличить высоту контейнера до 100, а затем я хотите "сбросить" высоту, как бы вы это сделали?

Container(
  height: someCondition ? 100 : Default_Value_it_was_before_it_changed
  child: Text(
    'Heloo'
  ),
),

ПРИМЕЧАНИЕ: И нет, null не анимируется с AnimationContainer, я уже пробовал это

1 Ответ

0 голосов
/ 20 апреля 2020

Вы можете найти детали виджетов, используя глобальный ключ, и вы можете назначить это значение там.

Следующий код имитирует, как вы можете сделать это в вашем реальном приложении.

 bool press = false;

  GlobalKey _keyRed = GlobalKey();
  Size sizeofcontainer;
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) => _getSizes());
  }

  _getSizes() {
    final RenderBox renderBoxRed = _keyRed.currentContext.findRenderObject();
    setState(() {
      sizeofcontainer = renderBoxRed.size;
    });
    print("SIZE of Red: $sizeofcontainer");
  }

  changestate() {
    setState(() {
      press = !press;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
        child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        Container(
          width: double.infinity,
        ),
        AnimatedContainer(
          key: _keyRed,
          color: Colors.green,
          duration: Duration(seconds: 2),
          height: press ? 150 : sizeofcontainer?.height,
          child: Text("hello"),
        ),
        RaisedButton(
          child: Text("press"),
          onPressed: changestate,
        )
      ],
    ));
  }
...