FormTextField скрыт за клавиатурой, несмотря на SingleChildScrollView и отсутствие каркаса на странице

#flutter #flutter-layout

#flutter #flutter-layout

Вопрос:

Я видел, как задавались подобные вопросы, но их ситуация была другой.

У меня есть форма с несколькими текстовыми полями. Страница прокручивается просто отлично, но при поднятой клавиатуре нижние поля не отображаются. В других решениях здесь предлагается добавить новый тег в style.css. Я пробовал это. Не сработало. Некоторые предлагали добавить «resizeToAvoidBottomInset: true» в Scaffold, сделали это, хотя на этой странице нет никакого каркаса.

 Widget build(BuildContext context) {
    return Scrollbar(
      isAlwaysShown: true,
      controller: _scrollController,
      child: SingleChildScrollView(
        controller: _scrollController,
        child: Container(
          padding: EdgeInsets.symmetric(horizontal: 15),
          child: Form(
            key: _formKey,
            child: Column(
              children: [
                _buildSummary(),
                _buildDescription(),
                _buildHourRate(),
                _buildBudget(),
                _buildBudget(),
                ButtonCreate(
                  color: Color(0xFF18D191),
                  textForButton: "SUBMIT",
                  onPressShit: () {
                    if (!_formKey.currentState.validate()) {
                      return;
                    } else {
                      _formKey.currentState.save();

                      print(_summary);
                      print(_description);
                      print(_hourRate);
                      print(_totalBudget);

                      //Send to API
                    }
                  },
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
 

Поля построены следующим образом;

 Widget _buildSummary() {
    return TextFormField(
      decoration: InputDecoration(
          labelText: 'Summary',
          labelStyle: TextStyle(color: Colors.purpleAccent.shade400),
          filled: true,
          fillColor: formFieldbackground.withOpacity(0.3)),
      maxLength: 45,
      validator: (String value) {
        if (value.isEmpty) {
          return 'Summary is required';
        }

        return null;
      },
      onSaved: (String value) {
        _summary = value;
      },
    );
  }
 

Эта форма представляет собой ModalBottomSheet.

Смотрите скриншоты

введите описание изображения здесь

Комментарии:

1. Попробуйте удалить полосу прокрутки и контроллер из кода, указав только SingleChildScrollView@Firaun

2. @Assassin тоже это пробовал. Не сработало 🙁

Ответ №1:

Я перепробовал все, что вы, ребята, предложили, но не сработало. Однако я узнал, что проблема не в форме, а в месте (контейнере), где вызывается форма.

Таким образом, эта форма на самом деле не полноэкранная, а нижняя таблица. Поэтому он должен иметь некоторую высоту для извлечения в виде лотка. Итак, как только я уменьшил высоту контейнера, в котором вызывается эта форма, она начала работать!!

Это, черт возьми, не имеет смысла, но каким-то образом это работает.

Здесь вызывается форма;

 Widget build(BuildContext context) {
return Center(
child: Container(
height: MediaQuery.of(context).size.height / 1.8, //previous height was 600;