我确实有一个可以在达到一定数量的点时创建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); } ); }
这是我的代码,用于创建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") ], ) ) ], ); } }
如果有人可以帮助我解决这个问题,那就太好了
showDialog()可以等待回调,而Navigator.pop可以将值传回。所以代替:
Future<Null> gewinner(int gewinner_team, List<String> spieler){ return showDialog( .... ); }
您可以使用:
Future<Null> gewinner(int gewinner_team, List<String> spieler) async { String returnVal = await showDialog( .... ); }
然后在对话框构建器/屏幕中,您只需弹出一个返回值:
Navigator.pop(context, 'success');
然后returnVal随心所欲
returnVal
if (returnVal == 'success') { ... }
如果关闭对话框,则为returnValnull。