Как развернуть TextField в контейнере по вертикали, чтобы охватить все доступное пространство во флаттере - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу расширить TextField, чтобы охватить все пространство по вертикали, его Container расширяется, но TextField нет, вот дизайн:

Синий - это область Container.но TextField не расширяется

enter image description here

Это код, который я использую:

Container(
      padding: EdgeInsets.all(16),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Text("Title"),
          Container(
            margin: EdgeInsets.only(top: 8),
            child: TextField(
              controller: c_title,
              decoration: Styles.getInputFieldStyle(""),
            ),
          ),
          Container(
            margin: EdgeInsets.only(top: 16),
            child: Text("Feedback"),
          ),
          Expanded(
            child: Container(
              color: Colors.blue,
              margin: EdgeInsets.only(top: 8),
              child: TextField(
                decoration: Styles.getInputFieldStyle(""),
                controller: c_feedback,
                keyboardType: TextInputType.multiline,
              ),
            ),
          ),
          Container(
            margin: EdgeInsets.only(top: 16),
            width: double.infinity,
            child: RaisedButton(
              onPressed: (){_onSubmitPressed();},
              child: Text("Submit"),
              textColor: Colors.white,
              color: MyColors.theme_red,
            ),
          )
        ],
      ),
    );

Ответы [ 4 ]

0 голосов
/ 10 мая 2019

Ниже код может помочь вам -

Используйте "maxLines" и "keyboardType: TextInputType.multiline" для расширения текстовых полей

new Container(
                            child: TextFormField(
                              textAlign: TextAlign.start,
                              style: new TextStyle(
                                  fontSize: 14.0, color: Colors.black),
                              keyboardType: TextInputType.multiline,
                              focusNode: nodeTwo,
                              textInputAction: TextInputAction.next,
                              maxLines: 4,
                              maxLength: 200,
                              decoration: InputDecoration(
                                  labelText: 'Add Description',
                                 alignLabelWithHint: true ,
                                  hintText: 'Enter Description',
                                  hintStyle: TextStyle(fontWeight: 
                                  FontWeight.w300,fontSize: 14.0),
                                  errorStyle: TextStyle(color: Colors.redAccent),
                                  border: OutlineInputBorder(
                                      borderRadius: BorderRadius.circular(5.0))),
                            )
0 голосов
/ 07 апреля 2019

Тебе это нужно.

TextFormField(
  decoration: InputDecoration(hintText: "Enter your very long text here"),
  maxLines: double.maxFinite.floor(), 
),

Редактировать: это окончательное решение для вас.

Container(
  padding: EdgeInsets.all(16),
  child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: <Widget>[
      Text("Title"),
      Container(
        margin: EdgeInsets.only(top: 8),
        child: TextField(
          controller: c_title,
          decoration: Styles.getInputFieldStyle(""),
        ),
      ),
      Container(
        margin: EdgeInsets.only(top: 16),
        child: Text("Feedback"),
      ),
      Expanded(
        child: LayoutBuilder(
          builder: (_, __) {
            return Container(
              color: Colors.blue,
              margin: EdgeInsets.only(top: 8),
              child: TextField(
                decoration: Styles.getInputFieldStyle(""),
                controller: c_feedback,
                maxLines: double.maxFinite.floor(),
                keyboardType: TextInputType.multiline,
              ),
            );
          },
        ),
      ),
      Container(
        margin: EdgeInsets.only(top: 16),
        width: double.infinity,
        child: RaisedButton(
          onPressed: () {
            _onSubmitPressed();
          },
          child: Text("Submit"),
          textColor: Colors.white,
          color: MyColors.theme_red,
        ),
      )
    ],
  ),
),
0 голосов
/ 10 мая 2019

С Flutter 1.5.4 вы можете просто сделать следующее:

Expanded(
  child: TextField(
    expands: true,
    maxLines: null,
  ),
)

Это займет все свободное пространство по вертикали.

0 голосов
/ 07 апреля 2019

A TextField или TextFormField нельзя развернуть, чтобы заполнить экран, поскольку он имеет атрибут maxLines.

При использовании атрибута maxLines в обоих TextField или TextFormField itувеличит их размер в соответствии с количеством назначенных линий.

Так что это должно работать правильно для вас

  Expanded(
    child: TextField(
      keyboardType: TextInputType.multiline,
      maxLines: 20,
    ),
  ),
...