ImE*_*ban 5 dart flutter riverpod
我不确定我错过了什么,我有一个带有返回对话框的 Consumer 类的简单方法,但问题如下
根据闭包上下文的要求,返回类型“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();
})
],
);
});
});
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但我一直在调查,但我还没有看到这样的例子
Val*_*nal 11
如果您尝试显示一个包含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();
},
),
],
);
});
},
);
Run Code Online (Sandbox Code Playgroud)
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(/* ... */);
},
);
},
);
},
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4709 次 |
| 最近记录: |