我得到一个渲染异常,我不明白如何修复.我正在尝试创建一个包含3行的列.
行[图片]
行[TextField]
行[按钮]
这是构建容器的代码:
Container buildEnterAppContainer(BuildContext context) {
var container = new Container(
padding: const EdgeInsets.all(8.0),
child: new Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
buildImageRow(context),
buildAppEntryRow(context),
buildButtonRow(context)
],
),
);
return container;
}
Run Code Online (Sandbox Code Playgroud)
和我的buildAppEntryRow文本容器的代码
Widget buildAppEntryRow(BuildContext context) {
return new Row(
children: <Widget>[
new TextField(
decoration: const InputDecoration(helperText: "Enter App ID"),
style: Theme.of(context).textTheme.body1,
)
],
);
}
Run Code Online (Sandbox Code Playgroud)
当我运行时,我得到以下异常:
I/flutter ( 7674): BoxConstraints forces an infinite width.
I/flutter ( 7674): These invalid constraints were provided to RenderStack's layout() function by the …Run Code Online (Sandbox Code Playgroud) 我试图理解在Widgets State之外控制StatefulWidget状态的最佳实践.
我定义了以下接口.
abstract class StartupView {
Stream<String> get onAppSelected;
set showActivity(bool activity);
set message(String message);
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个StartupPage实现此接口的StatefulWidget .我希望Widget能够执行以下操作:
按下按钮时,它将通过onAppSelected流发送事件.控制器甚至会监听它并执行一些操作(db调用,服务请求等).
控制器可以调用showActivity或set message使视图显示消息进度.
因为有状态窗口小部件不会将其状态作为属性公开,所以我不知道访问和修改状态属性的最佳方法.
我希望使用它的方式如下:
Widget createStartupPage() {
var page = new StartupPage();
page.onAppSelected.listen((app) {
page.showActivity = true;
//Do some work
page.showActivity = false;
});
}
Run Code Online (Sandbox Code Playgroud)
我已经考虑通过传递我希望它返回的状态来实例化Widget createState()但是感觉不对.
关于我们为什么采用这种方法的一些背景:我们目前有一个Dart Web应用程序.对于视图 - 控制器分离,可测试性和对Flutter的前瞻性思考,我们决定为应用程序中的每个视图创建一个接口.这将允许WebComponent或Flutter Widget实现此接口并使所有控制器逻辑保持不变.