在扩展maxLines属性时自动滚动多行TextFormField

时间:2017-04-11 14:03:29

标签: textfield autoscroll flutter

我实现了一个将maxLines属性设置为3的TextFormField。一旦用户以第四行开头,我怎么能让TextFormField向下滚动?此时光标不再可见,直到用户手动向下滚动。有没有办法自动执行此操作?

此行为实际上是在&text;文本字段中的flutter_gallery应用中显示的。例。只需在“直播故事”中输入长文字即可。输入直到它到达第四行。
我的代码的重要部分实际上是这样的:

import 'package:flutter/material.dart';

class TextFormFieldDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Form(
        child: new TextFormField(
          maxLines: 3,
        ),
      ),
    );
  }
}

到目前为止,我没有找到解决此问题的方法 此问题会影响iOS和Android。

6 个答案:

答案 0 :(得分:4)

我们的团队通过嵌套一些现有的小部件来实现这一目标:

// create the illusion of a beautifully scrolling text box
return new Container(
    color: Colors.gray,
  padding: new EdgeInsets.all(7.0),

  child: new ConstrainedBox(
    constraints: new BoxConstraints(
      minWidth: _contextWidth(),
      maxWidth: _contextWidth(),
      minHeight: AppMeasurements.isLandscapePhone(context) ? 25.0 : 25.0,
      maxHeight: 55.0,
    ),

    child: new SingleChildScrollView(
      scrollDirection: Axis.vertical,
      reverse: true,

        // here's the actual text box
        child: new TextField(
          keyboardType: TextInputType.multiline,
          maxLines: null, //grow automatically
          focusNode: mrFocus,
          controller: _textController,
          onSubmitted: currentIsComposing ? _handleSubmitted : null,
          decoration: new InputDecoration.collapsed(
            hintText: ''Please enter a lot of text',
          ),
        ),
        // ends the actual text box

      ),
    ),
  );
}

我们得到Darky的帮助来获取小部件排序和正确的小部件以使其正常工作。

答案 1 :(得分:1)

我使它像这样工作。希望对您有帮助!

return new Card(
                shape: RoundedRectangleBorder(
                 side: BorderSide(
                   color: Colors.deepPurpleAccent,
                   width: 1
                 ),
                  borderRadius: BorderRadius.circular(3)
                ),
                child: Container(
                  height: 50,
                  child: SingleChildScrollView(
                    child: TextField(
                      maxLines: null,
                    ),
                  ),
                ),
              );

答案 2 :(得分:1)

在最新的flutter 1.20.4中,当该文本字段具有最大高度时,它将滚动。

NTSTATUS SpoofSerialNumber(char* serialNumber)
{
    //RtlSecureZeroMemory
    if (!HWIDGenerated)
    {
        HWIDGenerated = 1;

如果您在Raw或column内使用Textfield,请将其包装在 Container( constraints: BoxConstraints(maxHeight: 200), child: TextField( maxLines: null, ....... ) ) 小部件中

答案 3 :(得分:1)

只需使用 TextFormField() 小部件并设置 minLines= maxLines= 。 缺少的东西在这里滚动指示器。

 TextFormField(
                    minLines: 3,
                    maxLines: 3,
                    key: _messageValueKey,
                    decoration: _inputDecoration,
                  ),

答案 4 :(得分:0)

这似乎是Flutter Framework中缺少的功能,我提交了一个错误来解决它:https://github.com/flutter/flutter/issues/9365

答案 5 :(得分:0)

您可以使用BoxConstraints并设置maxHeight的TextField

Container(
  constraints: BoxConstraints(maxHeight: 100),
  child: SingleChildScrollView(
    child: TextField(
      maxLines: null,
    ),
  ),
);