我使用streamBuilder进行API调用。根据要求,我必须在API成功响应后转到下一个屏幕。以下是我的代码。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: new Container(
padding: EdgeInsets.all(16.0),
child:StreamBuilder(
stream: bloc.validateUser,
builder: (BuildContext context, snapshot) {
if(snapshot.hasData){
_moveToHomeScreen();
}
return Column(
children: <Widget>[
_createInputFields(),
_createRegisterButton(),
],
);
}
),
),
}
AND
void _moveToHomeScreen () async {
await Navigator.pushReplacement(
context, MaterialPageRoute(builder: (BuildContext context) => HomeScreen())
);
}
但是我的控制台出现以下错误:
[VERBOSE-2:shell.cc(184)] Dart错误:未处理的异常:setState() 或在构建过程中调用的markNeedsBuild()。此叠加小部件不能是 标记为需要构建,因为该框架已经在 构建小部件的过程。可以将小部件标记为需要 仅在其祖先之一当前处于构建阶段时构建 建造。允许此异常是因为框架可以构建 父部件在孩子之前,这意味着肮脏的后代会 总是被建造。否则,框架可能无法访问此小部件 在此构建阶段。 setState()或 被称为markNeedsBuild()的是:
时当前正在构建的小部件
重叠式[LabeledGlobalKey#910a3](状态: OverlayState#70d3b(条目:[OverlayEntry#eabf3(opaque:false; maintenanceState:false),OverlayEntry#1d477(opaque:false; maintainState:true),OverlayEntry#2878e(不透明:false; maintainState: false),OverlayEntry#f7614(opaque:false; maintainState:true)])) 当thefendi <...>