如何才能更正确地编写下图中标记的代码块。我的目标是如果availableColors变量为 null ,则将默认值发送到参数。
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);
});
Run Code Online (Sandbox Code Playgroud)
我无法更改 BlockPicker。它来自外部库。
class BlockPicker extends StatefulWidget {
const BlockPicker({
@required this.pickerColor,
@required this.onColorChanged,
this.availableColors = _defaultColors,
this.layoutBuilder = defaultLayoutBuilder,
this.itemBuilder = defaultItemBuilder,
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,在调用函数时,Dart 没有提供有条件地使用其默认参数的好方法。(至少有一种语言提案可以提供这样的机制。)
一般来说,您通常必须复制函数的默认参数(并希望它不会改变)。
在这种情况下,BlockPicker
不允许您直接执行此操作,因为它的默认值availableColors
是私有的。但是,它的availableColors
属性是公共的,因此您可以构造一个虚拟对象BlockPicker
并提取它使用的默认值。例如:
final defaultAvailableColors =
BlockPicker(
pickerColor: Colors.black,
onColorChanged: (_) {},
).availableColors;
...
child: BlockPicker(
...
availableColors: availableColors ?? defaultAvailableColors,
...
),
...
Run Code Online (Sandbox Code Playgroud)
从长远来看,我会提出一个问题BlockPicker
,并要求将默认值公开或者在参数为 时使用它们null
。
归档时间: |
|
查看次数: |
14500 次 |
最近记录: |