Flutter-取消showDialog后的运行功能

4 android ios dart flutter

我确实有一个可以在达到一定数量的点时创建AlertDialog的应用程序。在此AlertDialog中,我添加了一个应该重置点的按钮。但是我不知道在AlertDialog被解雇后如何运行一个函数,如果有人可以帮助我解决这个问题将是很棒的。

使用此代码,我调用AlertDialog:

Future<Null> gewinner(int gewinner_team, List<String> spieler){
    return showDialog(
        context: context,
        barrierDismissible: false,
        builder: (BuildContext context) {
          return GewinnerDialog(gewinner_team,spieler);
        }
    );
  }
Run Code Online (Sandbox Code Playgroud)

这是我的代码,用于创建AlertDialog的UI:

import 'package:flutter/material.dart';
import 'spieler_definieren.dart';

class GewinnerDialog extends StatefulWidget{
  int gewinner_team;
  List<String> spieler;

  GewinnerDialog(this.gewinner_team, this.spieler);

  @override
  State<StatefulWidget> createState() => new _Gewinner(gewinner_team, spieler);
}

class _Gewinner extends State<GewinnerDialog>{
  int gewinner_team;
  List<String> spieler;

  _Gewinner(this.gewinner_team, this.spieler);


  @override
  Widget build(BuildContext context) {
    return new AlertDialog(
      content: new SingleChildScrollView(
        child: new Text("Winner")
      ),
      actions: <Widget>[
        //this FlatButton should reset all the points, that are saved into a List<String>
        // in another class
        new FlatButton(
            onPressed: (){
              Navigator.pop(context);
            },
            child: new Row(
              children: <Widget>[
                Icon(Icons.replay),
                new Text("New Game") 

              ],
            )
        ),
        new FlatButton(
            onPressed: (){
              Navigator.pushReplacement(context, new MaterialPageRoute(builder: (BuildContext context) => new SpielerDefinieren()));
            },
            child: new Row(
              children: <Widget>[
                Icon(Icons.person_add),
                new Text("New Player")
              ],
            )
        )
      ],
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助我解决这个问题,那就太好了

bla*_*eil 13

showDialog()可以等待回调,而Navigator.pop可以将值传递回去。所以代替:

Future<Null> gewinner(int gewinner_team, List<String> spieler){
   return showDialog(
       ....
   );
}
Run Code Online (Sandbox Code Playgroud)

您可以使用:

Future<Null> gewinner(int gewinner_team, List<String> spieler) async {
   String returnVal = await showDialog(
       ....
   );
}
Run Code Online (Sandbox Code Playgroud)

然后在对话框构建器/屏幕中,您只需弹出一个返回值:

Navigator.pop(context, 'success');
Run Code Online (Sandbox Code Playgroud)

然后returnVal随心所欲

if (returnVal == 'success') {
  ...
}
Run Code Online (Sandbox Code Playgroud)

如果关闭对话框,则为returnValnull。


jit*_*555 6

这是从警报对话框获取状态的简单示例

    RaisedButton(
            onPressed: () {
              showDialog(
                  context: context,
                  builder: (context) => AlertDialog(
                        title: Text('Are you sure?'),
                        content: Text('Do you want to remove item?'),
                        actions: <Widget>[
                          FlatButton(
                              onPressed: () => Navigator.of(context).pop('Success'),
                              child: Text('NO')),
                          FlatButton(
                              onPressed: () => Navigator.of(context).pop('Failure'),
                              child: Text('YES'))
                        ],
                      )).then((value) =>
                  print('Result: ' + value.toString()));
            },
            child: Text('Show Alert Dialog'),
          ),
Run Code Online (Sandbox Code Playgroud)