我正在制作 BackBtn 类,该类在该应用程序的许多地方使用。
\n\n设计是相同的,只是按下时的行为不同。
\n\n因此,我想在构造函数中传递该函数,该函数在按下按钮时使用。
\n\n但是它显示以下错误
\n\nflutter: \xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1 EXCEPTION CAUGHT BY WIDGETS LIBRARY \xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\nflutter: The following assertion was thrown building BackBtn(dirty):\nflutter: setState() or markNeedsBuild() called during build.\nflutter: This Overlay widget cannot be marked as needing to build because the framework is already in the\nflutter: process of building widgets. A widget can be marked as needing to be built during the build phase\nflutter: only if one of its ancestors is currently building. This exception is allowed because the framework\nflutter: builds parent widgets before children, which means a dirty descendant will always be built.\nflutter: Otherwise, the framework might not visit this widget during this build phase.\nflutter: The widget on which setState() or markNeedsBuild() was called was:\nflutter: Overlay-[LabeledGlobalKey<OverlayState>#320d3]\nflutter: The widget which was currently being built when the offending call was made was:\nflutter: BackBtn\nRun Code Online (Sandbox Code Playgroud)\n\n这些是我制作的代码。
\n\nclass BackBtn extends StatelessWidget{\n\n final Function onPressed; \n const BackBtn({ Key key ,this.onPressed}) : super(key: key);\n\n @override\n Widget build(BuildContext context) {\n return Container(\n alignment: Alignment(1.0,-1.0), \n child: FlatButton(\n onPressed: onPressed(), \n padding: EdgeInsets.all(50),\n child: Image.asset('images/BackIcon.png')\n )\n );\n }\n}\n\nBackBtn(\n onPressed: () => Navigator.push(context,MaterialPageRoute(\n builder: (context) => MyHomePage())),\n),\nRun Code Online (Sandbox Code Playgroud)\n
onPressed()您在将回调分配给 后就已经执行回调了FlatButton()。
尝试删除大括号,如下所示:
class BackBtn extends StatelessWidget{
final Function onPressed;
const BackBtn({ Key key ,this.onPressed}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment(1.0,-1.0),
child: FlatButton(
onPressed: onPressed, // Removed the Braces ()
padding: EdgeInsets.all(50),
child: Image.asset('images/BackIcon.png')
)
);
}
}
Run Code Online (Sandbox Code Playgroud)
太棒了;
当您离开大括号时,它将在构建小部件时立即执行您的 onPressed 处理程序。这意味着您将在构建过程中点击导航器和所有其他内容,而不仅仅是在按下实际按钮时。这会导致你的错误。
| 归档时间: |
|
| 查看次数: |
4167 次 |
| 最近记录: |