flutter - Dart/Flutter 小部件,带有可选参数,但至少需要一个
问题描述
我正在尝试创建一个可以通过各种参数初始化的 Flutter 小部件,就像这样
class MyWidget extends StatefulWidget {
final int? id;
final String? username;
MyWidget({this.id, this.username});
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
@override
void initState() {
super.initState();
if (widget.id != null) {
// init based on id
} else if (widget.username != null) {
// init based on username
} else {
// this should never happen
}
}
@override
Widget build(BuildContext context) {
return Container(); // build some widget
}
}
如您所见,两者都不id
是username
必需的,但我需要其中至少一个存在。什么是解决这个问题的好方法?
解决方案
您可以将构造函数声明为这些中的任何一个
MyWidget(this.id,{this.username});//ID is required. Usage will be MyWidget(1,usename:'test');
MyWidget(this.username,{this.id});//username is required Usage will be MyWidget('test',id:1);
MyWidget({required this.id, this.username}); //id required
MyWidget({this.id, required this.username});//username required
MyWidget({requried this.id, required this.username});//both required
您还可以使用Assert Statement在运行时检查值看看
MyWidget({this.id, this.username}):assert(id != null && username != null,'Both parameters cannot be null');
推荐阅读
- java - 如何使用定义的对象作为输入变量?
- php - 优化飞行路径 PHP 的距离
- angular - 使用 Angular 8 和 Metismenu 从 BE 加载数据的动态菜单
- javascript - 如何使用 JS 更新网站上显示的单个值?
- linux - 在期望生成命令中使用环境变量
- python-3.x - 检查目标时出错:预期 activation_21 的形状为 (708, 1268, 3) 但得到的数组的形状为 (720, 1280, 3)
- python - 如果数字不在传递的列表的中心,python递归函数给出false,希望得到一些输入
- javascript - 将 base64 数据字符串转换为 PDF 文件以便从 API 下载 - NodeJS
- python - 如何使用 Python / PyPDF4 旋转 PDF 中的每一页?
- python - 有没有办法让 __init__.py 的行为与 python 中的另一个文件完全相同?