Flutter新手如何对重复的Dart公共属性代码进行重构?
Flutter 弹窗工具方法重构方案
你可以直接将重复的参数和赋值逻辑抽离到统一的公共方法中,把唯一的差异项DialogType作为入参传入即可,具体操作如下:
步骤1:封装统一的基础弹窗方法
把重复的context、title、desc属性收敛到同一个方法内,只把不同的弹窗类型作为可配置参数:
Future getAlert({ required BuildContext context, required String title, required String msg, required DialogType dialogType, // 后续需要自定义其他弹窗属性时,也可以在这里增加可选参数 }){ return AwesomeDialog( context: context, title: title, desc: msg, dialogType: dialogType )..show(); }
调用方式如下:
- 信息弹窗:
getAlert(context: context, title: "提示", msg: "操作说明", dialogType: DialogType.INFO) - 成功弹窗:
getAlert(context: context, title: "成功", msg: "操作完成", dialogType: DialogType.SUCCES) - 警告弹窗:
getAlert(context: context, title: "警告", msg: "操作有风险", dialogType: DialogType.WARNING)
步骤2(可选):保留简写调用方式
如果不想每次调用都传入dialogType参数,可以额外封装对应类型的别名方法,完全复用基础逻辑:
// 信息弹窗快捷调用 Future getInfoAlert({required BuildContext context, required String title, required String msg}) { return getAlert(context: context, title: title, msg: msg, dialogType: DialogType.INFO); } // 成功弹窗快捷调用 Future getSuccessAlert({required BuildContext context, required String title, required String msg}) { return getAlert(context: context, title: title, msg: msg, dialogType: DialogType.SUCCES); } // 警告弹窗快捷调用 Future getWarningAlert({required BuildContext context, required String title, required String msg}) { return getAlert(context: context, title: title, msg: msg, dialogType: DialogType.WARNING); }
优化建议
可以把上述方法放到独立的工具类中全局复用,不需要在每个业务类里重复编写:
class AlertUtils { AlertUtils._(); // 禁止实例化工具类 static Future show({ required BuildContext context, required String title, required String msg, required DialogType dialogType, }){ return AwesomeDialog( context: context, title: title, desc: msg, dialogType: dialogType )..show(); } static Future showInfo({required BuildContext context, required String title, required String msg}) { return show(context: context, title: title, msg: msg, dialogType: DialogType.INFO); } // 其他类型弹窗以此类推 }
调用时直接使用AlertUtils.showInfo(context: context, title: "提示", msg: "内容")即可。
额外说明:你贴的原始代码存在两个小问题,重构后可以直接解决:1. 第二个
getAlert_2方法中desc: msg后缺少逗号会触发语法报错;2. 成功、警告的两个方法都命名为getAlert_2存在重名冲突。
内容的提问来源于stack exchange,提问作者杉山航太
相关产品推荐
相关产品推荐

