【问题标题】:Flutter: Function with function as Argument; set default functionFlutter:以函数为参数的函数;设置默认功能
【发布时间】:2021-06-18 22:20:55
【问题描述】:

我想创建一个助手来处理我的对话框。为此,我创建了一个静态方法来调用: 我有一个类 DialogInstance 来提供我的值,它应该包含样式和其他对话框信息。


class DialogInstance {
  final BuildContext context;
  final String title;
  final String message;
  final void Function() onCancel;
  final void Function() onConfirm;
  final String confirmText;
  final String cancelText;
  final Color confirmColor;
  final Color cancelColor;

  DialogInstance.confirm(
      {@required this.context,
      @required this.title,
      @required this.message,
      @required this.onConfirm,
      Function() onCancel, // should be default set
      String confirmText,
      String cancelText,
      Color confirmColor,
      this.cancelColor})
      : this.onCancel = onCancel ?? _popContext(context), // setting default (doesn't work)
        this.confirmText = confirmText ?? 'Ok',
        this.cancelText = cancelText ?? 'Abbruch',
        this.confirmColor = confirmColor ?? Colors.red;

  static _popContext(BuildContext context) {
    Navigator.pop(context);
  }
}

我通过以下方式调用它:

DialogHelper.showDialog(dialogInstance: myDialog)

如果我这样做,方法 _popContext 会在初始化时调用,而不是在对话框中调用 onPressed。 如何将此功能设置为默认值,并且对话框在初始化时不会关闭?

【问题讨论】:

    标签: android ios flutter mobile


    【解决方案1】:

    需要创建一个新函数并调用弹出上下文() => _popContext(context)。但是在构造函数中不可能创建最终函数,使用工厂构造函数。

    class DialogInstance {
      final BuildContext context;
      final String title;
      final String message;
      final void Function() onCancel;
      final void Function() onConfirm;
      final String confirmText;
      final String cancelText;
      final Color confirmColor;
      final Color cancelColor;
    
      DialogInstance._(
          {this.context,
          this.title,
          this.message,
          this.onCancel,
          this.onConfirm,
          this.confirmText,
          this.cancelText,
          this.confirmColor,
          this.cancelColor});
    
      factory DialogInstance.confirm(
          {@required BuildContext context,
          @required String title,
          @required String message,
          @required void Function() onConfirm,
          Function() onCancel, // should be default set
          String confirmText,
          String cancelText,
          Color confirmColor,
          Color cancelColor}) {
        return DialogInstance._(
          context: context,
          title: title,
          message: message,
          onConfirm: onConfirm,
          onCancel: onCancel ?? () => _popContext(context),
          confirmText: confirmText ?? 'Ok',
          cancelText: cancelText ?? 'Abbruch',
          confirmColor: confirmColor ?? Colors.red,
        );
      }
    
      static _popContext(BuildContext context) {
        Navigator.pop(context);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 1970-01-01
      • 2011-11-06
      • 2015-03-31
      • 2014-04-25
      • 1970-01-01
      • 2013-01-01
      相关资源
      最近更新 更多