特定のポイントに達したときに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")
],
)
)
],
);
}
}
誰かがこの問題のXDで私を助けてくれるといいですね
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
を使います。
if (returnVal == 'success') {
...
}
ダイアログが閉じられると、returnVal
はnullになります。