web-dev-qa-db-ja.com

フラッタ内の関数でクラスをパラメータとして渡すことは可能ですか?

ここでは、ダイアログボックスを表示する機能があるユーティリティクラスを持っているので、プロジェクト全体のどこにでも使用できるAlertDialogボックスを作成しようとしています。

そのため、私は警告ダイアログ内のボタンを押すとその画面に移動することができますに移動することができるように、(引数としての説明、引数としての説明を渡す必要があります。

class DialogBox {
  static DialogBox dialogBox = null;

  static DialogBox getInstance() {
    if (dialogBox == null) {
      dialogBox = DialogBox();
    }
    return dialogBox;
  }

  showAlertDialog(BuildContext context, String alertTitle, String alertMessage) {
    showDialog(
        context: context,
        barrierDismissible: false,
        builder: (context) {
          return AlertDialog(
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(15.0),
            ),
            title: Center(child: Text(alertTitle)),
            content: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                Text(
                  alertMessage,
                  textAlign: TextAlign.center,
                ),
                Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    crossAxisAlignment: CrossAxisAlignment.end,
                    children: <Widget>[
                      FlatButton(
                        child: Center(
                            child: Text(
                          'Ok',
                          textAlign: TextAlign.center,
                        )),
                        onPressed: () {
                          Navigator.of(context).pop();
//                          Navigator.of(context).Push(MaterialPageRoute(
//                              builder: (BuildContext context) {
//                            return Home();//Intead of  giving Home() anything can be passed here  
//                          }));
                        },
                      ),
                    ])
              ],
            ),
          );
        });
  }
}
 _

今すぐ私はダイアログボックスを閉じるだけでなく、私は別のクラスに移動したいです。

6

クラス名を渡すことは不適切なアイデアです。クラスはコンストラクタのパラメータを必要とすることができます。

代わりに必要な型のウィジェットを作成する関数を渡すことができます。

showAlertDialog(
    BuildContext context, 
    String alertTitle, 
    String alertMessage,
    Widget Function() createPage,
) {

// ...
  onPressed: () {
    Navigator.of(context).pop();
    Navigator.of(context).Push(MaterialPageRoute(
        builder: (BuildContext context) {
          return createPage();
        }));
  },

// ...
}
 _

そしてそれを呼び出します。このような:

showAlertDialog(context, title, message, () => Home())
 _
2
ookami.kb