我有一张有三个容器的卡。前两个包含文本,最后一个包含文本旁边的TextFormField。所以我有一行人将两者保持在一起。唯一的事情是,当我添加TextFormField小部件时,它没有出现并且控制台抛出错误
══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════ I/flutter (14101): The following assertion was thrown during performLayout(): I/flutter (14101): BoxConstraints forces an infinite width. I/flutter (14101): These invalid constraints were provided to RenderRepaintBoundary's layout() function by the I/flutter (14101): following function, which probably computed the invalid constraints in question: I/flutter (14101): _RenderDecoration._layout.layoutLineBox (package:flutter/src/material/input_decorator.dart:750:11) I/flutter (14101): The offending constraints were: I/flutter (14101): BoxConstraints(w=Infinity, 0.0<=h<=100.0) I/flutter (14101): Another exception was thrown: RenderBox was not laid out: RenderPadding#150b0 relayoutBoundary=up3 NEEDS-PAINT I/flutter (14101): Another exception was thrown: 'package:flutter/src/rendering/shifted_box.dart': Failed assertion: line 310 pos 12: 'child.hasSize': is not true. I/flutter (14101): Another exception was thrown: RenderBox was not laid out: RenderPhysicalShape#1d998 relayoutBoundary=up4
代码看起来像
import 'package:flutter/material.dart'; class Home extends StatefulWidget { @override _HomeState createState() => _HomeState(); } class _HomeState extends State<Home> { @override Widget build(BuildContext context) { return Container( child: Center( child: Card( elevation: 2.0, child: Column( mainAxisSize: MainAxisSize.min, children: <Widget>[ Container( height: 100.0, color: Colors.purple, ), Container( height: 200.0, color: Colors.pink, child: Column( children: <Widget>[ new RichText( textAlign: TextAlign.center, text: TextSpan( text: 'Some Text', style: TextStyle( color: Colors.grey[800], fontWeight: FontWeight.bold, fontSize: 17.0), ), ), new RichText( softWrap: true, textAlign: TextAlign.center, text: TextSpan( text: 'Some other text', style: TextStyle( color: Colors.black54, fontWeight: FontWeight.normal, fontSize: 17.0), ), ), Row( children: <Widget>[ Text('adfa'), Text('data'), Form( child: TextFormField(), ), ], ) ], ), ), ], ), ), )); } }
简短的答案是,直到孩子拥有尺寸,父母才有尺寸。
TextFormField导致问题。它需要限制宽度。
TextFormField
例如, 将其包装成Expanded小部件或Container宽度,例如下面的示例。
Expanded
Container
Row( children: <Widget>[ Expanded( child: TextFormField() ), ], )