Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 显示颤振应用程序中另一个文件中的对话框_Flutter_Dart - Fatal编程技术网

Flutter 显示颤振应用程序中另一个文件中的对话框

Flutter 显示颤振应用程序中另一个文件中的对话框,flutter,dart,Flutter,Dart,我试图在StatefullWidget的另一个文件中显示一个对话框,但是当我调用它的函数时,什么都没有发生 我之所以想这样做,是因为我的代码中有太多的代码嵌套,所以我希望保持简单和干净 下面是对话框.dart文件 导入“包装:颤振/材料.省道”; 类PersonDetailsDialog扩展StatefulWidget{ PersonDetailsDialog({Key}):super(Key:Key); @凌驾 _PersonDetailsDialogState createState(){

我试图在
StatefullWidget
的另一个文件中显示一个对话框,但是当我调用它的函数时,什么都没有发生

我之所以想这样做,是因为我的代码中有太多的代码嵌套,所以我希望保持简单和干净

下面是对话框.dart文件

导入“包装:颤振/材料.省道”;
类PersonDetailsDialog扩展StatefulWidget{
PersonDetailsDialog({Key}):super(Key:Key);
@凌驾
_PersonDetailsDialogState createState(){
返回_PersonDetailsDialogState();
}
}
类_PersonDetailsDialogState扩展状态{
@凌驾
小部件构建(构建上下文){
Future\u neversatified()异步{
返回显示对话框(
上下文:上下文,
barrierDismissible:false,//用户必须点击按钮!
生成器:(BuildContext上下文){
返回警报对话框(
标题:文本(“倒带并记住”),
内容:SingleChildScrollView(
子:列表体(
儿童:[
Text('你永远不会满意'),
文本('你和我一样,我从来都不满足'),
],
),
),
行动:[
扁平按钮(
儿童:文本(“遗憾”),
已按下:(){
Navigator.of(context.pop();
},
),
],
);
},
);
}
}
}
下面是main.dart文件

mport'包装:颤振/材料.dart';
导入“包:实用_0/homepage.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色
),
主页:主页(),
);
}
}
下面是homepage.dart文件,当用户单击
RaisedButton
时,我试图在其中显示对话框,但什么也没发生

导入“包装:颤振/材料.省道”;
类主页扩展了无状态小部件{
最终双高度系数=600/896;
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
孩子:升起按钮(
onPressed:PersonDetailsDialog(),//显示对话框
),
),
);
}
}
您必须使用要显示对话框的位置

我希望下面的例子能澄清你的想法

class Delete extends StatefulWidget {
  @override
  _DeleteState createState() => _DeleteState();
}

class _DeleteState extends State<Delete> {
  BuildContext parent, child;

  @override
  Widget build(BuildContext context) => Scaffold(
        body: Container(
          child: Center(
            child: RaisedButton(
              onPressed: () {
                showDialog(
                    context: context,
                    barrierDismissible: false,
                    child: PersonDetailsDialog());
              }, // show dialog
            ),
          ),
        ),
      );
}

class PersonDetailsDialog extends StatefulWidget {
  PersonDetailsDialog({Key key}) : super(key: key);

  @override
  _PersonDetailsDialogState createState() {
    return _PersonDetailsDialogState();
  }
}

