我不知道我缺少了什么--我有一个返回对话框的使用者类的简单方法,但是问题是
返回类型'Future‘不是'Widget',这是闭包上下文所要求的。
它指向下面所示的线。
func() {
Consumer(builder: (context, ref, _) {
return showDialog( // <- [ERROR HERE]
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: unrelatedfunc(),
actions: [
TextButton(
child: const Text('Share'),
onPressed: () {
submit();
_TextFieldController.clear();
Navigator.of(context).pop();
})
],
);
});
});
}我不知道为什么,但我一直在调查,我还没见过这样的例子
发布于 2022-04-25 00:58:24
如果您试图显示一个具有Consumer的对话框(要在其中使用ref ),请将Consumer移动到构建器内的builder中。
showDialog与Navigator.push类似,您应该只在onPressed、onTap或initState中调用它,而不是在build方法中调用它,因为您无法控制小部件重建的次数。它不构建小部件(与其他小部件一样),而是在历史记录中推送一个新的对话框页(如Navigator.push)。
// Here you are in a `onPressed` of a button (for example):
showDialog(
context: context,
builder: (BuildContext context) {
return Consumer(builder: (context, ref, _) {
return AlertDialog(
content: unrelatedfunc(),
actions: [
TextButton(
child: const Text('Share'),
onPressed: () {
submit();
_TextFieldController.clear();
Navigator.of(context).pop();
},
),
],
);
});
},
);如果需要在显示对话框的相同方法中使用ref (调用showDialog) (例如按钮的onPressed ),则可以用Consumer包装按钮
Consumer(
builder: (context, ref, _) {
return TextButton(
child: Text('My button'),
onPressed: () {
// You can use `ref` here.
showDialog(
context: context,
builder: (context) {
return AlertDialog(/* ... */);
},
);
},
);
},
);发布于 2022-07-17 07:48:35
使用NavigatorState().push。当您试图转到包含showDialog而不是showDialog的屏幕时
https://stackoverflow.com/questions/71993416
复制相似问题