flutter - 如果参数为空,则使用默认值
问题描述
如何更正确地编写下图中标记的代码块。如果availableColors变量为空,我的目标是向参数发送默认值。
showDialog<Color>(
context: context,
builder: (BuildContext context) {
return OrientationBuilder(
builder: (context, orientation) {
return ResponsiveDialog(
context: context,
title: title,
headerColor: headerColor,
headerTextColor: headerTextColor,
backgroundColor: backgroundColor,
buttonTextColor: buttonTextColor,
child: availableColors == null ? BlockPicker(
pickerColor: selectedColor,
onColorChanged: (color) => selectedColor = color,
): BlockPicker(
pickerColor: selectedColor,
availableColors: availableColors,
onColorChanged: (color) => selectedColor = color,
),
okPressed: () => Navigator.of(context).pop(selectedColor),
);
},
);
},
).then((selection) {
if (onChanged != null && selection != null) onChanged(selection);
});
我无法更改 BlockPicker。它来自外部库。
class BlockPicker extends StatefulWidget {
const BlockPicker({
@required this.pickerColor,
@required this.onColorChanged,
this.availableColors = _defaultColors,
this.layoutBuilder = defaultLayoutBuilder,
this.itemBuilder = defaultItemBuilder,
});
解决方案
不幸的是,在调用函数时,Dart 没有提供有条件地使用其默认参数的好方法。(至少有一种语言提案可以提供这种机制。)
通常,您通常必须复制函数的默认参数(并希望它不会改变)。
在这种情况下,BlockPicker
不允许您直接这样做,因为它的默认值availableColors
是私有的。但是,它的availableColors
属性是公开的,因此您可以构造一个虚拟对象BlockPicker
并提取它使用的默认值。例如:
final defaultAvailableColors =
BlockPicker(
pickerColor: Colors.black,
onColorChanged: (_) {},
).availableColors;
...
child: BlockPicker(
...
availableColors: availableColors ?? defaultAvailableColors,
...
),
...
从长远来看,我会提出一个问题BlockPicker
并要求将默认值公开或在参数为null
.
推荐阅读
- c++ - 线旋转中奇怪的不准确 - C++
- stream - 球拍中的 Varadic 拉链
- c++ - 如何使用 strcmp 将字符串与预定义的字符串进行比较
- python - Python Selenium - 'WebElement'对象不可迭代
- javascript - Base64 上传图片问题
- rust - 证明 struct 字段的生命周期超过另一个生命周期
- javascript - 根据返回的数据更改图表中特定条形的颜色
- flutter - 颤振,在从颤振推送本机视图控制器后,这可能会再次在本机视图控制器上方显示更多内容吗?
- python - Python 时间序列预测平线
- python-3.x - img_as_float 和 rgb2gray 的功能