首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Riverpod /颤振在消费类中使用showDialog

Riverpod /颤振在消费类中使用showDialog
EN

Stack Overflow用户
提问于 2022-04-25 00:38:00
回答 2查看 1.1K关注 0票数 3

我不知道我缺少了什么--我有一个返回对话框的使用者类的简单方法,但是问题是

返回类型'Future‘不是'Widget',这是闭包上下文所要求的。

它指向下面所示的线。

代码语言:javascript
复制
  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();
                    })
              ],
            );
          });
    });
  }

我不知道为什么,但我一直在调查,我还没见过这样的例子

EN

回答 2

Stack Overflow用户

发布于 2022-04-25 00:58:24

如果您试图显示一个具有Consumer的对话框(要在其中使用ref ),请将Consumer移动到构建器内的builder中。

showDialogNavigator.push类似,您应该只在onPressedonTapinitState中调用它,而不是在build方法中调用它,因为您无法控制小部件重建的次数。它不构建小部件(与其他小部件一样),而是在历史记录中推送一个新的对话框页(如Navigator.push)。

代码语言:javascript
复制
// 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包装按钮

代码语言:javascript
复制
Consumer(
  builder: (context, ref, _) {
    return TextButton(
      child: Text('My button'),
      onPressed: () {
        // You can use `ref` here.
        showDialog(
          context: context,
          builder: (context) {
            return AlertDialog(/* ... */);
          },
        );
      },
    );
  },
);
票数 5
EN

Stack Overflow用户

发布于 2022-07-17 07:48:35

使用NavigatorState().push。当您试图转到包含showDialog而不是showDialog的屏幕时

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71993416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档