首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在方法中使用showModalBottomSheet时不返回值

在方法中使用showModalBottomSheet时不返回值
EN

Stack Overflow用户
提问于 2022-10-05 08:50:02
回答 3查看 65关注 0票数 0

我有一个String,它应该在单击Future showModalBottomSheet中的按钮后返回。下面是我如何实现它以及它是如何工作的:

代码语言:javascript
运行
复制
onPressed: () async {
  String? returnString = await showModalBottomSheet<String>(
    context: context,
    isDismissible: false,
    builder: (ctx) {
      return StatefulBuilder(builder: (ctx, setState) {
        return Container(
          margin: EdgeInsets.all(10),
          padding: EdgeInsets.all(10),
          child: ElevatedButton(
            onPressed: (){
              Navigator.pop(ctx, "This is return string bla bla bla");
            },
            child: Text("Click Me To Return"),
          ),
        );
      });
    },
  );

  Logger().i("PrintReturnString: $returnString");
  Logger().i("PrintReturnStringRunTimeType: ${returnString.runtimeType}");
}

但是,因为我想在几个地方使用它,而且我不想重复自己,每次在其他类中重写代码都是多余的,所以我决定尝试使用全局方法来实现它,但是它不能工作,所以只返回null而不是String

这是返回字符串bla bla bla

下面是我如何尝试使用类中任何地方都可以调用的方法来实现它:

代码语言:javascript
运行
复制
showReturnStringBottomSheet(ctx) async {
  await showModalBottomSheet<String>(
    context: ctx,
    shape: const RoundedRectangleBorder(
        borderRadius: BorderRadius.vertical(top: Radius.circular(25))),
    elevation: 5,
    isDismissible: true,
    isScrollControlled: true,
    builder: (ctx) {
      return StatefulBuilder(builder: (ctx, setState) {
        return Container(
          margin: EdgeInsets.all(10),
          padding: EdgeInsets.all(10),
          child: ElevatedButton(
            onPressed: (){
              Navigator.pop(ctx, "This is return string bla bla bla");
            },
            child: Text("Click Me To Return"),
          ),
        );
      });
    }
  );
}

下面是我如何调用该方法:

代码语言:javascript
运行
复制
onPressed: () async {
  String? returnString = await showReturnStringBottomSheet(context);
}

我做错什么了吗?因为它只是在我将方法直接放在onPressed中时起作用,但是当我使用全局方法时,它就停止工作了。

EN

Stack Overflow用户

发布于 2022-10-05 09:08:50

showModalBottomSheet是一个async方法,所以您应该等待它,然后它使showReturnStringBottomSheet成为一个future函数,尝试如下:

代码语言:javascript
运行
复制
Future<String?> showReturnStringBottomSheet(ctx) async {
    var result = await showModalBottomSheet<String>(
        context: ctx,
        shape: const RoundedRectangleBorder(
            borderRadius: BorderRadius.vertical(top: Radius.circular(25))),
        elevation: 5,
        isDismissible: true,
        isScrollControlled: true,
        builder: (ctx) {
          return StatefulBuilder(builder: (ctx, setState) {
            return Container(
              margin: EdgeInsets.all(10),
              padding: EdgeInsets.all(10),
              child: ElevatedButton(
                onPressed: () {
                  Navigator.pop(ctx, "This is return string bla bla bla");
                },
                child: Text("Click Me To Return"),
              ),
            );
          });
        });
    return result;
  }

像这样使用它:

代码语言:javascript
运行
复制
onPressed: () async {

   String? returnString = await showReturnStringBottomSheet(context);
   if(returnString != null){
      print("returnString = $returnString");
   }
 }
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73957962

复制
相关文章

相似问题

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