首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振showDialog

颤振showDialog
EN

Stack Overflow用户
提问于 2022-11-10 16:17:03
回答 3查看 44关注 0票数 0

我可以在不传递上下文的情况下在函数中showDialog吗?

代码语言:javascript
复制
void test(){
   showDialog(context: context, builder: (_) => AlertDialog(
      content: Column(
        children: [
          Row(
            children: const [
              Icon(Icons.check_circle, color: Colors.green,),
              Text("Hi"),
            ],
          )
        ],
      ),
    ));    
}

对不起,我没有很好地解释,没有将上下文传递给函数,而不是传递给showDialog

EN

回答 3

Stack Overflow用户

发布于 2022-11-10 16:18:32

根据医生(https://api.flutter.dev/flutter/material/showDialog.html)你不能,它是必需的。

票数 0
EN

Stack Overflow用户

发布于 2022-11-10 17:08:56

简单的回答是不,你不能

长话短说:首先,BuildContext是一个对象类型,因此为了消除context属性和context值之间的冲突,我们将它重命名为contextGotFromUI

注意:这里的contextGotFromUI BuildContext 只是一个BuildContext对象sp,我们可以用我们想要的来重命名它。

只是为了不被同一个名字弄糊涂

代码语言:javascript
复制
  void test(){
   showDialog(context: contextGotFromUI, builder: (_) => AlertDialog(
      content: Column(
        children: [
          Row(
            children: const [
              Icon(Icons.check_circle, color: Colors.green,),
              Text("Hi"),
            ],
          )
        ],
      ),
    ));}

showDialog的实现中设置showDialog属性是必需的:

代码语言:javascript
复制
    Future<T?> showDialog<T>({
     required BuildContext context,
     required WidgetBuilder builder,
     bool barrierDismissible = true,
     // more code

BuildContext是一个需要迅速理解的重要主题,在用户实际在屏幕上导航并随时看到的屏幕上显示一个对话框小部件,BuildContext是告诉它在具有特定上下文的小部件之上显示的东西,而不是其他屏幕。

来自showDialog正式文件

上下文参数用于查找对话框的Navigator和主题。它只在调用该方法时使用。在对话框关闭之前,可以安全地从树中删除其相应的小部件。

因此,为了显示来自外部方法的对话框,您需要传递一个属于特定小部件的context,然后在showDialog中使用它。

代码语言:javascript
复制
 void test(BuildContext contextGotFromUI){
   showDialog(context: contextGotFromUI, builder: (_) => AlertDialog(
      content: Column(
        children: [
          Row(
            children: const [
              Icon(Icons.check_circle, color: Colors.green,),
              Text("Hi"),
            ],
          )
        ],
      ),
    ));}

然后从调用该方法的UI中传递它:

代码语言:javascript
复制
Widget build(BuildContext) {
// widgets
//...
 onPressed: () {
  test(context); // will show an expected dialog on the screen
 }
}
票数 0
EN

Stack Overflow用户

发布于 2022-11-10 17:09:26

是的,您可以,但是您必须在有状态小部件中创建函数,而不是在普通类中。如果在普通类中创建函数,则需要上下文!

代码语言:javascript
复制
void test(BuildContext context){
   showDialog(context: context, builder: (_) => AlertDialog(
      content: Column(
        children: [
          Row(
            children: const [
              Icon(Icons.check_circle, color: Colors.green,),
              Text("Hi"),
            ],
          )
        ],
      ),
    ));    
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74392143

复制
相关文章

相似问题

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