BoxConstraints强制无限宽度

Cod*_*ter 10 flutter dart-2 flutter-layout

在列中添加行时出现错误。我收到以下错误:

I/flutter ( 6449): ??? EXCEPTION CAUGHT BY RENDERING LIBRARY ??????????????????????????????????????????????????????????
I/flutter ( 6449): The following assertion was thrown during performLayout():
I/flutter ( 6449): BoxConstraints forces an infinite width.
I/flutter ( 6449): These invalid constraints were provided to RenderAnimatedOpacity's layout() function 
Run Code Online (Sandbox Code Playgroud)

我的代码也可供参考:

return new Scaffold(
      backgroundColor: whiteColor,
      body: new Column(
        children: <Widget>[
          imgHeader,
          lblSignUp,
          txtEmail,
          Row(
            mainAxisAlignment: MainAxisAlignment.start,
            children: <Widget>[
              txtFirstName,
              txtLastName
            ],
          ),
        ],
      ),
    );
Run Code Online (Sandbox Code Playgroud)

Cop*_*oad 34

错误原因:

TextField在水平方向上扩展, 也是Row,所以我们需要限制 的宽度TextField,有很多方法可以做到。

  1. Expanded

     Row(
      children: <Widget>[
        Expanded(child: TextField()),
        // more widgets
      ],
    )
    
    Run Code Online (Sandbox Code Playgroud)
  2. Flexible

    Row(
      children: <Widget>[
        Flexible(child: TextField()),
        // more widgets
      ],
    )
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将其包裹在Container或 中SizedBox并提供width

    Row(
      children: <Widget>[
        SizedBox(width: 100, child: TextField()),
        // more widgets
      ],
    )       
    
    Run Code Online (Sandbox Code Playgroud)


vip*_*ari 27

如果您正在使用TextFieldInside a,Row则需要使用FlexibleExpanded

在此答案中给出了更多详细信息。

/sf/answers/3219333421/


Par*_*iya 6

这种情况只有当你试图定义一个无限的widthheight一个RowColumn或者Container说是的父母TextField想要使用的所有空间。

要解决这个问题,你应该TextFieldFlexible或包裹你的Expanded

这样做可以解决以上问题。

 Expanded(
   child: txtFirstName,
 ),

 Flexible(
   child: txtLastName,
 ),
Run Code Online (Sandbox Code Playgroud)

完整示例

 Column(
    children: <Widget>[
      imgHeader,
      lblSignUp,
      txtEmail,
      Row(
        mainAxisAlignment: MainAxisAlignment.start,
        children: <Widget>[
          Expanded(
            child: txtFirstName,
          ),
          Flexible(
            child: txtLastName,
          ),
        ],
      ),
    ],
  )
Run Code Online (Sandbox Code Playgroud)