class _PersonDetailsDialogState extends State<PersonDetailsDialog> {
  @override
  Widget build(BuildContext context) {
    return AlertDialog(
      title: Text('Rewind and remember'),
      content: SingleChildScrollView(
        child: ListBody(
          children: <Widget>[
            Text('You will never be satisfied.'),
            Text('You\’re like me. I’m never satisfied.'),
          ],
        ),
      ),
      actions: <Widget>[
        FlatButton(
          child: Text('Regret'),
          onPressed: () {
            Navigator.of(context).pop();
          },
        ),
      ],
    );
  }
}
class Delete扩展StatefulWidget{
@凌驾
_DeleteState createState()=>\u DeleteState();
}
类_DeleteState扩展了状态{
构建上下文父、子;
@凌驾
小部件构建(构建上下文)=>Scaffold(
主体:容器(
儿童:中心(
孩子:升起按钮(
已按下:(){
显示对话框(
上下文:上下文,
禁止:错误,
child:PersonDetailsDialog());
},//显示对话框
),
),
),
);
}
类PersonDetailsDialog扩展StatefulWidget{
PersonDetailsDialog({Key}):super(Key:Key);
@凌驾
_PersonDetailsDialogState createState(){
返回_PersonDetailsDialogState();
}
}
类_PersonDetailsDialogState扩展状态{
@凌驾
小部件构建(构建上下文){
返回警报对话框(
标题:文本(“倒带并记住”),
内容:SingleChildScrollView(
子:列表体(
儿童:[
Text('你永远不会满意'),
文本('你和我一样,我从来都不满足'),
],
),
),
行动:[
扁平按钮(
儿童:文本(“遗憾”),
已按下:(){
Navigator.of(context.pop();
},
),
],
);
}
}
您必须使用要显示对话框的位置

我希望下面的例子能澄清你的想法

class Delete extends StatefulWidget {
  @override
  _DeleteState createState() => _DeleteState();
}

class _DeleteState extends State<Delete> {
  BuildContext parent, child;

  @override
  Widget build(BuildContext context) => Scaffold(
        body: Container(
          child: Center(
            child: RaisedButton(
              onPressed: () {
                showDialog(
                    context: context,
                    barrierDismissible: false,
                    child: PersonDetailsDialog());
              }, // show dialog
            ),
          ),
        ),
      );
}

class PersonDetailsDialog extends StatefulWidget {
  PersonDetailsDialog({Key key}) : super(key: key);

  @override
  _PersonDetailsDialogState createState() {
    return _PersonDetailsDialogState();
  }
}

class _PersonDetailsDialogState extends State<PersonDetailsDialog> {
  @override
  Widget build(BuildContext context) {
    return AlertDialog(
      title: Text('Rewind and remember'),
      content: SingleChildScrollView(
        child: ListBody(
          children: <Widget>[
            Text('You will never be satisfied.'),
            Text('You\’re like me. I’m never satisfied.'),
          ],
        ),
      ),
      actions: <Widget>[
        FlatButton(
          child: Text('Regret'),
          onPressed: () {
            Navigator.of(context).pop();
          },
        ),
      ],
    );
  }
}
class Delete扩展StatefulWidget{
@凌驾
_DeleteState createState()=>\u DeleteState();
}
类_DeleteState扩展了状态{
构建上下文父、子;
@凌驾
小部件构建(构建上下文)=>Scaffold(
主体:容器(
儿童:中心(
孩子:升起按钮(
已按下:(){
显示对话框(
上下文:上下文,
禁止:错误,
child:PersonDetailsDialog());
},//显示对话框
),
),
),
);
}
类PersonDetailsDialog扩展StatefulWidget{
PersonDetailsDialog({Key}):super(Key:Key);
@凌驾
_PersonDetailsDialogState createState(){
返回_PersonDetailsDialogState();
}
}
类_PersonDetailsDialogState扩展状态{
@凌驾
小部件构建(构建上下文){
返回警报对话框(
标题:文本(“倒带并记住”),
内容:SingleChildScrollView(
子:列表体(
儿童:[
Text('你永远不会满意'),
文本('你和我一样,我从来都不满足'),
],
),
),
行动:[
扁平按钮(
儿童:文本(“遗憾”),
已按下:(){
Navigator.of(context.pop();
},
),
],
);
}
}
以下是一个示例:

显示对话框是一个异步函数

child: RaisedButton(
              onPressed: () async{
              final result = await showDialog(
                context: context,
                builder: (_) => AlertWidget(),
              );
              return result;
            },
以下是一个例子:

显示对话框是一个异步函数

child: RaisedButton(
              onPressed: () async{
              final result = await showDialog(
                context: context,
                builder: (_) => AlertWidget(),
              );
              return result;
            },

谢谢!对于更精确的描述:“您必须在想要显示对话框的位置调用
showDialog
方法,但您可以从单独的文件导入此对话框小部件,并将其指定为
showDialog
方法的子项。”此解决方案对我不起作用,因为showDialog的“子项”似乎已被弃用。但是hackemate的解决方案奏效了。非常感谢!