后台代码
我有一个名为 Result
的类,我用它来将一些错误代码和错误消息传递到错误屏幕。
class Result<T>{
Result._();
factory Result.loading(T msg) = LoadingState<T>;
factory Result.success(T value) = SuccessState<T>;
factory Result.error(T title, T msg, T errorcode) = ErrorState<T>;
}
class ErrorState<T> extends Result<T> {
final T title;
final T msg;
final T errorcode;
ErrorState(this.title, this.msg, this.errorcode) : super._();
//final T msg;
}
该类的调用方式如下:
return Result.error("Error","Status code not 200", 1);
我的问题
从功能上来说,一切都很好。
问题是我认为自己将来必须引用我的类结果代码来记住每个字段代表什么,如果我想添加更多字段,这可能会变得更加成问题
我宁愿对其进行转换,以便命名字段
我的问题
能否转换此类,以便像这样调用它(使用描述参数的名称):
return Result.error(title:"Error", msg:"Status code not 200", errorcode:1);
最佳答案
如果你想改变Result.error
要接受命名参数而不破坏现有的调用站点,您不能这样做。参数可以是位置参数或命名参数,但不能同时是两者。
如果您同意破坏现有的调用站点,那么您可以将它们设置为必需的命名参数。由于您使用重定向构造函数,您需要:
更改重定向构造函数的签名(在您的情况下为
ErrorState
)以与Result.error
的签名完全匹配:factory Result.error( {required T title, required T msg, required T errorcode}) = ErrorState<T>; ... ErrorState({required this.title, required this.msg, required this.errorcode}) : super._();
或者更改
Result.error
成为非重定向构造函数:factory Result.error( {required T title, required T msg, required T errorcode}) { return ErrorState<T>(title, msg, errorcode); }
(如果您确实想避免破坏现有的调用方,您可以添加一个使用命名参数的单独的命名构造函数(或 static
方法),并且您可以选择弃用旧的构造函数。)
顺便说一句,Result
没有意义。和ErrorState
是泛型类。您真的期待 title
和msg
不是String
是?对于 title
的类型真的有意义吗? , msg
,和errorcode
是一样的吗? (根据您所展示的示例,您最终会得到 Result<Object>
,这违背了使用泛型类的意义。)
关于flutter - 这个类可以重新配置为接受 Flutter 中的命名参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68187227/